CivlCParser.java

// $ANTLR 3.5.2 CivlCParser.g 2026-07-06 18:05:20

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

	// 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 hasTypeSpec;
	}
	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 String getSourceName() { return null; }

		@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;
		}

	    /* This function returns true iff the current token is
	       the first token X in the init-declarator-list of a 
	       declaration.  This holds iff (1) X is '*', '(', or an identifier,
	       and (2) if X is an identifier then a type specifier has already
	       been encountered in this declaration.
	       
	       Rationale: a declaration must have at least one type specifier,
	       and that must occur before the init-declarator list.
	     */
	    boolean indicatesDeclarator() {
	        Token token1 = input.LT(1);
	        int type1 = token1.getType();
	        if (type1 == STAR || type1 == LPAREN) return true;
	        if (type1 != IDENTIFIER) return false;
	        return DeclarationScope_stack.peek().hasTypeSpec;
	    }


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


	// $ANTLR start "quantifier"
	// CivlCParser.g:219: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:220: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:230: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:231: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:231: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_quantifiedExpression1161);
			quantifier2=quantifier();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_quantifier.add(quantifier2.getTree());
			pushFollow(FOLLOW_intervalSeq_in_quantifiedExpression1163);
			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_quantifiedExpression1165); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN4);

			pushFollow(FOLLOW_boundVariableDeclarationList_in_quantifiedExpression1167);
			boundVariableDeclarationList5=boundVariableDeclarationList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_boundVariableDeclarationList.add(boundVariableDeclarationList5.getTree());
			// CivlCParser.g:232: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:232:11: BITOR (restrict= conditionalExpression |restrict= quantifiedExpression ) RPAREN body1= expression
					{
					BITOR6=(Token)match(input,BITOR,FOLLOW_BITOR_in_quantifiedExpression1179); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_BITOR.add(BITOR6);

					// CivlCParser.g:233: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||LA1_0==SUM) ) {
						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:233:14: restrict= conditionalExpression
							{
							pushFollow(FOLLOW_conditionalExpression_in_quantifiedExpression1196);
							restrict=conditionalExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_conditionalExpression.add(restrict.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:233:47: restrict= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_quantifiedExpression1202);
							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_quantifiedExpression1217); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN7);

					pushFollow(FOLLOW_expression_in_quantifiedExpression1233);
					body1=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(body1.getTree());
					// AST REWRITE
					// elements: body1, restrict, boundVariableDeclarationList, quantifier, intervalSeq
					// 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();
					// 236:13: -> ^( QUANTIFIED quantifier boundVariableDeclarationList $body1 $restrict intervalSeq )
					{
						// CivlCParser.g:236: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:238:11: RPAREN body2= expression
					{
					RPAREN8=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_quantifiedExpression1291); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN8);

					pushFollow(FOLLOW_expression_in_quantifiedExpression1307);
					body2=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(body2.getTree());
					// AST REWRITE
					// elements: quantifier, body2, intervalSeq, boundVariableDeclarationList
					// 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();
					// 240:13: -> ^( QUANTIFIED quantifier boundVariableDeclarationList $body2 ABSENT intervalSeq )
					{
						// CivlCParser.g:240: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:250: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:251: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:251:4: enumerationConstant
					{
					root_0 = (Object)adaptor.nil();


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

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


					INTEGER_CONSTANT10=(Token)match(input,INTEGER_CONSTANT,FOLLOW_INTEGER_CONSTANT_in_constant1380); 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:253:4: FLOATING_CONSTANT
					{
					root_0 = (Object)adaptor.nil();


					FLOATING_CONSTANT11=(Token)match(input,FLOATING_CONSTANT,FOLLOW_FLOATING_CONSTANT_in_constant1385); 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:254:4: CHARACTER_CONSTANT
					{
					root_0 = (Object)adaptor.nil();


					CHARACTER_CONSTANT12=(Token)match(input,CHARACTER_CONSTANT,FOLLOW_CHARACTER_CONSTANT_in_constant1390); 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:255:4: SELF
					{
					root_0 = (Object)adaptor.nil();


					SELF13=(Token)match(input,SELF,FOLLOW_SELF_in_constant1395); 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:256:7: PROCNULL
					{
					root_0 = (Object)adaptor.nil();


					PROCNULL14=(Token)match(input,PROCNULL,FOLLOW_PROCNULL_in_constant1403); 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:257:7: STATE_NULL
					{
					root_0 = (Object)adaptor.nil();


					STATE_NULL15=(Token)match(input,STATE_NULL,FOLLOW_STATE_NULL_in_constant1411); 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:258:4: RESULT
					{
					root_0 = (Object)adaptor.nil();


					RESULT16=(Token)match(input,RESULT,FOLLOW_RESULT_in_constant1416); 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:259:4: HERE
					{
					root_0 = (Object)adaptor.nil();


					HERE17=(Token)match(input,HERE,FOLLOW_HERE_in_constant1421); 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:260:7: ELLIPSIS
					{
					root_0 = (Object)adaptor.nil();


					ELLIPSIS18=(Token)match(input,ELLIPSIS,FOLLOW_ELLIPSIS_in_constant1429); 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:265: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:266:2: ({...}? IDENTIFIER -> ^( ENUMERATION_CONSTANT IDENTIFIER ) )
			// CivlCParser.g:266: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_enumerationConstant1444); 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();
			// 267:4: -> ^( ENUMERATION_CONSTANT IDENTIFIER )
			{
				// CivlCParser.g:267:7: ^( 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:271: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:272: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||LA4_4==SUM) ) {
					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:272:4: constant
					{
					root_0 = (Object)adaptor.nil();


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

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


					IDENTIFIER21=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_primaryExpression1474); 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:274:4: STRING_LITERAL
					{
					root_0 = (Object)adaptor.nil();


					STRING_LITERAL22=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_primaryExpression1479); 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:275:7: LPAREN compoundStatement RPAREN
					{
					LPAREN23=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_primaryExpression1487); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN23);

					pushFollow(FOLLOW_compoundStatement_in_primaryExpression1489);
					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_primaryExpression1491); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN25);

					// AST REWRITE
					// elements: LPAREN, RPAREN, 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();
					// 276:9: -> ^( STATEMENT_EXPRESSION LPAREN compoundStatement RPAREN )
					{
						// CivlCParser.g:276: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:277:4: LPAREN expression RPAREN
					{
					LPAREN26=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_primaryExpression1516); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN26);

					pushFollow(FOLLOW_expression_in_primaryExpression1518);
					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_primaryExpression1520); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN28);

					// AST REWRITE
					// elements: expression, 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();
					// 278:9: -> ^( PARENTHESIZED_EXPRESSION LPAREN expression RPAREN )
					{
						// CivlCParser.g:278: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:279:4: genericSelection
					{
					root_0 = (Object)adaptor.nil();


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

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


					pushFollow(FOLLOW_derivativeExpression_in_primaryExpression1550);
					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:284: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:285:2: ( GENERIC LPAREN assignmentExpression COMMA genericAssocList RPAREN -> ^( GENERIC assignmentExpression genericAssocList ) )
			// CivlCParser.g:285:4: GENERIC LPAREN assignmentExpression COMMA genericAssocList RPAREN
			{
			GENERIC31=(Token)match(input,GENERIC,FOLLOW_GENERIC_in_genericSelection1563); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_GENERIC.add(GENERIC31);

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

			pushFollow(FOLLOW_assignmentExpression_in_genericSelection1567);
			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_genericSelection1569); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_COMMA.add(COMMA34);

			pushFollow(FOLLOW_genericAssocList_in_genericSelection1571);
			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_genericSelection1573); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN36);

			// AST REWRITE
			// elements: genericAssocList, GENERIC, 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();
			// 286:9: -> ^( GENERIC assignmentExpression genericAssocList )
			{
				// CivlCParser.g:286: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:292: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:293:2: ( DERIV LSQUARE IDENTIFIER COMMA partialList RSQUARE LPAREN argumentExpressionList RPAREN -> ^( DERIVATIVE_EXPRESSION IDENTIFIER partialList argumentExpressionList RPAREN ) )
			// CivlCParser.g:293:4: DERIV LSQUARE IDENTIFIER COMMA partialList RSQUARE LPAREN argumentExpressionList RPAREN
			{
			DERIV37=(Token)match(input,DERIV,FOLLOW_DERIV_in_derivativeExpression1604); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_DERIV.add(DERIV37);

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

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

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

			pushFollow(FOLLOW_partialList_in_derivativeExpression1612);
			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_derivativeExpression1614); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE42);

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

			pushFollow(FOLLOW_argumentExpressionList_in_derivativeExpression1624);
			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_derivativeExpression1626); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN45);

			// AST REWRITE
			// elements: argumentExpressionList, IDENTIFIER, 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();
			// 295:7: -> ^( DERIVATIVE_EXPRESSION IDENTIFIER partialList argumentExpressionList RPAREN )
			{
				// CivlCParser.g:295:10: ^( 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:301: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:302:2: ( partial ( COMMA partial )* -> ^( PARTIAL_LIST ( partial )+ ) )
			// CivlCParser.g:302:4: partial ( COMMA partial )*
			{
			pushFollow(FOLLOW_partial_in_partialList1670);
			partial46=partial();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_partial.add(partial46.getTree());
			// CivlCParser.g:302: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:302:13: COMMA partial
					{
					COMMA47=(Token)match(input,COMMA,FOLLOW_COMMA_in_partialList1673); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA47);

					pushFollow(FOLLOW_partial_in_partialList1675);
					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();
			// 302:29: -> ^( PARTIAL_LIST ( partial )+ )
			{
				// CivlCParser.g:302: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:306: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:307:2: ( LCURLY IDENTIFIER COMMA INTEGER_CONSTANT RCURLY -> ^( PARTIAL IDENTIFIER INTEGER_CONSTANT ) )
			// CivlCParser.g:307:4: LCURLY IDENTIFIER COMMA INTEGER_CONSTANT RCURLY
			{
			LCURLY49=(Token)match(input,LCURLY,FOLLOW_LCURLY_in_partial1699); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LCURLY.add(LCURLY49);

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

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

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

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

			// AST REWRITE
			// elements: INTEGER_CONSTANT, 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();
			// 308:9: -> ^( PARTIAL IDENTIFIER INTEGER_CONSTANT )
			{
				// CivlCParser.g:308: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:312: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:313:2: ( genericAssociation ( COMMA genericAssociation )* -> ^( GENERIC_ASSOC_LIST ( genericAssociation )+ ) )
			// CivlCParser.g:313:4: genericAssociation ( COMMA genericAssociation )*
			{
			pushFollow(FOLLOW_genericAssociation_in_genericAssocList1738);
			genericAssociation54=genericAssociation();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_genericAssociation.add(genericAssociation54.getTree());
			// CivlCParser.g:313: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:313:24: COMMA genericAssociation
					{
					COMMA55=(Token)match(input,COMMA,FOLLOW_COMMA_in_genericAssocList1741); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA55);

					pushFollow(FOLLOW_genericAssociation_in_genericAssocList1743);
					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();
			// 314:9: -> ^( GENERIC_ASSOC_LIST ( genericAssociation )+ )
			{
				// CivlCParser.g:314: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:318: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:319: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:319:4: typeName COLON assignmentExpression
					{
					pushFollow(FOLLOW_typeName_in_genericAssociation1775);
					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_genericAssociation1777); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COLON.add(COLON58);

					pushFollow(FOLLOW_assignmentExpression_in_genericAssociation1779);
					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();
					// 320:9: -> ^( GENERIC_ASSOCIATION typeName assignmentExpression )
					{
						// CivlCParser.g:320: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:321:4: DEFAULT COLON assignmentExpression
					{
					DEFAULT60=(Token)match(input,DEFAULT,FOLLOW_DEFAULT_in_genericAssociation1802); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_DEFAULT.add(DEFAULT60);

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

					pushFollow(FOLLOW_assignmentExpression_in_genericAssociation1806);
					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();
					// 322:9: -> ^( GENERIC_ASSOCIATION DEFAULT assignmentExpression )
					{
						// CivlCParser.g:322: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:326: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:327: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:327: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:327:4: ( postfixExpressionRoot -> postfixExpressionRoot )
			// CivlCParser.g:327:5: postfixExpressionRoot
			{
			pushFollow(FOLLOW_postfixExpressionRoot_in_postfixExpression1838);
			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();
			// 327:27: -> postfixExpressionRoot
			{
				adaptor.addChild(root_0, stream_postfixExpressionRoot.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:328: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:329:13: l= LSQUARE expression RSQUARE
					{
					l=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_postfixExpression1870); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LSQUARE.add(l);

					pushFollow(FOLLOW_expression_in_postfixExpression1872);
					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_postfixExpression1874); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE65);

					// AST REWRITE
					// elements: postfixExpression, expression, RSQUARE
					// 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();
					// 330:13: -> ^( OPERATOR INDEX[$l] ^( ARGUMENT_LIST $postfixExpression expression ) RSQUARE )
					{
						// CivlCParser.g:330: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:332: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:335:13: LPAREN argumentExpressionList RPAREN
					{
					LPAREN66=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_postfixExpression1979); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN66);

					pushFollow(FOLLOW_argumentExpressionList_in_postfixExpression1981);
					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_postfixExpression1983); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN68);

					// AST REWRITE
					// elements: argumentExpressionList, postfixExpression, 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();
					// 336:13: -> ^( CALL LPAREN $postfixExpression ABSENT argumentExpressionList RPAREN ABSENT )
					{
						// CivlCParser.g:336: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:339:13: LEXCON args1= argumentExpressionList REXCON LPAREN args2= argumentExpressionList RPAREN
					{
					LEXCON69=(Token)match(input,LEXCON,FOLLOW_LEXCON_in_postfixExpression2055); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LEXCON.add(LEXCON69);

					pushFollow(FOLLOW_argumentExpressionList_in_postfixExpression2059);
					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_postfixExpression2061); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_REXCON.add(REXCON70);

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

					pushFollow(FOLLOW_argumentExpressionList_in_postfixExpression2079);
					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_postfixExpression2081); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN72);

					// AST REWRITE
					// elements: args1, args2, RPAREN, LPAREN, postfixExpression
					// 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();
					// 341:13: -> ^( CALL LPAREN $postfixExpression $args1 $args2 RPAREN ABSENT )
					{
						// CivlCParser.g:341: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:342:11: DOT IDENTIFIER
					{
					DOT73=(Token)match(input,DOT,FOLLOW_DOT_in_postfixExpression2126); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_DOT.add(DOT73);

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

					// AST REWRITE
					// elements: postfixExpression, IDENTIFIER, DOT
					// 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();
					// 343:13: -> ^( DOT $postfixExpression IDENTIFIER )
					{
						// CivlCParser.g:343: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:344:11: ARROW IDENTIFIER
					{
					ARROW75=(Token)match(input,ARROW,FOLLOW_ARROW_in_postfixExpression2163); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ARROW.add(ARROW75);

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

					// AST REWRITE
					// elements: postfixExpression, ARROW, 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();
					// 345:13: -> ^( ARROW $postfixExpression IDENTIFIER )
					{
						// CivlCParser.g:345: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:346:11: p= PLUSPLUS
					{
					p=(Token)match(input,PLUSPLUS,FOLLOW_PLUSPLUS_in_postfixExpression2202); 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();
					// 347:13: -> ^( OPERATOR POST_INCREMENT[$p] ^( ARGUMENT_LIST $postfixExpression) )
					{
						// CivlCParser.g:347: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:348: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:349:11: m= MINUSMINUS
					{
					m=(Token)match(input,MINUSMINUS,FOLLOW_MINUSMINUS_in_postfixExpression2260); 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();
					// 350:13: -> ^( OPERATOR POST_DECREMENT[$m] ^( ARGUMENT_LIST $postfixExpression) )
					{
						// CivlCParser.g:350: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:351: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:368: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:369: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:369:4: ( LPAREN typeName RPAREN LCURLY )=> LPAREN typeName RPAREN LCURLY initializerList ( RCURLY | COMMA RCURLY )
					{
					LPAREN77=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_postfixExpressionRoot2347); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN77);

					pushFollow(FOLLOW_typeName_in_postfixExpressionRoot2349);
					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_postfixExpressionRoot2351); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN79);

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

					pushFollow(FOLLOW_initializerList_in_postfixExpressionRoot2355);
					initializerList81=initializerList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_initializerList.add(initializerList81.getTree());
					// CivlCParser.g:371: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:371:5: RCURLY
							{
							RCURLY82=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_postfixExpressionRoot2361); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY82);

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

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

							}
							break;

					}

					// AST REWRITE
					// elements: initializerList, LPAREN, typeName, RCURLY
					// 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: -> ^( COMPOUND_LITERAL LPAREN typeName initializerList RCURLY )
					{
						// CivlCParser.g:374: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:375:4: primaryExpression
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_primaryExpression_in_postfixExpressionRoot2400);
					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:379: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:380: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||LA14_0==SUM) ) {
				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:380:4: (a+= assignmentExpression |a+= quantifiedExpression ) ( COMMA (a+= assignmentExpression |a+= quantifiedExpression ) )*
					{
					// CivlCParser.g:380: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||LA11_0==SUM) ) {
						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:380:5: a+= assignmentExpression
							{
							pushFollow(FOLLOW_assignmentExpression_in_argumentExpressionList2416);
							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:380:31: a+= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_argumentExpressionList2422);
							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:381: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:381:10: COMMA (a+= assignmentExpression |a+= quantifiedExpression )
							{
							COMMA86=(Token)match(input,COMMA,FOLLOW_COMMA_in_argumentExpressionList2434); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_COMMA.add(COMMA86);

							// CivlCParser.g:381: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||LA12_0==SUM) ) {
								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:381:17: a+= assignmentExpression
									{
									pushFollow(FOLLOW_assignmentExpression_in_argumentExpressionList2439);
									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:381:43: a+= quantifiedExpression
									{
									pushFollow(FOLLOW_quantifiedExpression_in_argumentExpressionList2445);
									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();
					// 382:9: -> ^( ARGUMENT_LIST ( $a)+ )
					{
						// CivlCParser.g:382: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:383: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();
					// 383:7: -> ^( ARGUMENT_LIST )
					{
						// CivlCParser.g:383: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:387: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 | sumExpression );
	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;
		ParserRuleReturnScope sumExpression110 =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().hasTypeSpec = false;

		try {
			// CivlCParser.g:393: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 | sumExpression )
			int alt17=12;
			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;
			case SUM:
				{
				alt17=12;
				}
				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:393:4: postfixExpression
					{
					root_0 = (Object)adaptor.nil();


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

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

					pushFollow(FOLLOW_unaryExpression_in_unaryExpression2513);
					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();
					// 395:9: -> ^( OPERATOR PRE_INCREMENT[$p] ^( ARGUMENT_LIST unaryExpression ) )
					{
						// CivlCParser.g:395: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:396: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:397:4: m= MINUSMINUS unaryExpression
					{
					m=(Token)match(input,MINUSMINUS,FOLLOW_MINUSMINUS_in_unaryExpression2555); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_MINUSMINUS.add(m);

					pushFollow(FOLLOW_unaryExpression_in_unaryExpression2557);
					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();
					// 398:9: -> ^( OPERATOR PRE_DECREMENT[$m] ^( ARGUMENT_LIST unaryExpression ) )
					{
						// CivlCParser.g:398: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:399: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:400:4: unaryOperator (a= castExpression |a= quantifiedExpression )
					{
					pushFollow(FOLLOW_unaryOperator_in_unaryExpression2597);
					unaryOperator90=unaryOperator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_unaryOperator.add(unaryOperator90.getTree());
					// CivlCParser.g:400: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||LA15_0==SUM) ) {
						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:400:19: a= castExpression
							{
							pushFollow(FOLLOW_castExpression_in_unaryExpression2602);
							a=castExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_castExpression.add(a.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:400:38: a= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_unaryExpression2608);
							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();
					// 401:9: -> ^( OPERATOR unaryOperator ^( ARGUMENT_LIST $a) )
					{
						// CivlCParser.g:401: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:401: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:402:4: ( SIZEOF LPAREN typeName )=> SIZEOF LPAREN typeName RPAREN
					{
					SIZEOF91=(Token)match(input,SIZEOF,FOLLOW_SIZEOF_in_unaryExpression2646); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SIZEOF.add(SIZEOF91);

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

					pushFollow(FOLLOW_typeName_in_unaryExpression2650);
					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_unaryExpression2652); 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();
					// 403:9: -> ^( SIZEOF TYPE typeName )
					{
						// CivlCParser.g:403: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:404:4: SIZEOF unaryExpression
					{
					SIZEOF95=(Token)match(input,SIZEOF,FOLLOW_SIZEOF_in_unaryExpression2675); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SIZEOF.add(SIZEOF95);

					pushFollow(FOLLOW_unaryExpression_in_unaryExpression2677);
					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();
					// 405:9: -> ^( SIZEOF EXPR unaryExpression )
					{
						// CivlCParser.g:405: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:406:4: SCOPEOF unaryExpression
					{
					SCOPEOF97=(Token)match(input,SCOPEOF,FOLLOW_SCOPEOF_in_unaryExpression2700); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SCOPEOF.add(SCOPEOF97);

					pushFollow(FOLLOW_unaryExpression_in_unaryExpression2702);
					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();
					// 407:9: -> ^( SCOPEOF unaryExpression )
					{
						// CivlCParser.g:407: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:408:4: ALIGNOF LPAREN typeName RPAREN
					{
					ALIGNOF99=(Token)match(input,ALIGNOF,FOLLOW_ALIGNOF_in_unaryExpression2723); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ALIGNOF.add(ALIGNOF99);

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

					pushFollow(FOLLOW_typeName_in_unaryExpression2727);
					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_unaryExpression2729); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN102);

					// AST REWRITE
					// elements: typeName, ALIGNOF
					// 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: -> ^( ALIGNOF typeName )
					{
						// CivlCParser.g:409: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:410: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_unaryExpression2750); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_VALUE_AT.add(VALUE_AT103);

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

					pushFollow(FOLLOW_assignmentExpression_in_unaryExpression2764);
					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_unaryExpression2766); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA105);

					pushFollow(FOLLOW_assignmentExpression_in_unaryExpression2778);
					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_unaryExpression2780); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA106);

					// CivlCParser.g:413: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||LA16_0==SUM) ) {
						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:413:10: b+= assignmentExpression
							{
							pushFollow(FOLLOW_assignmentExpression_in_unaryExpression2793);
							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:413:36: b+= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_unaryExpression2799);
							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_unaryExpression2802); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN107);

					// AST REWRITE
					// elements: VALUE_AT, b, RPAREN
					// 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();
					// 414:9: -> ^( VALUE_AT ( $b)+ RPAREN )
					{
						// CivlCParser.g:414: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:415:4: spawnExpression
					{
					root_0 = (Object)adaptor.nil();


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

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


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

					}
					break;
				case 12 :
					// CivlCParser.g:417:4: sumExpression
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_sumExpression_in_unaryExpression2840);
					sumExpression110=sumExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, sumExpression110.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:421: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 SPAWN111=null;
		Token LPAREN113=null;
		Token RPAREN115=null;
		ParserRuleReturnScope postfixExpressionRoot112 =null;
		ParserRuleReturnScope argumentExpressionList114 =null;

		Object SPAWN111_tree=null;
		Object LPAREN113_tree=null;
		Object RPAREN115_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:422:2: ( SPAWN postfixExpressionRoot LPAREN argumentExpressionList RPAREN -> ^( SPAWN LPAREN postfixExpressionRoot ABSENT argumentExpressionList RPAREN ) )
			// CivlCParser.g:422:4: SPAWN postfixExpressionRoot LPAREN argumentExpressionList RPAREN
			{
			SPAWN111=(Token)match(input,SPAWN,FOLLOW_SPAWN_in_spawnExpression2853); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_SPAWN.add(SPAWN111);

			pushFollow(FOLLOW_postfixExpressionRoot_in_spawnExpression2855);
			postfixExpressionRoot112=postfixExpressionRoot();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_postfixExpressionRoot.add(postfixExpressionRoot112.getTree());
			LPAREN113=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_spawnExpression2857); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN113);

			pushFollow(FOLLOW_argumentExpressionList_in_spawnExpression2859);
			argumentExpressionList114=argumentExpressionList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_argumentExpressionList.add(argumentExpressionList114.getTree());
			RPAREN115=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_spawnExpression2861); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN115);

			// AST REWRITE
			// elements: LPAREN, SPAWN, argumentExpressionList, postfixExpressionRoot, 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();
			// 423:9: -> ^( SPAWN LPAREN postfixExpressionRoot ABSENT argumentExpressionList RPAREN )
			{
				// CivlCParser.g:423: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:428: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 CALLS116=null;
		Token LPAREN117=null;
		Token LPAREN119=null;
		Token RPAREN121=null;
		Token RPAREN122=null;
		ParserRuleReturnScope postfixExpressionRoot118 =null;
		ParserRuleReturnScope argumentExpressionList120 =null;

		Object CALLS116_tree=null;
		Object LPAREN117_tree=null;
		Object LPAREN119_tree=null;
		Object RPAREN121_tree=null;
		Object RPAREN122_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:429:2: ( CALLS LPAREN postfixExpressionRoot LPAREN argumentExpressionList RPAREN RPAREN -> ^( CALLS LPAREN postfixExpressionRoot ABSENT argumentExpressionList RPAREN ) )
			// CivlCParser.g:429:4: CALLS LPAREN postfixExpressionRoot LPAREN argumentExpressionList RPAREN RPAREN
			{
			CALLS116=(Token)match(input,CALLS,FOLLOW_CALLS_in_callsExpression2910); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_CALLS.add(CALLS116);

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

			pushFollow(FOLLOW_postfixExpressionRoot_in_callsExpression2914);
			postfixExpressionRoot118=postfixExpressionRoot();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_postfixExpressionRoot.add(postfixExpressionRoot118.getTree());
			LPAREN119=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_callsExpression2916); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN119);

			pushFollow(FOLLOW_argumentExpressionList_in_callsExpression2926);
			argumentExpressionList120=argumentExpressionList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_argumentExpressionList.add(argumentExpressionList120.getTree());
			RPAREN121=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_callsExpression2928); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN121);

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

			// AST REWRITE
			// elements: LPAREN, postfixExpressionRoot, argumentExpressionList, CALLS, 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();
			// 431:9: -> ^( CALLS LPAREN postfixExpressionRoot ABSENT argumentExpressionList RPAREN )
			{
				// CivlCParser.g:431: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 sumExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "sumExpression"
	// CivlCParser.g:436:1: sumExpression : SUM LPAREN boundVariableDeclarationList RPAREN (body= assignmentExpression |body= quantifiedExpression ) -> ^( SUM boundVariableDeclarationList $body) ;
	public final CivlCParser.sumExpression_return sumExpression() throws RecognitionException {
		DeclarationScope_stack.push(new DeclarationScope_scope());

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

		Object root_0 = null;

		Token SUM123=null;
		Token LPAREN124=null;
		Token RPAREN126=null;
		ParserRuleReturnScope body =null;
		ParserRuleReturnScope boundVariableDeclarationList125 =null;

		Object SUM123_tree=null;
		Object LPAREN124_tree=null;
		Object RPAREN126_tree=null;
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_SUM=new RewriteRuleTokenStream(adaptor,"token SUM");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_boundVariableDeclarationList=new RewriteRuleSubtreeStream(adaptor,"rule boundVariableDeclarationList");
		RewriteRuleSubtreeStream stream_assignmentExpression=new RewriteRuleSubtreeStream(adaptor,"rule assignmentExpression");
		RewriteRuleSubtreeStream stream_quantifiedExpression=new RewriteRuleSubtreeStream(adaptor,"rule quantifiedExpression");


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

		try {
			// CivlCParser.g:442:2: ( SUM LPAREN boundVariableDeclarationList RPAREN (body= assignmentExpression |body= quantifiedExpression ) -> ^( SUM boundVariableDeclarationList $body) )
			// CivlCParser.g:442:4: SUM LPAREN boundVariableDeclarationList RPAREN (body= assignmentExpression |body= quantifiedExpression )
			{
			SUM123=(Token)match(input,SUM,FOLLOW_SUM_in_sumExpression2988); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_SUM.add(SUM123);

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

			pushFollow(FOLLOW_boundVariableDeclarationList_in_sumExpression2992);
			boundVariableDeclarationList125=boundVariableDeclarationList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_boundVariableDeclarationList.add(boundVariableDeclarationList125.getTree());
			RPAREN126=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_sumExpression2994); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN126);

			// CivlCParser.g:443:6: (body= assignmentExpression |body= quantifiedExpression )
			int alt18=2;
			int LA18_0 = input.LA(1);
			if ( (LA18_0==AMPERSAND||LA18_0==CHARACTER_CONSTANT||LA18_0==ELLIPSIS||LA18_0==FLOATING_CONSTANT||LA18_0==IDENTIFIER||LA18_0==INTEGER_CONSTANT||LA18_0==LPAREN||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||LA18_0==SUM) ) {
				alt18=1;
			}
			else if ( (LA18_0==EXISTS||LA18_0==FORALL||LA18_0==UNIFORM) ) {
				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:443:7: body= assignmentExpression
					{
					pushFollow(FOLLOW_assignmentExpression_in_sumExpression3004);
					body=assignmentExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_assignmentExpression.add(body.getTree());
					}
					break;
				case 2 :
					// CivlCParser.g:443:35: body= quantifiedExpression
					{
					pushFollow(FOLLOW_quantifiedExpression_in_sumExpression3010);
					body=quantifiedExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_quantifiedExpression.add(body.getTree());
					}
					break;

			}

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

			root_0 = (Object)adaptor.nil();
			// 444:6: -> ^( SUM boundVariableDeclarationList $body)
			{
				// CivlCParser.g:444:9: ^( SUM boundVariableDeclarationList $body)
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot(stream_SUM.nextNode(), root_1);
				adaptor.addChild(root_1, stream_boundVariableDeclarationList.nextTree());
				adaptor.addChild(root_1, stream_body.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
			DeclarationScope_stack.pop();

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


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


	// $ANTLR start "unaryOperator"
	// CivlCParser.g:449: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 set127=null;

		Object set127_tree=null;

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


			set127=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(set127));
				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:459: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 RPAREN129=null;
		ParserRuleReturnScope typeName128 =null;
		ParserRuleReturnScope castExpression130 =null;
		ParserRuleReturnScope unaryExpression131 =null;

		Object l_tree=null;
		Object RPAREN129_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().hasTypeSpec = false;

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

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

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

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

					pushFollow(FOLLOW_typeName_in_castExpression3110);
					typeName128=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName.add(typeName128.getTree());
					RPAREN129=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_castExpression3112); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN129);

					pushFollow(FOLLOW_castExpression_in_castExpression3114);
					castExpression130=castExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_castExpression.add(castExpression130.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();
					// 467:9: -> ^( CAST typeName castExpression $l)
					{
						// CivlCParser.g:467: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:468:4: unaryExpression
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_unaryExpression_in_castExpression3140);
					unaryExpression131=unaryExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, unaryExpression131.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:473: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 AT133=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope castExpression132 =null;

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

		try {
			// CivlCParser.g:474:2: ( ( castExpression -> castExpression ) ( ( AT )=> AT y= castExpression -> ^( OPERATOR AT ^( ARGUMENT_LIST $remoteExpression $y) ) )* )
			// CivlCParser.g:474:4: ( castExpression -> castExpression ) ( ( AT )=> AT y= castExpression -> ^( OPERATOR AT ^( ARGUMENT_LIST $remoteExpression $y) ) )*
			{
			// CivlCParser.g:474:4: ( castExpression -> castExpression )
			// CivlCParser.g:474:5: castExpression
			{
			pushFollow(FOLLOW_castExpression_in_remoteExpression3154);
			castExpression132=castExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_castExpression.add(castExpression132.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();
			// 474:20: -> castExpression
			{
				adaptor.addChild(root_0, stream_castExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:475:9: ( ( AT )=> AT y= castExpression -> ^( OPERATOR AT ^( ARGUMENT_LIST $remoteExpression $y) ) )*
			loop20:
			while (true) {
				int alt20=2;
				int LA20_0 = input.LA(1);
				if ( (LA20_0==AT) ) {
					int LA20_2 = input.LA(2);
					if ( (synpred4_CivlCParser()) ) {
						alt20=1;
					}

				}

				switch (alt20) {
				case 1 :
					// CivlCParser.g:475:11: ( AT )=> AT y= castExpression
					{
					AT133=(Token)match(input,AT,FOLLOW_AT_in_remoteExpression3176); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_AT.add(AT133);

					pushFollow(FOLLOW_castExpression_in_remoteExpression3180);
					y=castExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_castExpression.add(y.getTree());
					// AST REWRITE
					// elements: y, AT, remoteExpression
					// 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();
					// 476:13: -> ^( OPERATOR AT ^( ARGUMENT_LIST $remoteExpression $y) )
					{
						// CivlCParser.g:476: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:476: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 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 "remoteExpression"


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


	// $ANTLR start "multiplicativeExpression"
	// CivlCParser.g:481: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 STAR135=null;
		Token DIV136=null;
		Token MOD137=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope remoteExpression134 =null;

		Object STAR135_tree=null;
		Object DIV136_tree=null;
		Object MOD137_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:482: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:482: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:482:4: ( remoteExpression -> remoteExpression )
			// CivlCParser.g:482:5: remoteExpression
			{
			pushFollow(FOLLOW_remoteExpression_in_multiplicativeExpression3235);
			remoteExpression134=remoteExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_remoteExpression.add(remoteExpression134.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();
			// 482:22: -> remoteExpression
			{
				adaptor.addChild(root_0, stream_remoteExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:483: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) ) )*
			loop21:
			while (true) {
				int alt21=4;
				switch ( input.LA(1) ) {
				case STAR:
					{
					int LA21_2 = input.LA(2);
					if ( (synpred5_CivlCParser()) ) {
						alt21=1;
					}

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

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

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

					pushFollow(FOLLOW_remoteExpression_in_multiplicativeExpression3261);
					y=remoteExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_remoteExpression.add(y.getTree());
					// AST REWRITE
					// elements: y, multiplicativeExpression, STAR
					// 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();
					// 484:13: -> ^( OPERATOR STAR ^( ARGUMENT_LIST $multiplicativeExpression $y) )
					{
						// CivlCParser.g:484: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:484: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:485:11: ( DIV )=> DIV y= remoteExpression
					{
					DIV136=(Token)match(input,DIV,FOLLOW_DIV_in_multiplicativeExpression3308); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_DIV.add(DIV136);

					pushFollow(FOLLOW_remoteExpression_in_multiplicativeExpression3312);
					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();
					// 486:13: -> ^( OPERATOR DIV ^( ARGUMENT_LIST $multiplicativeExpression $y) )
					{
						// CivlCParser.g:486: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:486: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:487:11: ( MOD )=> MOD y= remoteExpression
					{
					MOD137=(Token)match(input,MOD,FOLLOW_MOD_in_multiplicativeExpression3359); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_MOD.add(MOD137);

					pushFollow(FOLLOW_remoteExpression_in_multiplicativeExpression3363);
					y=remoteExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_remoteExpression.add(y.getTree());
					// AST REWRITE
					// elements: MOD, 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();
					// 488:13: -> ^( OPERATOR MOD ^( ARGUMENT_LIST $multiplicativeExpression $y) )
					{
						// CivlCParser.g:488: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:488: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 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 "multiplicativeExpression"


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


	// $ANTLR start "additiveExpression"
	// CivlCParser.g:493: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 PLUS139=null;
		Token SUB140=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope multiplicativeExpression138 =null;

		Object PLUS139_tree=null;
		Object SUB140_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:494: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:494: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:494:4: ( multiplicativeExpression -> multiplicativeExpression )
			// CivlCParser.g:494:5: multiplicativeExpression
			{
			pushFollow(FOLLOW_multiplicativeExpression_in_additiveExpression3418);
			multiplicativeExpression138=multiplicativeExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_multiplicativeExpression.add(multiplicativeExpression138.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();
			// 494:30: -> multiplicativeExpression
			{
				adaptor.addChild(root_0, stream_multiplicativeExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:495:9: ( ( PLUS )=> PLUS y= multiplicativeExpression -> ^( OPERATOR PLUS ^( ARGUMENT_LIST $additiveExpression $y) ) | ( SUB )=> SUB y= multiplicativeExpression -> ^( OPERATOR SUB ^( ARGUMENT_LIST $additiveExpression $y) ) )*
			loop22:
			while (true) {
				int alt22=3;
				int LA22_0 = input.LA(1);
				if ( (LA22_0==PLUS) ) {
					int LA22_2 = input.LA(2);
					if ( (synpred8_CivlCParser()) ) {
						alt22=1;
					}

				}
				else if ( (LA22_0==SUB) ) {
					int LA22_3 = input.LA(2);
					if ( (synpred9_CivlCParser()) ) {
						alt22=2;
					}

				}

				switch (alt22) {
				case 1 :
					// CivlCParser.g:495:11: ( PLUS )=> PLUS y= multiplicativeExpression
					{
					PLUS139=(Token)match(input,PLUS,FOLLOW_PLUS_in_additiveExpression3440); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_PLUS.add(PLUS139);

					pushFollow(FOLLOW_multiplicativeExpression_in_additiveExpression3444);
					y=multiplicativeExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_multiplicativeExpression.add(y.getTree());
					// AST REWRITE
					// elements: PLUS, additiveExpression, 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();
					// 496:11: -> ^( OPERATOR PLUS ^( ARGUMENT_LIST $additiveExpression $y) )
					{
						// CivlCParser.g:496: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:496: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:497:11: ( SUB )=> SUB y= multiplicativeExpression
					{
					SUB140=(Token)match(input,SUB,FOLLOW_SUB_in_additiveExpression3489); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SUB.add(SUB140);

					pushFollow(FOLLOW_multiplicativeExpression_in_additiveExpression3493);
					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();
					// 498:11: -> ^( OPERATOR SUB ^( ARGUMENT_LIST $additiveExpression $y) )
					{
						// CivlCParser.g:498: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:498: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 loop22;
				}
			}

			}

			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:504: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 DOTDOT141=null;
		ParserRuleReturnScope x =null;
		ParserRuleReturnScope s =null;

		Object DOTDOT141_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:505:2: (x= additiveExpression ( ( DOTDOT )=> DOTDOT s= rangeSuffix -> ^( DOTDOT $x $s) | -> $x) )
			// CivlCParser.g:505:4: x= additiveExpression ( ( DOTDOT )=> DOTDOT s= rangeSuffix -> ^( DOTDOT $x $s) | -> $x)
			{
			pushFollow(FOLLOW_additiveExpression_in_rangeExpression3547);
			x=additiveExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_additiveExpression.add(x.getTree());
			// CivlCParser.g:506:9: ( ( DOTDOT )=> DOTDOT s= rangeSuffix -> ^( DOTDOT $x $s) | -> $x)
			int alt23=2;
			int LA23_0 = input.LA(1);
			if ( (LA23_0==DOTDOT) ) {
				int LA23_1 = input.LA(2);
				if ( (synpred10_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==EQUALS||(LA23_0 >= GT && LA23_0 <= HASH)||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:506:11: ( DOTDOT )=> DOTDOT s= rangeSuffix
					{
					DOTDOT141=(Token)match(input,DOTDOT,FOLLOW_DOTDOT_in_rangeExpression3564); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_DOTDOT.add(DOTDOT141);

					pushFollow(FOLLOW_rangeSuffix_in_rangeExpression3568);
					s=rangeSuffix();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_rangeSuffix.add(s.getTree());
					// AST REWRITE
					// elements: x, s, DOTDOT
					// 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();
					// 506:43: -> ^( DOTDOT $x $s)
					{
						// CivlCParser.g:506: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:507: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();
					// 507: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:511: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 HASH142=null;
		ParserRuleReturnScope x =null;
		ParserRuleReturnScope y =null;

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

		try {
			// CivlCParser.g:512:5: (x= additiveExpression ( ( HASH )=> HASH y= additiveExpression -> $x $y| -> $x) )
			// CivlCParser.g:512:7: x= additiveExpression ( ( HASH )=> HASH y= additiveExpression -> $x $y| -> $x)
			{
			pushFollow(FOLLOW_additiveExpression_in_rangeSuffix3624);
			x=additiveExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_additiveExpression.add(x.getTree());
			// CivlCParser.g:513:9: ( ( HASH )=> HASH y= additiveExpression -> $x $y| -> $x)
			int alt24=2;
			int LA24_0 = input.LA(1);
			if ( (LA24_0==HASH) ) {
				int LA24_1 = input.LA(2);
				if ( (synpred11_CivlCParser()) ) {
					alt24=1;
				}
				else if ( (true) ) {
					alt24=2;
				}

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

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

			switch (alt24) {
				case 1 :
					// CivlCParser.g:513:11: ( HASH )=> HASH y= additiveExpression
					{
					HASH142=(Token)match(input,HASH,FOLLOW_HASH_in_rangeSuffix3641); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_HASH.add(HASH142);

					pushFollow(FOLLOW_additiveExpression_in_rangeSuffix3645);
					y=additiveExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_additiveExpression.add(y.getTree());
					// AST REWRITE
					// elements: x, y
					// 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();
					// 513: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:514: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();
					// 514: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:519: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 SHIFTLEFT144=null;
		Token SHIFTRIGHT145=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope rangeExpression143 =null;

		Object SHIFTLEFT144_tree=null;
		Object SHIFTRIGHT145_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:520: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:520: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:520:4: ( rangeExpression -> rangeExpression )
			// CivlCParser.g:520:5: rangeExpression
			{
			pushFollow(FOLLOW_rangeExpression_in_shiftExpression3695);
			rangeExpression143=rangeExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_rangeExpression.add(rangeExpression143.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();
			// 520:21: -> rangeExpression
			{
				adaptor.addChild(root_0, stream_rangeExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:521:9: ( ( SHIFTLEFT )=> SHIFTLEFT y= rangeExpression -> ^( OPERATOR SHIFTLEFT ^( ARGUMENT_LIST $shiftExpression $y) ) | ( SHIFTRIGHT )=> SHIFTRIGHT y= rangeExpression -> ^( OPERATOR SHIFTRIGHT ^( ARGUMENT_LIST $shiftExpression $y) ) )*
			loop25:
			while (true) {
				int alt25=3;
				int LA25_0 = input.LA(1);
				if ( (LA25_0==SHIFTLEFT) ) {
					int LA25_2 = input.LA(2);
					if ( (synpred12_CivlCParser()) ) {
						alt25=1;
					}

				}
				else if ( (LA25_0==SHIFTRIGHT) ) {
					int LA25_3 = input.LA(2);
					if ( (synpred13_CivlCParser()) ) {
						alt25=2;
					}

				}

				switch (alt25) {
				case 1 :
					// CivlCParser.g:521:11: ( SHIFTLEFT )=> SHIFTLEFT y= rangeExpression
					{
					SHIFTLEFT144=(Token)match(input,SHIFTLEFT,FOLLOW_SHIFTLEFT_in_shiftExpression3717); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SHIFTLEFT.add(SHIFTLEFT144);

					pushFollow(FOLLOW_rangeExpression_in_shiftExpression3721);
					y=rangeExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_rangeExpression.add(y.getTree());
					// AST REWRITE
					// elements: SHIFTLEFT, shiftExpression, 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();
					// 522:11: -> ^( OPERATOR SHIFTLEFT ^( ARGUMENT_LIST $shiftExpression $y) )
					{
						// CivlCParser.g:522: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:522: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:523:11: ( SHIFTRIGHT )=> SHIFTRIGHT y= rangeExpression
					{
					SHIFTRIGHT145=(Token)match(input,SHIFTRIGHT,FOLLOW_SHIFTRIGHT_in_shiftExpression3766); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SHIFTRIGHT.add(SHIFTRIGHT145);

					pushFollow(FOLLOW_rangeExpression_in_shiftExpression3770);
					y=rangeExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_rangeExpression.add(y.getTree());
					// AST REWRITE
					// elements: shiftExpression, y, 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();
					// 524:11: -> ^( OPERATOR SHIFTRIGHT ^( ARGUMENT_LIST $shiftExpression $y) )
					{
						// CivlCParser.g:524: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:524: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 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 "shiftExpression"


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


	// $ANTLR start "relationalExpression"
	// CivlCParser.g:529: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 shiftExpression146 =null;
		ParserRuleReturnScope relationalOperator147 =null;

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

		try {
			// CivlCParser.g:530:2: ( ( shiftExpression -> shiftExpression ) ( ( relationalOperator )=> relationalOperator (y= shiftExpression ) -> ^( OPERATOR relationalOperator ^( ARGUMENT_LIST $relationalExpression $y) ) )* )
			// CivlCParser.g:530:4: ( shiftExpression -> shiftExpression ) ( ( relationalOperator )=> relationalOperator (y= shiftExpression ) -> ^( OPERATOR relationalOperator ^( ARGUMENT_LIST $relationalExpression $y) ) )*
			{
			// CivlCParser.g:530:4: ( shiftExpression -> shiftExpression )
			// CivlCParser.g:530:6: shiftExpression
			{
			pushFollow(FOLLOW_shiftExpression_in_relationalExpression3824);
			shiftExpression146=shiftExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_shiftExpression.add(shiftExpression146.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();
			// 530:22: -> shiftExpression
			{
				adaptor.addChild(root_0, stream_shiftExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:531:9: ( ( relationalOperator )=> relationalOperator (y= shiftExpression ) -> ^( OPERATOR relationalOperator ^( ARGUMENT_LIST $relationalExpression $y) ) )*
			loop26:
			while (true) {
				int alt26=2;
				int LA26_0 = input.LA(1);
				if ( ((LA26_0 >= GT && LA26_0 <= GTE)||(LA26_0 >= LT && LA26_0 <= LTE)) ) {
					int LA26_2 = input.LA(2);
					if ( (synpred14_CivlCParser()) ) {
						alt26=1;
					}

				}

				switch (alt26) {
				case 1 :
					// CivlCParser.g:531:11: ( relationalOperator )=> relationalOperator (y= shiftExpression )
					{
					pushFollow(FOLLOW_relationalOperator_in_relationalExpression3847);
					relationalOperator147=relationalOperator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_relationalOperator.add(relationalOperator147.getTree());
					// CivlCParser.g:532:13: (y= shiftExpression )
					// CivlCParser.g:532:14: y= shiftExpression
					{
					pushFollow(FOLLOW_shiftExpression_in_relationalExpression3864);
					y=shiftExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_shiftExpression.add(y.getTree());
					}

					// AST REWRITE
					// elements: relationalOperator, relationalExpression, 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();
					// 533:13: -> ^( OPERATOR relationalOperator ^( ARGUMENT_LIST $relationalExpression $y) )
					{
						// CivlCParser.g:533: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:534: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 loop26;
				}
			}

			}

			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:539: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 set148=null;

		Object set148_tree=null;

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


			set148=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(set148));
				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:544: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 relationalExpression149 =null;
		ParserRuleReturnScope equalityOperator150 =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:545:2: ( ( relationalExpression -> relationalExpression ) ( ( equalityOperator )=> equalityOperator (y= relationalExpression |y= quantifiedExpression ) -> ^( OPERATOR equalityOperator ^( ARGUMENT_LIST $equalityExpression $y) ) )* )
			// CivlCParser.g:545:4: ( relationalExpression -> relationalExpression ) ( ( equalityOperator )=> equalityOperator (y= relationalExpression |y= quantifiedExpression ) -> ^( OPERATOR equalityOperator ^( ARGUMENT_LIST $equalityExpression $y) ) )*
			{
			// CivlCParser.g:545:4: ( relationalExpression -> relationalExpression )
			// CivlCParser.g:545:6: relationalExpression
			{
			pushFollow(FOLLOW_relationalExpression_in_equalityExpression3962);
			relationalExpression149=relationalExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_relationalExpression.add(relationalExpression149.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();
			// 545:27: -> relationalExpression
			{
				adaptor.addChild(root_0, stream_relationalExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:546:9: ( ( equalityOperator )=> equalityOperator (y= relationalExpression |y= quantifiedExpression ) -> ^( OPERATOR equalityOperator ^( ARGUMENT_LIST $equalityExpression $y) ) )*
			loop28:
			while (true) {
				int alt28=2;
				int LA28_0 = input.LA(1);
				if ( (LA28_0==EQUALS||LA28_0==NEQ) ) {
					int LA28_2 = input.LA(2);
					if ( (synpred15_CivlCParser()) ) {
						alt28=1;
					}

				}

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

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

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

					}

					// AST REWRITE
					// elements: equalityExpression, equalityOperator, 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();
					// 548:13: -> ^( OPERATOR equalityOperator ^( ARGUMENT_LIST $equalityExpression $y) )
					{
						// CivlCParser.g:548: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:549: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 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 "equalityExpression"


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


	// $ANTLR start "equalityOperator"
	// CivlCParser.g:554: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 set151=null;

		Object set151_tree=null;

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


			set151=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(set151));
				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:559: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 AMPERSAND153=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope equalityExpression152 =null;

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

		try {
			// CivlCParser.g:560:2: ( ( equalityExpression -> equalityExpression ) ( ( AMPERSAND )=> AMPERSAND y= equalityExpression -> ^( OPERATOR AMPERSAND ^( ARGUMENT_LIST $andExpression $y) ) )* )
			// CivlCParser.g:560:4: ( equalityExpression -> equalityExpression ) ( ( AMPERSAND )=> AMPERSAND y= equalityExpression -> ^( OPERATOR AMPERSAND ^( ARGUMENT_LIST $andExpression $y) ) )*
			{
			// CivlCParser.g:560:4: ( equalityExpression -> equalityExpression )
			// CivlCParser.g:560:6: equalityExpression
			{
			pushFollow(FOLLOW_equalityExpression_in_andExpression4097);
			equalityExpression152=equalityExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_equalityExpression.add(equalityExpression152.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();
			// 560:25: -> equalityExpression
			{
				adaptor.addChild(root_0, stream_equalityExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

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

				}

				switch (alt29) {
				case 1 :
					// CivlCParser.g:561:11: ( AMPERSAND )=> AMPERSAND y= equalityExpression
					{
					AMPERSAND153=(Token)match(input,AMPERSAND,FOLLOW_AMPERSAND_in_andExpression4120); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_AMPERSAND.add(AMPERSAND153);

					pushFollow(FOLLOW_equalityExpression_in_andExpression4124);
					y=equalityExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_equalityExpression.add(y.getTree());
					// AST REWRITE
					// elements: andExpression, y, AMPERSAND
					// 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();
					// 562:13: -> ^( OPERATOR AMPERSAND ^( ARGUMENT_LIST $andExpression $y) )
					{
						// CivlCParser.g:562: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:562: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 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 "andExpression"


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


	// $ANTLR start "exclusiveOrExpression"
	// CivlCParser.g:567: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 BITXOR155=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope andExpression154 =null;

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

		try {
			// CivlCParser.g:568:2: ( ( andExpression -> andExpression ) ( ( BITXOR )=> BITXOR y= andExpression -> ^( OPERATOR BITXOR ^( ARGUMENT_LIST $exclusiveOrExpression $y) ) )* )
			// CivlCParser.g:568:4: ( andExpression -> andExpression ) ( ( BITXOR )=> BITXOR y= andExpression -> ^( OPERATOR BITXOR ^( ARGUMENT_LIST $exclusiveOrExpression $y) ) )*
			{
			// CivlCParser.g:568:4: ( andExpression -> andExpression )
			// CivlCParser.g:568:6: andExpression
			{
			pushFollow(FOLLOW_andExpression_in_exclusiveOrExpression4180);
			andExpression154=andExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_andExpression.add(andExpression154.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();
			// 568:20: -> andExpression
			{
				adaptor.addChild(root_0, stream_andExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

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

				}

				switch (alt30) {
				case 1 :
					// CivlCParser.g:569:11: ( BITXOR )=> BITXOR y= andExpression
					{
					BITXOR155=(Token)match(input,BITXOR,FOLLOW_BITXOR_in_exclusiveOrExpression4203); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_BITXOR.add(BITXOR155);

					pushFollow(FOLLOW_andExpression_in_exclusiveOrExpression4207);
					y=andExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_andExpression.add(y.getTree());
					// AST REWRITE
					// elements: BITXOR, exclusiveOrExpression, 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();
					// 570:13: -> ^( OPERATOR BITXOR ^( ARGUMENT_LIST $exclusiveOrExpression $y) )
					{
						// CivlCParser.g:570: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:570: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 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 "exclusiveOrExpression"


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


	// $ANTLR start "inclusiveOrExpression"
	// CivlCParser.g:575: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 BITOR157=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope exclusiveOrExpression156 =null;

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

		try {
			// CivlCParser.g:576:2: ( ( exclusiveOrExpression -> exclusiveOrExpression ) ( ( BITOR )=> BITOR y= exclusiveOrExpression -> ^( OPERATOR BITOR ^( ARGUMENT_LIST $inclusiveOrExpression $y) ) )* )
			// CivlCParser.g:576:4: ( exclusiveOrExpression -> exclusiveOrExpression ) ( ( BITOR )=> BITOR y= exclusiveOrExpression -> ^( OPERATOR BITOR ^( ARGUMENT_LIST $inclusiveOrExpression $y) ) )*
			{
			// CivlCParser.g:576:4: ( exclusiveOrExpression -> exclusiveOrExpression )
			// CivlCParser.g:576:6: exclusiveOrExpression
			{
			pushFollow(FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression4263);
			exclusiveOrExpression156=exclusiveOrExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_exclusiveOrExpression.add(exclusiveOrExpression156.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();
			// 576:28: -> exclusiveOrExpression
			{
				adaptor.addChild(root_0, stream_exclusiveOrExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:577:9: ( ( BITOR )=> BITOR y= exclusiveOrExpression -> ^( OPERATOR BITOR ^( ARGUMENT_LIST $inclusiveOrExpression $y) ) )*
			loop31:
			while (true) {
				int alt31=2;
				int LA31_0 = input.LA(1);
				if ( (LA31_0==BITOR) ) {
					int LA31_2 = input.LA(2);
					if ( (synpred18_CivlCParser()) ) {
						alt31=1;
					}

				}

				switch (alt31) {
				case 1 :
					// CivlCParser.g:577:11: ( BITOR )=> BITOR y= exclusiveOrExpression
					{
					BITOR157=(Token)match(input,BITOR,FOLLOW_BITOR_in_inclusiveOrExpression4286); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_BITOR.add(BITOR157);

					pushFollow(FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression4290);
					y=exclusiveOrExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_exclusiveOrExpression.add(y.getTree());
					// AST REWRITE
					// elements: BITOR, inclusiveOrExpression, 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();
					// 578:13: -> ^( OPERATOR BITOR ^( ARGUMENT_LIST $inclusiveOrExpression $y) )
					{
						// CivlCParser.g:578: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:578: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 loop31;
				}
			}

			}

			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:583: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 AND159=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope inclusiveOrExpression158 =null;

		Object AND159_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:584:2: ( ( inclusiveOrExpression -> inclusiveOrExpression ) ( ( AND )=> AND (y= inclusiveOrExpression |y= quantifiedExpression ) -> ^( OPERATOR AND ^( ARGUMENT_LIST $logicalAndExpression $y) ) )* )
			// CivlCParser.g:584:4: ( inclusiveOrExpression -> inclusiveOrExpression ) ( ( AND )=> AND (y= inclusiveOrExpression |y= quantifiedExpression ) -> ^( OPERATOR AND ^( ARGUMENT_LIST $logicalAndExpression $y) ) )*
			{
			// CivlCParser.g:584:4: ( inclusiveOrExpression -> inclusiveOrExpression )
			// CivlCParser.g:584:6: inclusiveOrExpression
			{
			pushFollow(FOLLOW_inclusiveOrExpression_in_logicalAndExpression4346);
			inclusiveOrExpression158=inclusiveOrExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_inclusiveOrExpression.add(inclusiveOrExpression158.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();
			// 584:28: -> inclusiveOrExpression
			{
				adaptor.addChild(root_0, stream_inclusiveOrExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:585:9: ( ( AND )=> AND (y= inclusiveOrExpression |y= quantifiedExpression ) -> ^( OPERATOR AND ^( ARGUMENT_LIST $logicalAndExpression $y) ) )*
			loop33:
			while (true) {
				int alt33=2;
				int LA33_0 = input.LA(1);
				if ( (LA33_0==AND) ) {
					int LA33_2 = input.LA(2);
					if ( (synpred19_CivlCParser()) ) {
						alt33=1;
					}

				}

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

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

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

					switch (alt32) {
						case 1 :
							// CivlCParser.g:585:24: y= inclusiveOrExpression
							{
							pushFollow(FOLLOW_inclusiveOrExpression_in_logicalAndExpression4374);
							y=inclusiveOrExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_inclusiveOrExpression.add(y.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:585:50: y= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_logicalAndExpression4380);
							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();
					// 586:13: -> ^( OPERATOR AND ^( ARGUMENT_LIST $logicalAndExpression $y) )
					{
						// CivlCParser.g:586: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:586: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 loop33;
				}
			}

			}

			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:591: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 OR161=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope logicalAndExpression160 =null;

		Object OR161_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:592:2: ( ( logicalAndExpression -> logicalAndExpression ) ( ( OR )=> OR (y= logicalAndExpression |y= quantifiedExpression ) -> ^( OPERATOR OR ^( ARGUMENT_LIST $logicalOrExpression $y) ) )* )
			// CivlCParser.g:592:4: ( logicalAndExpression -> logicalAndExpression ) ( ( OR )=> OR (y= logicalAndExpression |y= quantifiedExpression ) -> ^( OPERATOR OR ^( ARGUMENT_LIST $logicalOrExpression $y) ) )*
			{
			// CivlCParser.g:592:4: ( logicalAndExpression -> logicalAndExpression )
			// CivlCParser.g:592:6: logicalAndExpression
			{
			pushFollow(FOLLOW_logicalAndExpression_in_logicalOrExpression4437);
			logicalAndExpression160=logicalAndExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_logicalAndExpression.add(logicalAndExpression160.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();
			// 592:27: -> logicalAndExpression
			{
				adaptor.addChild(root_0, stream_logicalAndExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:593:9: ( ( OR )=> OR (y= logicalAndExpression |y= quantifiedExpression ) -> ^( OPERATOR OR ^( ARGUMENT_LIST $logicalOrExpression $y) ) )*
			loop35:
			while (true) {
				int alt35=2;
				int LA35_0 = input.LA(1);
				if ( (LA35_0==OR) ) {
					int LA35_2 = input.LA(2);
					if ( (synpred20_CivlCParser()) ) {
						alt35=1;
					}

				}

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

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

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

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

					}

					// AST REWRITE
					// elements: y, logicalOrExpression, OR
					// 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();
					// 594:13: -> ^( OPERATOR OR ^( ARGUMENT_LIST $logicalOrExpression $y) )
					{
						// CivlCParser.g:594: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:594: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 loop35;
				}
			}

			}

			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:600: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 IMPLIES162=null;
		ParserRuleReturnScope x =null;
		ParserRuleReturnScope y =null;

		Object IMPLIES162_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:601:2: ( (x= logicalOrExpression -> $x) ( ( IMPLIES )=> IMPLIES (y= logicalImpliesExpression |y= quantifiedExpression ) -> ^( OPERATOR IMPLIES ^( ARGUMENT_LIST $x $y) ) )? )
			// CivlCParser.g:601:4: (x= logicalOrExpression -> $x) ( ( IMPLIES )=> IMPLIES (y= logicalImpliesExpression |y= quantifiedExpression ) -> ^( OPERATOR IMPLIES ^( ARGUMENT_LIST $x $y) ) )?
			{
			// CivlCParser.g:601:4: (x= logicalOrExpression -> $x)
			// CivlCParser.g:601:6: x= logicalOrExpression
			{
			pushFollow(FOLLOW_logicalOrExpression_in_logicalImpliesExpression4530);
			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();
			// 601:28: -> $x
			{
				adaptor.addChild(root_0, stream_x.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:602:9: ( ( IMPLIES )=> IMPLIES (y= logicalImpliesExpression |y= quantifiedExpression ) -> ^( OPERATOR IMPLIES ^( ARGUMENT_LIST $x $y) ) )?
			int alt37=2;
			int LA37_0 = input.LA(1);
			if ( (LA37_0==IMPLIES) ) {
				int LA37_1 = input.LA(2);
				if ( (synpred21_CivlCParser()) ) {
					alt37=1;
				}
			}
			switch (alt37) {
				case 1 :
					// CivlCParser.g:602:11: ( IMPLIES )=> IMPLIES (y= logicalImpliesExpression |y= quantifiedExpression )
					{
					IMPLIES162=(Token)match(input,IMPLIES,FOLLOW_IMPLIES_in_logicalImpliesExpression4554); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IMPLIES.add(IMPLIES162);

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

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

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

					}

					// AST REWRITE
					// elements: y, x, IMPLIES
					// 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();
					// 603:13: -> ^( OPERATOR IMPLIES ^( ARGUMENT_LIST $x $y) )
					{
						// CivlCParser.g:603: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:603: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:609: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 QMARK164=null;
		Token COLON166=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope logicalImpliesExpression163 =null;
		ParserRuleReturnScope expression165 =null;

		Object QMARK164_tree=null;
		Object COLON166_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:610:2: ( logicalImpliesExpression ( ( QMARK )=> QMARK expression COLON (y= conditionalExpression |y= quantifiedExpression ) -> ^( OPERATOR QMARK ^( ARGUMENT_LIST logicalImpliesExpression expression $y) ) | -> logicalImpliesExpression ) )
			// CivlCParser.g:610:4: logicalImpliesExpression ( ( QMARK )=> QMARK expression COLON (y= conditionalExpression |y= quantifiedExpression ) -> ^( OPERATOR QMARK ^( ARGUMENT_LIST logicalImpliesExpression expression $y) ) | -> logicalImpliesExpression )
			{
			pushFollow(FOLLOW_logicalImpliesExpression_in_conditionalExpression4623);
			logicalImpliesExpression163=logicalImpliesExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_logicalImpliesExpression.add(logicalImpliesExpression163.getTree());
			// CivlCParser.g:611:9: ( ( QMARK )=> QMARK expression COLON (y= conditionalExpression |y= quantifiedExpression ) -> ^( OPERATOR QMARK ^( ARGUMENT_LIST logicalImpliesExpression expression $y) ) | -> logicalImpliesExpression )
			int alt39=2;
			int LA39_0 = input.LA(1);
			if ( (LA39_0==QMARK) ) {
				int LA39_1 = input.LA(2);
				if ( (synpred22_CivlCParser()) ) {
					alt39=1;
				}
				else if ( (true) ) {
					alt39=2;
				}

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

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

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

					pushFollow(FOLLOW_expression_in_conditionalExpression4642);
					expression165=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression165.getTree());
					COLON166=(Token)match(input,COLON,FOLLOW_COLON_in_conditionalExpression4644); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COLON.add(COLON166);

					// CivlCParser.g:612:13: (y= conditionalExpression |y= quantifiedExpression )
					int alt38=2;
					int LA38_0 = input.LA(1);
					if ( (LA38_0==AMPERSAND||LA38_0==CHARACTER_CONSTANT||LA38_0==ELLIPSIS||LA38_0==FLOATING_CONSTANT||LA38_0==IDENTIFIER||LA38_0==INTEGER_CONSTANT||LA38_0==LPAREN||LA38_0==MINUSMINUS||LA38_0==NOT||LA38_0==PLUS||LA38_0==PLUSPLUS||LA38_0==STAR||(LA38_0 >= STRING_LITERAL && LA38_0 <= SUB)||LA38_0==TILDE||LA38_0==ALIGNOF||LA38_0==BIG_O||LA38_0==CALLS||LA38_0==DERIV||LA38_0==GENERIC||LA38_0==HERE||LA38_0==PROCNULL||LA38_0==RESULT||(LA38_0 >= SCOPEOF && LA38_0 <= SELF)||(LA38_0 >= SIZEOF && LA38_0 <= SPAWN)||LA38_0==STATE_NULL||LA38_0==VALUE_AT||LA38_0==SUM) ) {
						alt38=1;
					}
					else if ( (LA38_0==EXISTS||LA38_0==FORALL||LA38_0==UNIFORM) ) {
						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:612:14: y= conditionalExpression
							{
							pushFollow(FOLLOW_conditionalExpression_in_conditionalExpression4661);
							y=conditionalExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_conditionalExpression.add(y.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:612:40: y= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_conditionalExpression4667);
							y=quantifiedExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_quantifiedExpression.add(y.getTree());
							}
							break;

					}

					// AST REWRITE
					// elements: QMARK, expression, logicalImpliesExpression, 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();
					// 613:13: -> ^( OPERATOR QMARK ^( ARGUMENT_LIST logicalImpliesExpression expression $y) )
					{
						// CivlCParser.g:613: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:614: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:618: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();
					// 618: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:623: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 LSQUARE167=null;
		Token COMMA169=null;
		Token RSQUARE171=null;
		ParserRuleReturnScope conditionalExpression168 =null;
		ParserRuleReturnScope conditionalExpression170 =null;

		Object LSQUARE167_tree=null;
		Object COMMA169_tree=null;
		Object RSQUARE171_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:624:5: ( LSQUARE conditionalExpression COMMA conditionalExpression RSQUARE -> ^( INTERVAL conditionalExpression conditionalExpression ) )
			// CivlCParser.g:624:7: LSQUARE conditionalExpression COMMA conditionalExpression RSQUARE
			{
			LSQUARE167=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_interval4812); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE167);

			pushFollow(FOLLOW_conditionalExpression_in_interval4814);
			conditionalExpression168=conditionalExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_conditionalExpression.add(conditionalExpression168.getTree());
			COMMA169=(Token)match(input,COMMA,FOLLOW_COMMA_in_interval4816); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_COMMA.add(COMMA169);

			pushFollow(FOLLOW_conditionalExpression_in_interval4818);
			conditionalExpression170=conditionalExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_conditionalExpression.add(conditionalExpression170.getTree());
			RSQUARE171=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_interval4820); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE171);

			// 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();
			// 625:9: -> ^( INTERVAL conditionalExpression conditionalExpression )
			{
				// CivlCParser.g:625: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:629: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:630:5: (i+= interval (i+= interval )* -> ^( INTERVAL_SEQ ( $i)+ ) | -> ABSENT )
			int alt41=2;
			int LA41_0 = input.LA(1);
			if ( (LA41_0==LSQUARE) ) {
				alt41=1;
			}
			else if ( (LA41_0==LPAREN||LA41_0==RPAREN) ) {
				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:630:7: i+= interval (i+= interval )*
					{
					pushFollow(FOLLOW_interval_in_intervalSeq4860);
					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:630:21: (i+= interval )*
					loop40:
					while (true) {
						int alt40=2;
						int LA40_0 = input.LA(1);
						if ( (LA40_0==LSQUARE) ) {
							alt40=1;
						}

						switch (alt40) {
						case 1 :
							// CivlCParser.g:630:21: i+= interval
							{
							pushFollow(FOLLOW_interval_in_intervalSeq4865);
							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 loop40;
						}
					}

					// 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();
					// 630:34: -> ^( INTERVAL_SEQ ( $i)+ )
					{
						// CivlCParser.g:630: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:631: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();
					// 631: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:638: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 LPAREN172=null;
		Token RPAREN174=null;
		Token LAMBDA175=null;
		Token LPAREN176=null;
		Token BITOR178=null;
		Token RPAREN179=null;
		Token LPAREN180=null;
		Token RPAREN182=null;
		Token LAMBDA183=null;
		Token LPAREN184=null;
		Token RPAREN186=null;
		ParserRuleReturnScope restrict =null;
		ParserRuleReturnScope cond1 =null;
		ParserRuleReturnScope cond2 =null;
		ParserRuleReturnScope typeName173 =null;
		ParserRuleReturnScope boundVariableDeclarationList177 =null;
		ParserRuleReturnScope typeName181 =null;
		ParserRuleReturnScope boundVariableDeclarationList185 =null;

		Object LPAREN172_tree=null;
		Object RPAREN174_tree=null;
		Object LAMBDA175_tree=null;
		Object LPAREN176_tree=null;
		Object BITOR178_tree=null;
		Object RPAREN179_tree=null;
		Object LPAREN180_tree=null;
		Object RPAREN182_tree=null;
		Object LAMBDA183_tree=null;
		Object LPAREN184_tree=null;
		Object RPAREN186_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:639: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 alt45=2;
			int LA45_0 = input.LA(1);
			if ( (LA45_0==LPAREN) ) {
				int LA45_1 = input.LA(2);
				if ( (synpred23_CivlCParser()) ) {
					alt45=1;
				}
				else if ( (true) ) {
					alt45=2;
				}

			}

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

			switch (alt45) {
				case 1 :
					// CivlCParser.g:639: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:639: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:639:5: ( LPAREN typeName RPAREN LAMBDA LPAREN boundVariableDeclarationList BITOR )=> LPAREN typeName RPAREN LAMBDA LPAREN boundVariableDeclarationList BITOR (restrict= conditionalExpression |restrict= quantifiedExpression ) RPAREN (cond1= assignmentExpression |cond1= quantifiedExpression )
					{
					LPAREN172=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_arrayLambdaExpression4949); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN172);

					pushFollow(FOLLOW_typeName_in_arrayLambdaExpression4951);
					typeName173=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName.add(typeName173.getTree());
					RPAREN174=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_arrayLambdaExpression4953); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN174);

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

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

					pushFollow(FOLLOW_boundVariableDeclarationList_in_arrayLambdaExpression4971);
					boundVariableDeclarationList177=boundVariableDeclarationList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_boundVariableDeclarationList.add(boundVariableDeclarationList177.getTree());
					BITOR178=(Token)match(input,BITOR,FOLLOW_BITOR_in_arrayLambdaExpression4973); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_BITOR.add(BITOR178);

					// CivlCParser.g:643:13: (restrict= conditionalExpression |restrict= 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||LA42_0==SUM) ) {
						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:643:14: restrict= conditionalExpression
							{
							pushFollow(FOLLOW_conditionalExpression_in_arrayLambdaExpression4990);
							restrict=conditionalExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_conditionalExpression.add(restrict.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:643:47: restrict= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_arrayLambdaExpression4996);
							restrict=quantifiedExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_quantifiedExpression.add(restrict.getTree());
							}
							break;

					}

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

					// CivlCParser.g:645:13: (cond1= assignmentExpression |cond1= 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||LA43_0==SUM) ) {
						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:645:14: cond1= assignmentExpression
							{
							pushFollow(FOLLOW_assignmentExpression_in_arrayLambdaExpression5028);
							cond1=assignmentExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_assignmentExpression.add(cond1.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:645:43: cond1= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_arrayLambdaExpression5034);
							cond1=quantifiedExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_quantifiedExpression.add(cond1.getTree());
							}
							break;

					}

					}

					// AST REWRITE
					// elements: LAMBDA, typeName, cond1, 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();
					// 646:9: -> ^( LAMBDA typeName boundVariableDeclarationList $cond1 $restrict)
					{
						// CivlCParser.g:646: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:647:7: LPAREN typeName RPAREN LAMBDA LPAREN boundVariableDeclarationList RPAREN (cond2= assignmentExpression |cond2= quantifiedExpression )
					{
					LPAREN180=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_arrayLambdaExpression5068); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN180);

					pushFollow(FOLLOW_typeName_in_arrayLambdaExpression5070);
					typeName181=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName.add(typeName181.getTree());
					RPAREN182=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_arrayLambdaExpression5072); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN182);

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

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

					pushFollow(FOLLOW_boundVariableDeclarationList_in_arrayLambdaExpression5086);
					boundVariableDeclarationList185=boundVariableDeclarationList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_boundVariableDeclarationList.add(boundVariableDeclarationList185.getTree());
					RPAREN186=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_arrayLambdaExpression5088); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN186);

					// CivlCParser.g:649:9: (cond2= assignmentExpression |cond2= quantifiedExpression )
					int alt44=2;
					int LA44_0 = input.LA(1);
					if ( (LA44_0==AMPERSAND||LA44_0==CHARACTER_CONSTANT||LA44_0==ELLIPSIS||LA44_0==FLOATING_CONSTANT||LA44_0==IDENTIFIER||LA44_0==INTEGER_CONSTANT||LA44_0==LPAREN||LA44_0==MINUSMINUS||LA44_0==NOT||LA44_0==PLUS||LA44_0==PLUSPLUS||LA44_0==STAR||(LA44_0 >= STRING_LITERAL && LA44_0 <= SUB)||LA44_0==TILDE||LA44_0==ALIGNOF||LA44_0==BIG_O||LA44_0==CALLS||LA44_0==DERIV||LA44_0==GENERIC||LA44_0==HERE||LA44_0==PROCNULL||LA44_0==RESULT||(LA44_0 >= SCOPEOF && LA44_0 <= SELF)||(LA44_0 >= SIZEOF && LA44_0 <= SPAWN)||LA44_0==STATE_NULL||LA44_0==VALUE_AT||LA44_0==SUM) ) {
						alt44=1;
					}
					else if ( (LA44_0==EXISTS||LA44_0==FORALL||LA44_0==UNIFORM) ) {
						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:649:10: cond2= assignmentExpression
							{
							pushFollow(FOLLOW_assignmentExpression_in_arrayLambdaExpression5101);
							cond2=assignmentExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_assignmentExpression.add(cond2.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:649:39: cond2= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_arrayLambdaExpression5107);
							cond2=quantifiedExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_quantifiedExpression.add(cond2.getTree());
							}
							break;

					}

					// AST REWRITE
					// elements: LAMBDA, typeName, boundVariableDeclarationList, 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();
					// 650:9: -> ^( LAMBDA typeName boundVariableDeclarationList $cond2)
					{
						// CivlCParser.g:650: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:653: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 IDENTIFIER188=null;
		Token COMMA189=null;
		Token IDENTIFIER190=null;
		Token COLON191=null;
		ParserRuleReturnScope typeName187 =null;
		ParserRuleReturnScope rangeExpression192 =null;

		Object IDENTIFIER188_tree=null;
		Object COMMA189_tree=null;
		Object IDENTIFIER190_tree=null;
		Object COLON191_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:654:2: ( typeName IDENTIFIER ( COMMA IDENTIFIER )* ( COLON rangeExpression )? -> ^( BOUND_VARIABLE_DECLARATION typeName ^( BOUND_VARIABLE_NAME_LIST ( IDENTIFIER )+ ) ( rangeExpression )? ) )
			// CivlCParser.g:654:4: typeName IDENTIFIER ( COMMA IDENTIFIER )* ( COLON rangeExpression )?
			{
			pushFollow(FOLLOW_typeName_in_boundVariableDeclarationSubList5140);
			typeName187=typeName();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_typeName.add(typeName187.getTree());
			IDENTIFIER188=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_boundVariableDeclarationSubList5142); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER188);

			// CivlCParser.g:654:24: ( COMMA IDENTIFIER )*
			loop46:
			while (true) {
				int alt46=2;
				int LA46_0 = input.LA(1);
				if ( (LA46_0==COMMA) ) {
					alt46=1;
				}

				switch (alt46) {
				case 1 :
					// CivlCParser.g:654:25: COMMA IDENTIFIER
					{
					COMMA189=(Token)match(input,COMMA,FOLLOW_COMMA_in_boundVariableDeclarationSubList5145); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA189);

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

					}
					break;

				default :
					break loop46;
				}
			}

			// CivlCParser.g:654:44: ( COLON rangeExpression )?
			int alt47=2;
			int LA47_0 = input.LA(1);
			if ( (LA47_0==COLON) ) {
				alt47=1;
			}
			switch (alt47) {
				case 1 :
					// CivlCParser.g:654:45: COLON rangeExpression
					{
					COLON191=(Token)match(input,COLON,FOLLOW_COLON_in_boundVariableDeclarationSubList5152); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COLON.add(COLON191);

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

			}

			// AST REWRITE
			// elements: rangeExpression, IDENTIFIER, 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();
			// 655:9: -> ^( BOUND_VARIABLE_DECLARATION typeName ^( BOUND_VARIABLE_NAME_LIST ( IDENTIFIER )+ ) ( rangeExpression )? )
			{
				// CivlCParser.g:655: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:656: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:656: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:659: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 SEMI194=null;
		ParserRuleReturnScope boundVariableDeclarationSubList193 =null;
		ParserRuleReturnScope boundVariableDeclarationSubList195 =null;

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

		try {
			// CivlCParser.g:660:2: ( boundVariableDeclarationSubList ( SEMI boundVariableDeclarationSubList )* -> ^( BOUND_VARIABLE_DECLARATION_LIST ( boundVariableDeclarationSubList )+ ) )
			// CivlCParser.g:660:4: boundVariableDeclarationSubList ( SEMI boundVariableDeclarationSubList )*
			{
			pushFollow(FOLLOW_boundVariableDeclarationSubList_in_boundVariableDeclarationList5205);
			boundVariableDeclarationSubList193=boundVariableDeclarationSubList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_boundVariableDeclarationSubList.add(boundVariableDeclarationSubList193.getTree());
			// CivlCParser.g:660:36: ( SEMI boundVariableDeclarationSubList )*
			loop48:
			while (true) {
				int alt48=2;
				int LA48_0 = input.LA(1);
				if ( (LA48_0==SEMI) ) {
					alt48=1;
				}

				switch (alt48) {
				case 1 :
					// CivlCParser.g:660:37: SEMI boundVariableDeclarationSubList
					{
					SEMI194=(Token)match(input,SEMI,FOLLOW_SEMI_in_boundVariableDeclarationList5208); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SEMI.add(SEMI194);

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

				default :
					break loop48;
				}
			}

			// 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();
			// 661:9: -> ^( BOUND_VARIABLE_DECLARATION_LIST ( boundVariableDeclarationSubList )+ )
			{
				// CivlCParser.g:661: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:674: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 arrayLambdaExpression196 =null;
		ParserRuleReturnScope conditionalExpression197 =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:675:2: ( ( arrayLambdaExpression )=> arrayLambdaExpression | ( unaryExpression assignmentOperator )=>lhs= unaryExpression op= assignmentOperator (rhs= assignmentExpression |rhs= quantifiedExpression ) -> ^( OPERATOR $op ^( ARGUMENT_LIST $lhs $rhs) ) | conditionalExpression )
			int alt50=3;
			switch ( input.LA(1) ) {
			case LPAREN:
				{
				int LA50_1 = input.LA(2);
				if ( (synpred24_CivlCParser()) ) {
					alt50=1;
				}
				else if ( (synpred25_CivlCParser()) ) {
					alt50=2;
				}
				else if ( (true) ) {
					alt50=3;
				}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

				}
				break;
			case SUM:
				{
				int LA50_24 = input.LA(2);
				if ( (synpred25_CivlCParser()) ) {
					alt50=2;
				}
				else if ( (true) ) {
					alt50=3;
				}

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


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

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

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

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

					}

					// AST REWRITE
					// elements: op, lhs, rhs
					// 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();
					// 680:9: -> ^( OPERATOR $op ^( ARGUMENT_LIST $lhs $rhs) )
					{
						// CivlCParser.g:680: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:680: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:681:4: conditionalExpression
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_conditionalExpression_in_assignmentExpression5335);
					conditionalExpression197=conditionalExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, conditionalExpression197.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:685: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 set198=null;

		Object set198_tree=null;

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


			set198=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(set198));
				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:698: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 COMMA200=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope assignmentExpression199 =null;

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

		try {
			// CivlCParser.g:699:2: ( ( assignmentExpression -> assignmentExpression ) ( ( COMMA )=> COMMA y= assignmentExpression -> ^( OPERATOR COMMA ^( ARGUMENT_LIST $commaExpression $y) ) )* )
			// CivlCParser.g:699:4: ( assignmentExpression -> assignmentExpression ) ( ( COMMA )=> COMMA y= assignmentExpression -> ^( OPERATOR COMMA ^( ARGUMENT_LIST $commaExpression $y) ) )*
			{
			// CivlCParser.g:699:4: ( assignmentExpression -> assignmentExpression )
			// CivlCParser.g:699:6: assignmentExpression
			{
			pushFollow(FOLLOW_assignmentExpression_in_commaExpression5404);
			assignmentExpression199=assignmentExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression199.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();
			// 699:27: -> assignmentExpression
			{
				adaptor.addChild(root_0, stream_assignmentExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:700:4: ( ( COMMA )=> COMMA y= assignmentExpression -> ^( OPERATOR COMMA ^( ARGUMENT_LIST $commaExpression $y) ) )*
			loop51:
			while (true) {
				int alt51=2;
				int LA51_0 = input.LA(1);
				if ( (LA51_0==COMMA) ) {
					int LA51_2 = input.LA(2);
					if ( (synpred26_CivlCParser()) ) {
						alt51=1;
					}

				}

				switch (alt51) {
				case 1 :
					// CivlCParser.g:700:6: ( COMMA )=> COMMA y= assignmentExpression
					{
					COMMA200=(Token)match(input,COMMA,FOLLOW_COMMA_in_commaExpression5422); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA200);

					pushFollow(FOLLOW_assignmentExpression_in_commaExpression5426);
					y=assignmentExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_assignmentExpression.add(y.getTree());
					// AST REWRITE
					// elements: commaExpression, y, COMMA
					// 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();
					// 701:6: -> ^( OPERATOR COMMA ^( ARGUMENT_LIST $commaExpression $y) )
					{
						// CivlCParser.g:701: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:701: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 loop51;
				}
			}

			}

			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:706: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 quantifiedExpression201 =null;
		ParserRuleReturnScope commaExpression202 =null;


		try {
			// CivlCParser.g:707:5: ( quantifiedExpression | commaExpression )
			int alt52=2;
			int LA52_0 = input.LA(1);
			if ( (LA52_0==EXISTS||LA52_0==FORALL||LA52_0==UNIFORM) ) {
				alt52=1;
			}
			else if ( (LA52_0==AMPERSAND||LA52_0==CHARACTER_CONSTANT||LA52_0==ELLIPSIS||LA52_0==FLOATING_CONSTANT||LA52_0==IDENTIFIER||LA52_0==INTEGER_CONSTANT||LA52_0==LPAREN||LA52_0==MINUSMINUS||LA52_0==NOT||LA52_0==PLUS||LA52_0==PLUSPLUS||LA52_0==STAR||(LA52_0 >= STRING_LITERAL && LA52_0 <= SUB)||LA52_0==TILDE||LA52_0==ALIGNOF||LA52_0==BIG_O||LA52_0==CALLS||LA52_0==DERIV||LA52_0==GENERIC||LA52_0==HERE||LA52_0==PROCNULL||LA52_0==RESULT||(LA52_0 >= SCOPEOF && LA52_0 <= SELF)||(LA52_0 >= SIZEOF && LA52_0 <= SPAWN)||LA52_0==STATE_NULL||LA52_0==VALUE_AT||LA52_0==SUM) ) {
				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:707:7: quantifiedExpression
					{
					root_0 = (Object)adaptor.nil();


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

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


					pushFollow(FOLLOW_commaExpression_in_expression5475);
					commaExpression202=commaExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, commaExpression202.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:715: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 conditionalExpression203 =null;


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


			pushFollow(FOLLOW_conditionalExpression_in_constantExpression5488);
			conditionalExpression203=conditionalExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) adaptor.addChild(root_0, conditionalExpression203.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:742: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 SEMI205=null;
		Token SEMI206=null;
		ParserRuleReturnScope d =null;
		ParserRuleReturnScope i =null;
		ParserRuleReturnScope contract204 =null;
		ParserRuleReturnScope staticAssertDeclaration207 =null;

		Object SEMI205_tree=null;
		Object SEMI206_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().hasTypeSpec = false;

		try {
			// CivlCParser.g:748:2: (d= declarationSpecifiers (i= initDeclaratorList contract SEMI -> ^( DECLARATION $d $i contract ) | SEMI -> ^( DECLARATION $d ABSENT ABSENT ) ) | staticAssertDeclaration )
			int alt54=2;
			int LA54_0 = input.LA(1);
			if ( (LA54_0==IDENTIFIER||(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;
			}
			else if ( (LA54_0==STATICASSERT) ) {
				alt54=2;
			}

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

			switch (alt54) {
				case 1 :
					// CivlCParser.g:748:4: d= declarationSpecifiers (i= initDeclaratorList contract SEMI -> ^( DECLARATION $d $i contract ) | SEMI -> ^( DECLARATION $d ABSENT ABSENT ) )
					{
					pushFollow(FOLLOW_declarationSpecifiers_in_declaration5517);
					d=declarationSpecifiers();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declarationSpecifiers.add(d.getTree());
					// CivlCParser.g:749:4: (i= initDeclaratorList contract SEMI -> ^( DECLARATION $d $i contract ) | SEMI -> ^( DECLARATION $d ABSENT ABSENT ) )
					int alt53=2;
					int LA53_0 = input.LA(1);
					if ( (LA53_0==IDENTIFIER||LA53_0==LPAREN||LA53_0==STAR) ) {
						alt53=1;
					}
					else if ( (LA53_0==SEMI) ) {
						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:750:6: i= initDeclaratorList contract SEMI
							{
							pushFollow(FOLLOW_initDeclaratorList_in_declaration5531);
							i=initDeclaratorList();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_initDeclaratorList.add(i.getTree());
							pushFollow(FOLLOW_contract_in_declaration5533);
							contract204=contract();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_contract.add(contract204.getTree());
							SEMI205=(Token)match(input,SEMI,FOLLOW_SEMI_in_declaration5535); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_SEMI.add(SEMI205);

							// AST REWRITE
							// elements: i, d, contract
							// 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();
							// 751:6: -> ^( DECLARATION $d $i contract )
							{
								// CivlCParser.g:751: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:752:6: SEMI
							{
							SEMI206=(Token)match(input,SEMI,FOLLOW_SEMI_in_declaration5561); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_SEMI.add(SEMI206);

							// 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();
							// 753:6: -> ^( DECLARATION $d ABSENT ABSENT )
							{
								// CivlCParser.g:753: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:755:4: staticAssertDeclaration
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_staticAssertDeclaration_in_declaration5589);
					staticAssertDeclaration207=staticAssertDeclaration();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, staticAssertDeclaration207.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:765:1: declarationSpecifiers : 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 declarationSpecifierList208 =null;

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

		try {
			// CivlCParser.g:766:2: ( declarationSpecifierList -> ^( DECLARATION_SPECIFIERS declarationSpecifierList ) )
			// CivlCParser.g:766:4: declarationSpecifierList
			{
			pushFollow(FOLLOW_declarationSpecifierList_in_declarationSpecifiers5603);
			declarationSpecifierList208=declarationSpecifierList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_declarationSpecifierList.add(declarationSpecifierList208.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();
			// 767:4: -> ^( DECLARATION_SPECIFIERS declarationSpecifierList )
			{
				// CivlCParser.g:767: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:772:1: declarationSpecifierList : declarationSpecifier ({...}? 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 declarationSpecifier209 =null;
		ParserRuleReturnScope declarationSpecifier210 =null;


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


			pushFollow(FOLLOW_declarationSpecifier_in_declarationSpecifierList5628);
			declarationSpecifier209=declarationSpecifier();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) adaptor.addChild(root_0, declarationSpecifier209.getTree());

			// CivlCParser.g:774:7: ({...}? declarationSpecifier )*
			loop55:
			while (true) {
				int alt55=2;
				int LA55_0 = input.LA(1);
				if ( (LA55_0==IDENTIFIER) ) {
					int LA55_1 = input.LA(2);
					if ( (((isTypeName(input.LT(1).getText()))&&( !indicatesDeclarator() ))) ) {
						alt55=1;
					}

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

				switch (alt55) {
				case 1 :
					// CivlCParser.g:774:9: {...}? declarationSpecifier
					{
					if ( !(( !indicatesDeclarator() )) ) {
						if (state.backtracking>0) {state.failed=true; return retval;}
						throw new FailedPredicateException(input, "declarationSpecifierList", " !indicatesDeclarator() ");
					}
					pushFollow(FOLLOW_declarationSpecifier_in_declarationSpecifierList5640);
					declarationSpecifier210=declarationSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, declarationSpecifier210.getTree());

					}
					break;

				default :
					break loop55;
				}
			}

			}

			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:777:1: declarationSpecifier : ( 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 storageClassSpecifier211 =null;
		ParserRuleReturnScope typeSpecifierOrQualifier212 =null;
		ParserRuleReturnScope functionSpecifier213 =null;
		ParserRuleReturnScope alignmentSpecifier214 =null;


		try {
			// CivlCParser.g:778:2: ( storageClassSpecifier | typeSpecifierOrQualifier | functionSpecifier | alignmentSpecifier )
			int alt56=4;
			switch ( input.LA(1) ) {
			case AUTO:
			case EXTERN:
			case REGISTER:
			case SHARED:
			case STATIC:
			case THREADLOCAL:
			case TYPEDEF:
				{
				alt56=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:
				{
				alt56=2;
				}
				break;
			case ABSTRACT:
			case DEVICE:
			case DIFFERENTIABLE:
			case FATOMIC:
			case GLOBAL:
			case INLINE:
			case NORETURN:
			case PURE:
			case STATE_F:
			case SYSTEM:
				{
				alt56=3;
				}
				break;
			case ALIGNAS:
				{
				alt56=4;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 56, 0, input);
				throw nvae;
			}
			switch (alt56) {
				case 1 :
					// CivlCParser.g:778:4: storageClassSpecifier
					{
					root_0 = (Object)adaptor.nil();


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

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


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

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


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

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


					pushFollow(FOLLOW_alignmentSpecifier_in_declarationSpecifier5669);
					alignmentSpecifier214=alignmentSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, alignmentSpecifier214.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:792: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 typeSpecifier215 =null;
		ParserRuleReturnScope typeQualifier216 =null;


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

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

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

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


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

					if ( state.backtracking==0 ) {DeclarationScope_stack.peek().hasTypeSpec = true;}
					}
					break;
				case 2 :
					// CivlCParser.g:794:7: typeQualifier
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_typeQualifier_in_typeSpecifierOrQualifier5697);
					typeQualifier216=typeQualifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, typeQualifier216.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:801: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 COMMA217=null;
		List<Object> list_i=null;
		RuleReturnScope i = null;
		Object COMMA217_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_initDeclarator=new RewriteRuleSubtreeStream(adaptor,"rule initDeclarator");

		try {
			// CivlCParser.g:802:2: (i+= initDeclarator ( COMMA i+= initDeclarator )* -> ^( INIT_DECLARATOR_LIST ( $i)+ ) )
			// CivlCParser.g:802:4: i+= initDeclarator ( COMMA i+= initDeclarator )*
			{
			pushFollow(FOLLOW_initDeclarator_in_initDeclaratorList5712);
			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:802:22: ( COMMA i+= initDeclarator )*
			loop58:
			while (true) {
				int alt58=2;
				int LA58_0 = input.LA(1);
				if ( (LA58_0==COMMA) ) {
					alt58=1;
				}

				switch (alt58) {
				case 1 :
					// CivlCParser.g:802:23: COMMA i+= initDeclarator
					{
					COMMA217=(Token)match(input,COMMA,FOLLOW_COMMA_in_initDeclaratorList5715); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA217);

					pushFollow(FOLLOW_initDeclarator_in_initDeclaratorList5719);
					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 loop58;
				}
			}

			// 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();
			// 803:4: -> ^( INIT_DECLARATOR_LIST ( $i)+ )
			{
				// CivlCParser.g:803: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:811: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 ASSIGN218=null;
		ParserRuleReturnScope d =null;
		ParserRuleReturnScope i =null;

		Object ASSIGN218_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:812:2: (d= declarator ( -> ^( INIT_DECLARATOR $d ABSENT ) | ( ASSIGN i= initializer ) -> ^( INIT_DECLARATOR $d $i) ) )
			// CivlCParser.g:812:4: d= declarator ( -> ^( INIT_DECLARATOR $d ABSENT ) | ( ASSIGN i= initializer ) -> ^( INIT_DECLARATOR $d $i) )
			{
			pushFollow(FOLLOW_declarator_in_initDeclarator5749);
			d=declarator();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_declarator.add(d.getTree());
			// CivlCParser.g:813:4: ( -> ^( INIT_DECLARATOR $d ABSENT ) | ( ASSIGN i= initializer ) -> ^( INIT_DECLARATOR $d $i) )
			int alt59=2;
			int LA59_0 = input.LA(1);
			if ( (LA59_0==COMMA||LA59_0==IDENTIFIER||LA59_0==LCURLY||LA59_0==SEMI||(LA59_0 >= ABSTRACT && LA59_0 <= ALIGNAS)||(LA59_0 >= ASSIGNS && LA59_0 <= AUTO)||LA59_0==BOOL||LA59_0==CHAR||(LA59_0 >= COMPLEX && LA59_0 <= CONST)||LA59_0==DEPENDS||(LA59_0 >= DEVICE && LA59_0 <= DIFFERENTIABLE)||(LA59_0 >= DOMAIN && LA59_0 <= ENUM)||(LA59_0 >= EXTERN && LA59_0 <= FATOMIC)||LA59_0==FLOAT||LA59_0==GLOBAL||LA59_0==GUARD||(LA59_0 >= INLINE && LA59_0 <= INT)||(LA59_0 >= LONG && LA59_0 <= NORETURN)||LA59_0==OUTPUT||(LA59_0 >= PURE && LA59_0 <= RESTRICT)||(LA59_0 >= SHARED && LA59_0 <= SIGNED)||LA59_0==STATE_F||(LA59_0 >= STATIC && LA59_0 <= STRUCT)||LA59_0==SYSTEM||(LA59_0 >= THREADLOCAL && LA59_0 <= TYPEOF)||(LA59_0 >= UNION && LA59_0 <= UNSIGNED)||(LA59_0 >= VOID && LA59_0 <= VOLATILE)) ) {
				alt59=1;
			}
			else if ( (LA59_0==ASSIGN) ) {
				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:813: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();
					// 813:7: -> ^( INIT_DECLARATOR $d ABSENT )
					{
						// CivlCParser.g:813: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:814:6: ( ASSIGN i= initializer )
					{
					// CivlCParser.g:814:6: ( ASSIGN i= initializer )
					// CivlCParser.g:814:7: ASSIGN i= initializer
					{
					ASSIGN218=(Token)match(input,ASSIGN,FOLLOW_ASSIGN_in_initDeclarator5774); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ASSIGN.add(ASSIGN218);

					pushFollow(FOLLOW_initializer_in_initDeclarator5778);
					i=initializer();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_initializer.add(i.getTree());
					}

					// AST REWRITE
					// elements: i, d
					// 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();
					// 814:29: -> ^( INIT_DECLARATOR $d $i)
					{
						// CivlCParser.g:814: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:819: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 TYPEDEF219=null;
		Token set220=null;

		Object TYPEDEF219_tree=null;
		Object set220_tree=null;

		try {
			// CivlCParser.g:820:2: ( TYPEDEF | ( EXTERN | STATIC | THREADLOCAL | AUTO | REGISTER | SHARED ) )
			int alt60=2;
			int LA60_0 = input.LA(1);
			if ( (LA60_0==TYPEDEF) ) {
				alt60=1;
			}
			else if ( (LA60_0==AUTO||LA60_0==EXTERN||LA60_0==REGISTER||LA60_0==SHARED||LA60_0==STATIC||LA60_0==THREADLOCAL) ) {
				alt60=2;
			}

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

			switch (alt60) {
				case 1 :
					// CivlCParser.g:820:4: TYPEDEF
					{
					root_0 = (Object)adaptor.nil();


					TYPEDEF219=(Token)match(input,TYPEDEF,FOLLOW_TYPEDEF_in_storageClassSpecifier5809); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					TYPEDEF219_tree = (Object)adaptor.create(TYPEDEF219);
					adaptor.addChild(root_0, TYPEDEF219_tree);
					}

					if ( state.backtracking==0 ) {DeclarationScope_stack.peek().isTypedef = true;}
					}
					break;
				case 2 :
					// CivlCParser.g:821:4: ( EXTERN | STATIC | THREADLOCAL | AUTO | REGISTER | SHARED )
					{
					root_0 = (Object)adaptor.nil();


					set220=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(set220));
						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:825: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 VOID221=null;
		Token CHAR222=null;
		Token SHORT223=null;
		Token INT224=null;
		Token LONG225=null;
		Token FLOAT226=null;
		Token DOUBLE227=null;
		Token SIGNED228=null;
		Token UNSIGNED229=null;
		Token BOOL230=null;
		Token COMPLEX231=null;
		Token REAL232=null;
		Token RANGE233=null;
		ParserRuleReturnScope atomicTypeSpecifier234 =null;
		ParserRuleReturnScope structOrUnionSpecifier235 =null;
		ParserRuleReturnScope enumSpecifier236 =null;
		ParserRuleReturnScope typedefName237 =null;
		ParserRuleReturnScope domainSpecifier238 =null;
		ParserRuleReturnScope typeofSpecifier239 =null;
		ParserRuleReturnScope memSpecifier240 =null;

		Object VOID221_tree=null;
		Object CHAR222_tree=null;
		Object SHORT223_tree=null;
		Object INT224_tree=null;
		Object LONG225_tree=null;
		Object FLOAT226_tree=null;
		Object DOUBLE227_tree=null;
		Object SIGNED228_tree=null;
		Object UNSIGNED229_tree=null;
		Object BOOL230_tree=null;
		Object COMPLEX231_tree=null;
		Object REAL232_tree=null;
		Object RANGE233_tree=null;

		try {
			// CivlCParser.g:826:2: ( VOID | CHAR | SHORT | INT | LONG | FLOAT | DOUBLE | SIGNED | UNSIGNED | BOOL | COMPLEX | REAL | RANGE | atomicTypeSpecifier | structOrUnionSpecifier | enumSpecifier | typedefName | domainSpecifier | typeofSpecifier | memSpecifier )
			int alt61=20;
			switch ( input.LA(1) ) {
			case VOID:
				{
				alt61=1;
				}
				break;
			case CHAR:
				{
				alt61=2;
				}
				break;
			case SHORT:
				{
				alt61=3;
				}
				break;
			case INT:
				{
				alt61=4;
				}
				break;
			case LONG:
				{
				alt61=5;
				}
				break;
			case FLOAT:
				{
				alt61=6;
				}
				break;
			case DOUBLE:
				{
				alt61=7;
				}
				break;
			case SIGNED:
				{
				alt61=8;
				}
				break;
			case UNSIGNED:
				{
				alt61=9;
				}
				break;
			case BOOL:
				{
				alt61=10;
				}
				break;
			case COMPLEX:
				{
				alt61=11;
				}
				break;
			case REAL:
				{
				alt61=12;
				}
				break;
			case RANGE:
				{
				alt61=13;
				}
				break;
			case ATOMIC:
				{
				alt61=14;
				}
				break;
			case STRUCT:
			case UNION:
				{
				alt61=15;
				}
				break;
			case ENUM:
				{
				alt61=16;
				}
				break;
			case IDENTIFIER:
				{
				alt61=17;
				}
				break;
			case DOMAIN:
				{
				alt61=18;
				}
				break;
			case TYPEOF:
				{
				alt61=19;
				}
				break;
			case MEM_TYPE:
				{
				alt61=20;
				}
				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:826:4: VOID
					{
					root_0 = (Object)adaptor.nil();


					VOID221=(Token)match(input,VOID,FOLLOW_VOID_in_typeSpecifier5851); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					VOID221_tree = (Object)adaptor.create(VOID221);
					adaptor.addChild(root_0, VOID221_tree);
					}

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


					CHAR222=(Token)match(input,CHAR,FOLLOW_CHAR_in_typeSpecifier5855); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					CHAR222_tree = (Object)adaptor.create(CHAR222);
					adaptor.addChild(root_0, CHAR222_tree);
					}

					}
					break;
				case 3 :
					// CivlCParser.g:826:18: SHORT
					{
					root_0 = (Object)adaptor.nil();


					SHORT223=(Token)match(input,SHORT,FOLLOW_SHORT_in_typeSpecifier5859); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					SHORT223_tree = (Object)adaptor.create(SHORT223);
					adaptor.addChild(root_0, SHORT223_tree);
					}

					}
					break;
				case 4 :
					// CivlCParser.g:826:26: INT
					{
					root_0 = (Object)adaptor.nil();


					INT224=(Token)match(input,INT,FOLLOW_INT_in_typeSpecifier5863); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					INT224_tree = (Object)adaptor.create(INT224);
					adaptor.addChild(root_0, INT224_tree);
					}

					}
					break;
				case 5 :
					// CivlCParser.g:826:32: LONG
					{
					root_0 = (Object)adaptor.nil();


					LONG225=(Token)match(input,LONG,FOLLOW_LONG_in_typeSpecifier5867); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					LONG225_tree = (Object)adaptor.create(LONG225);
					adaptor.addChild(root_0, LONG225_tree);
					}

					}
					break;
				case 6 :
					// CivlCParser.g:826:39: FLOAT
					{
					root_0 = (Object)adaptor.nil();


					FLOAT226=(Token)match(input,FLOAT,FOLLOW_FLOAT_in_typeSpecifier5871); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					FLOAT226_tree = (Object)adaptor.create(FLOAT226);
					adaptor.addChild(root_0, FLOAT226_tree);
					}

					}
					break;
				case 7 :
					// CivlCParser.g:826:47: DOUBLE
					{
					root_0 = (Object)adaptor.nil();


					DOUBLE227=(Token)match(input,DOUBLE,FOLLOW_DOUBLE_in_typeSpecifier5875); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					DOUBLE227_tree = (Object)adaptor.create(DOUBLE227);
					adaptor.addChild(root_0, DOUBLE227_tree);
					}

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


					SIGNED228=(Token)match(input,SIGNED,FOLLOW_SIGNED_in_typeSpecifier5880); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					SIGNED228_tree = (Object)adaptor.create(SIGNED228);
					adaptor.addChild(root_0, SIGNED228_tree);
					}

					}
					break;
				case 9 :
					// CivlCParser.g:827:13: UNSIGNED
					{
					root_0 = (Object)adaptor.nil();


					UNSIGNED229=(Token)match(input,UNSIGNED,FOLLOW_UNSIGNED_in_typeSpecifier5884); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					UNSIGNED229_tree = (Object)adaptor.create(UNSIGNED229);
					adaptor.addChild(root_0, UNSIGNED229_tree);
					}

					}
					break;
				case 10 :
					// CivlCParser.g:827:24: BOOL
					{
					root_0 = (Object)adaptor.nil();


					BOOL230=(Token)match(input,BOOL,FOLLOW_BOOL_in_typeSpecifier5888); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					BOOL230_tree = (Object)adaptor.create(BOOL230);
					adaptor.addChild(root_0, BOOL230_tree);
					}

					}
					break;
				case 11 :
					// CivlCParser.g:827:31: COMPLEX
					{
					root_0 = (Object)adaptor.nil();


					COMPLEX231=(Token)match(input,COMPLEX,FOLLOW_COMPLEX_in_typeSpecifier5892); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					COMPLEX231_tree = (Object)adaptor.create(COMPLEX231);
					adaptor.addChild(root_0, COMPLEX231_tree);
					}

					}
					break;
				case 12 :
					// CivlCParser.g:827:41: REAL
					{
					root_0 = (Object)adaptor.nil();


					REAL232=(Token)match(input,REAL,FOLLOW_REAL_in_typeSpecifier5896); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					REAL232_tree = (Object)adaptor.create(REAL232);
					adaptor.addChild(root_0, REAL232_tree);
					}

					}
					break;
				case 13 :
					// CivlCParser.g:827:48: RANGE
					{
					root_0 = (Object)adaptor.nil();


					RANGE233=(Token)match(input,RANGE,FOLLOW_RANGE_in_typeSpecifier5900); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					RANGE233_tree = (Object)adaptor.create(RANGE233);
					adaptor.addChild(root_0, RANGE233_tree);
					}

					}
					break;
				case 14 :
					// CivlCParser.g:828:4: atomicTypeSpecifier
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_atomicTypeSpecifier_in_typeSpecifier5905);
					atomicTypeSpecifier234=atomicTypeSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, atomicTypeSpecifier234.getTree());

					}
					break;
				case 15 :
					// CivlCParser.g:829:4: structOrUnionSpecifier
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_structOrUnionSpecifier_in_typeSpecifier5910);
					structOrUnionSpecifier235=structOrUnionSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, structOrUnionSpecifier235.getTree());

					}
					break;
				case 16 :
					// CivlCParser.g:830:4: enumSpecifier
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_enumSpecifier_in_typeSpecifier5915);
					enumSpecifier236=enumSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, enumSpecifier236.getTree());

					}
					break;
				case 17 :
					// CivlCParser.g:831:4: typedefName
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_typedefName_in_typeSpecifier5920);
					typedefName237=typedefName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, typedefName237.getTree());

					}
					break;
				case 18 :
					// CivlCParser.g:832:4: domainSpecifier
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_domainSpecifier_in_typeSpecifier5925);
					domainSpecifier238=domainSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, domainSpecifier238.getTree());

					}
					break;
				case 19 :
					// CivlCParser.g:833:7: typeofSpecifier
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_typeofSpecifier_in_typeSpecifier5933);
					typeofSpecifier239=typeofSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, typeofSpecifier239.getTree());

					}
					break;
				case 20 :
					// CivlCParser.g:834:7: memSpecifier
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_memSpecifier_in_typeSpecifier5941);
					memSpecifier240=memSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, memSpecifier240.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:850: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 TYPEOF241=null;
		Token LPAREN242=null;
		Token RPAREN244=null;
		Token RPAREN246=null;
		ParserRuleReturnScope commaExpression243 =null;
		ParserRuleReturnScope typeName245 =null;

		Object TYPEOF241_tree=null;
		Object LPAREN242_tree=null;
		Object RPAREN244_tree=null;
		Object RPAREN246_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:851:5: ( TYPEOF LPAREN ( commaExpression RPAREN -> ^( TYPEOF_EXPRESSION LPAREN commaExpression RPAREN ) | typeName RPAREN -> ^( TYPEOF_TYPE LPAREN typeName RPAREN ) ) )
			// CivlCParser.g:851:7: TYPEOF LPAREN ( commaExpression RPAREN -> ^( TYPEOF_EXPRESSION LPAREN commaExpression RPAREN ) | typeName RPAREN -> ^( TYPEOF_TYPE LPAREN typeName RPAREN ) )
			{
			TYPEOF241=(Token)match(input,TYPEOF,FOLLOW_TYPEOF_in_typeofSpecifier5957); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_TYPEOF.add(TYPEOF241);

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

			// CivlCParser.g:852:9: ( commaExpression RPAREN -> ^( TYPEOF_EXPRESSION LPAREN commaExpression RPAREN ) | typeName RPAREN -> ^( TYPEOF_TYPE LPAREN typeName RPAREN ) )
			int alt62=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:
			case SUM:
				{
				alt62=1;
				}
				break;
			case IDENTIFIER:
				{
				int LA62_2 = input.LA(2);
				if ( (!(((isTypeName(input.LT(1).getText()))))) ) {
					alt62=1;
				}
				else if ( ((isTypeName(input.LT(1).getText()))) ) {
					alt62=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return retval;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 62, 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:
				{
				alt62=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 62, 0, input);
				throw nvae;
			}
			switch (alt62) {
				case 1 :
					// CivlCParser.g:852:11: commaExpression RPAREN
					{
					pushFollow(FOLLOW_commaExpression_in_typeofSpecifier5971);
					commaExpression243=commaExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_commaExpression.add(commaExpression243.getTree());
					RPAREN244=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_typeofSpecifier5973); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN244);

					// AST REWRITE
					// elements: LPAREN, RPAREN, commaExpression
					// 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:11: -> ^( TYPEOF_EXPRESSION LPAREN commaExpression RPAREN )
					{
						// CivlCParser.g:853: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:854:11: typeName RPAREN
					{
					pushFollow(FOLLOW_typeName_in_typeofSpecifier6007);
					typeName245=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName.add(typeName245.getTree());
					RPAREN246=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_typeofSpecifier6009); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN246);

					// AST REWRITE
					// elements: typeName, 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();
					// 855:11: -> ^( TYPEOF_TYPE LPAREN typeName RPAREN )
					{
						// CivlCParser.g:855: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:864: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 IDENTIFIER248=null;
		Token LCURLY249=null;
		Token RCURLY251=null;
		Token LCURLY252=null;
		Token RCURLY254=null;
		Token IDENTIFIER255=null;
		ParserRuleReturnScope structOrUnion247 =null;
		ParserRuleReturnScope structDeclarationList250 =null;
		ParserRuleReturnScope structDeclarationList253 =null;

		Object IDENTIFIER248_tree=null;
		Object LCURLY249_tree=null;
		Object RCURLY251_tree=null;
		Object LCURLY252_tree=null;
		Object RCURLY254_tree=null;
		Object IDENTIFIER255_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:865:2: ( structOrUnion ( IDENTIFIER LCURLY structDeclarationList RCURLY -> ^( structOrUnion IDENTIFIER structDeclarationList RCURLY ) | LCURLY structDeclarationList RCURLY -> ^( structOrUnion ABSENT structDeclarationList RCURLY ) | IDENTIFIER -> ^( structOrUnion IDENTIFIER ABSENT ) ) )
			// CivlCParser.g:865: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_structOrUnionSpecifier6057);
			structOrUnion247=structOrUnion();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_structOrUnion.add(structOrUnion247.getTree());
			// CivlCParser.g:866:6: ( IDENTIFIER LCURLY structDeclarationList RCURLY -> ^( structOrUnion IDENTIFIER structDeclarationList RCURLY ) | LCURLY structDeclarationList RCURLY -> ^( structOrUnion ABSENT structDeclarationList RCURLY ) | IDENTIFIER -> ^( structOrUnion IDENTIFIER ABSENT ) )
			int alt63=3;
			int LA63_0 = input.LA(1);
			if ( (LA63_0==IDENTIFIER) ) {
				int LA63_1 = input.LA(2);
				if ( (LA63_1==LCURLY) ) {
					alt63=1;
				}
				else if ( (LA63_1==EOF||(LA63_1 >= COLON && LA63_1 <= COMMA)||LA63_1==IDENTIFIER||LA63_1==LPAREN||LA63_1==LSQUARE||LA63_1==RPAREN||LA63_1==SEMI||LA63_1==STAR||(LA63_1 >= ABSTRACT && LA63_1 <= ALIGNAS)||(LA63_1 >= ATOMIC && LA63_1 <= AUTO)||LA63_1==BOOL||LA63_1==CHAR||(LA63_1 >= COMPLEX && LA63_1 <= CONST)||(LA63_1 >= DEVICE && LA63_1 <= DIFFERENTIABLE)||(LA63_1 >= DOMAIN && LA63_1 <= DOUBLE)||LA63_1==ENUM||(LA63_1 >= EXTERN && LA63_1 <= FATOMIC)||LA63_1==FLOAT||LA63_1==GLOBAL||(LA63_1 >= INLINE && LA63_1 <= INT)||(LA63_1 >= LONG && LA63_1 <= NORETURN)||LA63_1==OUTPUT||(LA63_1 >= PURE && LA63_1 <= RANGE)||(LA63_1 >= REAL && LA63_1 <= REGISTER)||LA63_1==RESTRICT||(LA63_1 >= SHARED && LA63_1 <= SIGNED)||LA63_1==STATE_F||LA63_1==STATIC||LA63_1==STRUCT||LA63_1==SYSTEM||(LA63_1 >= THREADLOCAL && LA63_1 <= TYPEOF)||(LA63_1 >= UNION && LA63_1 <= UNSIGNED)||(LA63_1 >= VOID && LA63_1 <= VOLATILE)) ) {
					alt63=3;
				}

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

			}
			else if ( (LA63_0==LCURLY) ) {
				alt63=2;
			}

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

			switch (alt63) {
				case 1 :
					// CivlCParser.g:866:8: IDENTIFIER LCURLY structDeclarationList RCURLY
					{
					IDENTIFIER248=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_structOrUnionSpecifier6066); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER248);

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

					pushFollow(FOLLOW_structDeclarationList_in_structOrUnionSpecifier6070);
					structDeclarationList250=structDeclarationList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_structDeclarationList.add(structDeclarationList250.getTree());
					RCURLY251=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_structOrUnionSpecifier6072); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY251);

					// AST REWRITE
					// elements: RCURLY, structOrUnion, structDeclarationList, 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();
					// 867:8: -> ^( structOrUnion IDENTIFIER structDeclarationList RCURLY )
					{
						// CivlCParser.g:867: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:868:8: LCURLY structDeclarationList RCURLY
					{
					LCURLY252=(Token)match(input,LCURLY,FOLLOW_LCURLY_in_structOrUnionSpecifier6100); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LCURLY.add(LCURLY252);

					pushFollow(FOLLOW_structDeclarationList_in_structOrUnionSpecifier6102);
					structDeclarationList253=structDeclarationList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_structDeclarationList.add(structDeclarationList253.getTree());
					RCURLY254=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_structOrUnionSpecifier6104); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY254);

					// AST REWRITE
					// elements: RCURLY, structOrUnion, 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();
					// 869:8: -> ^( structOrUnion ABSENT structDeclarationList RCURLY )
					{
						// CivlCParser.g:869: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:870:8: IDENTIFIER
					{
					IDENTIFIER255=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_structOrUnionSpecifier6132); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER255);

					// AST REWRITE
					// elements: structOrUnion, 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();
					// 871:8: -> ^( structOrUnion IDENTIFIER ABSENT )
					{
						// CivlCParser.g:871: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:876: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 set256=null;

		Object set256_tree=null;

		try {
			// CivlCParser.g:877:2: ( STRUCT | UNION )
			// CivlCParser.g:
			{
			root_0 = (Object)adaptor.nil();


			set256=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(set256));
				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:884: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 structDeclaration257 =null;

		RewriteRuleSubtreeStream stream_structDeclaration=new RewriteRuleSubtreeStream(adaptor,"rule structDeclaration");

		try {
			// CivlCParser.g:885:2: ( ( structDeclaration )* -> ^( STRUCT_DECLARATION_LIST ( structDeclaration )* ) )
			// CivlCParser.g:885:4: ( structDeclaration )*
			{
			// CivlCParser.g:885:4: ( structDeclaration )*
			loop64:
			while (true) {
				int alt64=2;
				int LA64_0 = input.LA(1);
				if ( (LA64_0==IDENTIFIER||LA64_0==ATOMIC||LA64_0==BOOL||LA64_0==CHAR||(LA64_0 >= COMPLEX && LA64_0 <= CONST)||(LA64_0 >= DOMAIN && LA64_0 <= DOUBLE)||LA64_0==ENUM||LA64_0==FLOAT||(LA64_0 >= INPUT && LA64_0 <= INT)||(LA64_0 >= LONG && LA64_0 <= MEM_TYPE)||LA64_0==OUTPUT||LA64_0==RANGE||LA64_0==REAL||LA64_0==RESTRICT||(LA64_0 >= SHORT && LA64_0 <= SIGNED)||(LA64_0 >= STATICASSERT && LA64_0 <= STRUCT)||LA64_0==TYPEOF||(LA64_0 >= UNION && LA64_0 <= UNSIGNED)||(LA64_0 >= VOID && LA64_0 <= VOLATILE)) ) {
					alt64=1;
				}

				switch (alt64) {
				case 1 :
					// CivlCParser.g:885:4: structDeclaration
					{
					pushFollow(FOLLOW_structDeclaration_in_structDeclarationList6186);
					structDeclaration257=structDeclaration();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_structDeclaration.add(structDeclaration257.getTree());
					}
					break;

				default :
					break loop64;
				}
			}

			// 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();
			// 886:4: -> ^( STRUCT_DECLARATION_LIST ( structDeclaration )* )
			{
				// CivlCParser.g:886: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:886: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:900: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 SEMI259=null;
		ParserRuleReturnScope s =null;
		ParserRuleReturnScope structDeclaratorList258 =null;
		ParserRuleReturnScope staticAssertDeclaration260 =null;

		Object SEMI259_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().hasTypeSpec = false;

		try {
			// CivlCParser.g:906:5: (s= specifierQualifierList ( -> ^( STRUCT_DECLARATION $s ABSENT ) | structDeclaratorList -> ^( STRUCT_DECLARATION $s structDeclaratorList ) ) SEMI | staticAssertDeclaration )
			int alt66=2;
			int LA66_0 = input.LA(1);
			if ( (LA66_0==IDENTIFIER||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;
			}
			else if ( (LA66_0==STATICASSERT) ) {
				alt66=2;
			}

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

			switch (alt66) {
				case 1 :
					// CivlCParser.g:906:7: s= specifierQualifierList ( -> ^( STRUCT_DECLARATION $s ABSENT ) | structDeclaratorList -> ^( STRUCT_DECLARATION $s structDeclaratorList ) ) SEMI
					{
					pushFollow(FOLLOW_specifierQualifierList_in_structDeclaration6227);
					s=specifierQualifierList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_specifierQualifierList.add(s.getTree());
					// CivlCParser.g:907:7: ( -> ^( STRUCT_DECLARATION $s ABSENT ) | structDeclaratorList -> ^( STRUCT_DECLARATION $s structDeclaratorList ) )
					int alt65=2;
					int LA65_0 = input.LA(1);
					if ( (LA65_0==SEMI) ) {
						alt65=1;
					}
					else if ( (LA65_0==COLON||LA65_0==IDENTIFIER||LA65_0==LPAREN||LA65_0==STAR) ) {
						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:907: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();
							// 907:9: -> ^( STRUCT_DECLARATION $s ABSENT )
							{
								// CivlCParser.g:907: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:908:9: structDeclaratorList
							{
							pushFollow(FOLLOW_structDeclaratorList_in_structDeclaration6256);
							structDeclaratorList258=structDeclaratorList();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_structDeclaratorList.add(structDeclaratorList258.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();
							// 909:9: -> ^( STRUCT_DECLARATION $s structDeclaratorList )
							{
								// CivlCParser.g:909: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;

					}

					SEMI259=(Token)match(input,SEMI,FOLLOW_SEMI_in_structDeclaration6291); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SEMI.add(SEMI259);

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


					pushFollow(FOLLOW_staticAssertDeclaration_in_structDeclaration6299);
					staticAssertDeclaration260=staticAssertDeclaration();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, staticAssertDeclaration260.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:919: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 typeSpecifierOrQualifier261 =null;

		RewriteRuleSubtreeStream stream_typeSpecifierOrQualifier=new RewriteRuleSubtreeStream(adaptor,"rule typeSpecifierOrQualifier");

		try {
			// CivlCParser.g:920:5: ( ( typeSpecifierOrQualifier )+ -> ^( SPECIFIER_QUALIFIER_LIST ( typeSpecifierOrQualifier )+ ) )
			// CivlCParser.g:920:7: ( typeSpecifierOrQualifier )+
			{
			// CivlCParser.g:920:7: ( typeSpecifierOrQualifier )+
			int cnt67=0;
			loop67:
			while (true) {
				int alt67=2;
				int LA67_0 = input.LA(1);
				if ( (LA67_0==IDENTIFIER) ) {
					int LA67_2 = input.LA(2);
					if ( ((isTypeName(input.LT(1).getText()))) ) {
						alt67=1;
					}

				}
				else if ( (LA67_0==ATOMIC||LA67_0==BOOL||LA67_0==CHAR||(LA67_0 >= COMPLEX && LA67_0 <= CONST)||(LA67_0 >= DOMAIN && LA67_0 <= DOUBLE)||LA67_0==ENUM||LA67_0==FLOAT||(LA67_0 >= INPUT && LA67_0 <= INT)||(LA67_0 >= LONG && LA67_0 <= MEM_TYPE)||LA67_0==OUTPUT||LA67_0==RANGE||LA67_0==REAL||LA67_0==RESTRICT||(LA67_0 >= SHORT && LA67_0 <= SIGNED)||LA67_0==STRUCT||LA67_0==TYPEOF||(LA67_0 >= UNION && LA67_0 <= UNSIGNED)||(LA67_0 >= VOID && LA67_0 <= VOLATILE)) ) {
					alt67=1;
				}

				switch (alt67) {
				case 1 :
					// CivlCParser.g:920:7: typeSpecifierOrQualifier
					{
					pushFollow(FOLLOW_typeSpecifierOrQualifier_in_specifierQualifierList6318);
					typeSpecifierOrQualifier261=typeSpecifierOrQualifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeSpecifierOrQualifier.add(typeSpecifierOrQualifier261.getTree());
					}
					break;

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

			// 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();
			// 921:7: -> ^( SPECIFIER_QUALIFIER_LIST ( typeSpecifierOrQualifier )+ )
			{
				// CivlCParser.g:921: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:928: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 COMMA262=null;
		List<Object> list_s=null;
		RuleReturnScope s = null;
		Object COMMA262_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_structDeclarator=new RewriteRuleSubtreeStream(adaptor,"rule structDeclarator");

		try {
			// CivlCParser.g:929:5: (s+= structDeclarator ( COMMA s+= structDeclarator )* -> ^( STRUCT_DECLARATOR_LIST ( $s)+ ) )
			// CivlCParser.g:929:7: s+= structDeclarator ( COMMA s+= structDeclarator )*
			{
			pushFollow(FOLLOW_structDeclarator_in_structDeclaratorList6355);
			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:929:27: ( COMMA s+= structDeclarator )*
			loop68:
			while (true) {
				int alt68=2;
				int LA68_0 = input.LA(1);
				if ( (LA68_0==COMMA) ) {
					alt68=1;
				}

				switch (alt68) {
				case 1 :
					// CivlCParser.g:929:28: COMMA s+= structDeclarator
					{
					COMMA262=(Token)match(input,COMMA,FOLLOW_COMMA_in_structDeclaratorList6358); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA262);

					pushFollow(FOLLOW_structDeclarator_in_structDeclaratorList6362);
					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 loop68;
				}
			}

			// 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();
			// 930:7: -> ^( STRUCT_DECLARATOR_LIST ( $s)+ )
			{
				// CivlCParser.g:930: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:938: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 COLON264=null;
		Token COLON266=null;
		ParserRuleReturnScope declarator263 =null;
		ParserRuleReturnScope constantExpression265 =null;
		ParserRuleReturnScope constantExpression267 =null;

		Object COLON264_tree=null;
		Object COLON266_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:939:5: ( declarator ( -> ^( STRUCT_DECLARATOR declarator ABSENT ) | COLON constantExpression -> ^( STRUCT_DECLARATOR declarator constantExpression ) ) | COLON constantExpression -> ^( STRUCT_DECLARATOR ABSENT constantExpression ) )
			int alt70=2;
			int LA70_0 = input.LA(1);
			if ( (LA70_0==IDENTIFIER||LA70_0==LPAREN||LA70_0==STAR) ) {
				alt70=1;
			}
			else if ( (LA70_0==COLON) ) {
				alt70=2;
			}

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

			switch (alt70) {
				case 1 :
					// CivlCParser.g:939:7: declarator ( -> ^( STRUCT_DECLARATOR declarator ABSENT ) | COLON constantExpression -> ^( STRUCT_DECLARATOR declarator constantExpression ) )
					{
					pushFollow(FOLLOW_declarator_in_structDeclarator6399);
					declarator263=declarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declarator.add(declarator263.getTree());
					// CivlCParser.g:940:7: ( -> ^( STRUCT_DECLARATOR declarator ABSENT ) | COLON constantExpression -> ^( STRUCT_DECLARATOR declarator constantExpression ) )
					int alt69=2;
					int LA69_0 = input.LA(1);
					if ( (LA69_0==COMMA||LA69_0==SEMI) ) {
						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:940: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();
							// 940:10: -> ^( STRUCT_DECLARATOR declarator ABSENT )
							{
								// CivlCParser.g:940: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:941:9: COLON constantExpression
							{
							COLON264=(Token)match(input,COLON,FOLLOW_COLON_in_structDeclarator6428); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_COLON.add(COLON264);

							pushFollow(FOLLOW_constantExpression_in_structDeclarator6430);
							constantExpression265=constantExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_constantExpression.add(constantExpression265.getTree());
							// AST REWRITE
							// elements: declarator, 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();
							// 942:10: -> ^( STRUCT_DECLARATOR declarator constantExpression )
							{
								// CivlCParser.g:942: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:944:7: COLON constantExpression
					{
					COLON266=(Token)match(input,COLON,FOLLOW_COLON_in_structDeclarator6465); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COLON.add(COLON266);

					pushFollow(FOLLOW_constantExpression_in_structDeclarator6467);
					constantExpression267=constantExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_constantExpression.add(constantExpression267.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();
					// 945:7: -> ^( STRUCT_DECLARATOR ABSENT constantExpression )
					{
						// CivlCParser.g:945: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:953: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 ENUM268=null;
		Token IDENTIFIER269=null;
		Token IDENTIFIER270=null;
		Token LCURLY271=null;
		Token COMMA273=null;
		Token RCURLY274=null;
		Token LCURLY275=null;
		Token COMMA277=null;
		Token RCURLY278=null;
		ParserRuleReturnScope enumeratorList272 =null;
		ParserRuleReturnScope enumeratorList276 =null;

		Object ENUM268_tree=null;
		Object IDENTIFIER269_tree=null;
		Object IDENTIFIER270_tree=null;
		Object LCURLY271_tree=null;
		Object COMMA273_tree=null;
		Object RCURLY274_tree=null;
		Object LCURLY275_tree=null;
		Object COMMA277_tree=null;
		Object RCURLY278_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:954:5: ( ENUM ( IDENTIFIER -> ^( ENUM IDENTIFIER ABSENT ) | IDENTIFIER LCURLY enumeratorList ( COMMA )? RCURLY -> ^( ENUM IDENTIFIER enumeratorList ) | LCURLY enumeratorList ( COMMA )? RCURLY -> ^( ENUM ABSENT enumeratorList ) ) )
			// CivlCParser.g:954:7: ENUM ( IDENTIFIER -> ^( ENUM IDENTIFIER ABSENT ) | IDENTIFIER LCURLY enumeratorList ( COMMA )? RCURLY -> ^( ENUM IDENTIFIER enumeratorList ) | LCURLY enumeratorList ( COMMA )? RCURLY -> ^( ENUM ABSENT enumeratorList ) )
			{
			ENUM268=(Token)match(input,ENUM,FOLLOW_ENUM_in_enumSpecifier6502); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ENUM.add(ENUM268);

			// CivlCParser.g:955:9: ( IDENTIFIER -> ^( ENUM IDENTIFIER ABSENT ) | IDENTIFIER LCURLY enumeratorList ( COMMA )? RCURLY -> ^( ENUM IDENTIFIER enumeratorList ) | LCURLY enumeratorList ( COMMA )? RCURLY -> ^( ENUM ABSENT enumeratorList ) )
			int alt73=3;
			int LA73_0 = input.LA(1);
			if ( (LA73_0==IDENTIFIER) ) {
				int LA73_1 = input.LA(2);
				if ( (LA73_1==LCURLY) ) {
					alt73=2;
				}
				else if ( (LA73_1==EOF||(LA73_1 >= COLON && LA73_1 <= COMMA)||LA73_1==IDENTIFIER||LA73_1==LPAREN||LA73_1==LSQUARE||LA73_1==RPAREN||LA73_1==SEMI||LA73_1==STAR||(LA73_1 >= ABSTRACT && LA73_1 <= ALIGNAS)||(LA73_1 >= ATOMIC && LA73_1 <= AUTO)||LA73_1==BOOL||LA73_1==CHAR||(LA73_1 >= COMPLEX && LA73_1 <= CONST)||(LA73_1 >= DEVICE && LA73_1 <= DIFFERENTIABLE)||(LA73_1 >= DOMAIN && LA73_1 <= DOUBLE)||LA73_1==ENUM||(LA73_1 >= EXTERN && LA73_1 <= FATOMIC)||LA73_1==FLOAT||LA73_1==GLOBAL||(LA73_1 >= INLINE && LA73_1 <= INT)||(LA73_1 >= LONG && LA73_1 <= NORETURN)||LA73_1==OUTPUT||(LA73_1 >= PURE && LA73_1 <= RANGE)||(LA73_1 >= REAL && LA73_1 <= REGISTER)||LA73_1==RESTRICT||(LA73_1 >= SHARED && LA73_1 <= SIGNED)||LA73_1==STATE_F||LA73_1==STATIC||LA73_1==STRUCT||LA73_1==SYSTEM||(LA73_1 >= THREADLOCAL && LA73_1 <= TYPEOF)||(LA73_1 >= UNION && LA73_1 <= UNSIGNED)||(LA73_1 >= VOID && LA73_1 <= VOLATILE)) ) {
					alt73=1;
				}

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

			}
			else if ( (LA73_0==LCURLY) ) {
				alt73=3;
			}

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

			switch (alt73) {
				case 1 :
					// CivlCParser.g:955:11: IDENTIFIER
					{
					IDENTIFIER269=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_enumSpecifier6514); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER269);

					// AST REWRITE
					// elements: IDENTIFIER, 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();
					// 956:11: -> ^( ENUM IDENTIFIER ABSENT )
					{
						// CivlCParser.g:956: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:957:11: IDENTIFIER LCURLY enumeratorList ( COMMA )? RCURLY
					{
					IDENTIFIER270=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_enumSpecifier6546); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER270);

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

					pushFollow(FOLLOW_enumeratorList_in_enumSpecifier6550);
					enumeratorList272=enumeratorList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_enumeratorList.add(enumeratorList272.getTree());
					// CivlCParser.g:957:44: ( COMMA )?
					int alt71=2;
					int LA71_0 = input.LA(1);
					if ( (LA71_0==COMMA) ) {
						alt71=1;
					}
					switch (alt71) {
						case 1 :
							// CivlCParser.g:957:44: COMMA
							{
							COMMA273=(Token)match(input,COMMA,FOLLOW_COMMA_in_enumSpecifier6552); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_COMMA.add(COMMA273);

							}
							break;

					}

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

					// AST REWRITE
					// elements: ENUM, enumeratorList, 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();
					// 958:11: -> ^( ENUM IDENTIFIER enumeratorList )
					{
						// CivlCParser.g:958: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:959:11: LCURLY enumeratorList ( COMMA )? RCURLY
					{
					LCURLY275=(Token)match(input,LCURLY,FOLLOW_LCURLY_in_enumSpecifier6587); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LCURLY.add(LCURLY275);

					pushFollow(FOLLOW_enumeratorList_in_enumSpecifier6589);
					enumeratorList276=enumeratorList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_enumeratorList.add(enumeratorList276.getTree());
					// CivlCParser.g:959:33: ( COMMA )?
					int alt72=2;
					int LA72_0 = input.LA(1);
					if ( (LA72_0==COMMA) ) {
						alt72=1;
					}
					switch (alt72) {
						case 1 :
							// CivlCParser.g:959:33: COMMA
							{
							COMMA277=(Token)match(input,COMMA,FOLLOW_COMMA_in_enumSpecifier6591); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_COMMA.add(COMMA277);

							}
							break;

					}

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

					// 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();
					// 960:11: -> ^( ENUM ABSENT enumeratorList )
					{
						// CivlCParser.g:960: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:968: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 COMMA280=null;
		ParserRuleReturnScope enumerator279 =null;
		ParserRuleReturnScope enumerator281 =null;

		Object COMMA280_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_enumerator=new RewriteRuleSubtreeStream(adaptor,"rule enumerator");

		try {
			// CivlCParser.g:969:5: ( enumerator ( COMMA enumerator )* -> ^( ENUMERATOR_LIST ( enumerator )+ ) )
			// CivlCParser.g:969:7: enumerator ( COMMA enumerator )*
			{
			pushFollow(FOLLOW_enumerator_in_enumeratorList6643);
			enumerator279=enumerator();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_enumerator.add(enumerator279.getTree());
			// CivlCParser.g:969:18: ( COMMA enumerator )*
			loop74:
			while (true) {
				int alt74=2;
				int LA74_0 = input.LA(1);
				if ( (LA74_0==COMMA) ) {
					int LA74_1 = input.LA(2);
					if ( (LA74_1==IDENTIFIER) ) {
						alt74=1;
					}

				}

				switch (alt74) {
				case 1 :
					// CivlCParser.g:969:19: COMMA enumerator
					{
					COMMA280=(Token)match(input,COMMA,FOLLOW_COMMA_in_enumeratorList6646); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA280);

					pushFollow(FOLLOW_enumerator_in_enumeratorList6648);
					enumerator281=enumerator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_enumerator.add(enumerator281.getTree());
					}
					break;

				default :
					break loop74;
				}
			}

			// 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();
			// 970:7: -> ^( ENUMERATOR_LIST ( enumerator )+ )
			{
				// CivlCParser.g:970: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:978: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 IDENTIFIER282=null;
		Token ASSIGN283=null;
		ParserRuleReturnScope constantExpression284 =null;

		Object IDENTIFIER282_tree=null;
		Object ASSIGN283_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:979:2: ( IDENTIFIER ( -> ^( ENUMERATOR IDENTIFIER ABSENT ) | ( ASSIGN constantExpression ) -> ^( ENUMERATOR IDENTIFIER constantExpression ) ) )
			// CivlCParser.g:979:4: IDENTIFIER ( -> ^( ENUMERATOR IDENTIFIER ABSENT ) | ( ASSIGN constantExpression ) -> ^( ENUMERATOR IDENTIFIER constantExpression ) )
			{
			IDENTIFIER282=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_enumerator6681); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER282);

			if ( state.backtracking==0 ) {
			    		Symbols_stack.peek().enumerationConstants.add((IDENTIFIER282!=null?IDENTIFIER282.getText():null));
			    	  }
			// CivlCParser.g:983:8: ( -> ^( ENUMERATOR IDENTIFIER ABSENT ) | ( ASSIGN constantExpression ) -> ^( ENUMERATOR IDENTIFIER constantExpression ) )
			int alt75=2;
			int LA75_0 = input.LA(1);
			if ( (LA75_0==COMMA||LA75_0==RCURLY) ) {
				alt75=1;
			}
			else if ( (LA75_0==ASSIGN) ) {
				alt75=2;
			}

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

			switch (alt75) {
				case 1 :
					// CivlCParser.g:983: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();
					// 983:11: -> ^( ENUMERATOR IDENTIFIER ABSENT )
					{
						// CivlCParser.g:983: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:984:10: ( ASSIGN constantExpression )
					{
					// CivlCParser.g:984:10: ( ASSIGN constantExpression )
					// CivlCParser.g:984:11: ASSIGN constantExpression
					{
					ASSIGN283=(Token)match(input,ASSIGN,FOLLOW_ASSIGN_in_enumerator6722); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ASSIGN.add(ASSIGN283);

					pushFollow(FOLLOW_constantExpression_in_enumerator6724);
					constantExpression284=constantExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_constantExpression.add(constantExpression284.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();
					// 985:11: -> ^( ENUMERATOR IDENTIFIER constantExpression )
					{
						// CivlCParser.g:985: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:990: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 ATOMIC285=null;
		Token LPAREN286=null;
		Token RPAREN288=null;
		ParserRuleReturnScope typeName287 =null;

		Object ATOMIC285_tree=null;
		Object LPAREN286_tree=null;
		Object RPAREN288_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:991:5: ( ATOMIC LPAREN typeName RPAREN -> ^( ATOMIC typeName ) )
			// CivlCParser.g:991:7: ATOMIC LPAREN typeName RPAREN
			{
			ATOMIC285=(Token)match(input,ATOMIC,FOLLOW_ATOMIC_in_atomicTypeSpecifier6770); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ATOMIC.add(ATOMIC285);

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

			pushFollow(FOLLOW_typeName_in_atomicTypeSpecifier6774);
			typeName287=typeName();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_typeName.add(typeName287.getTree());
			RPAREN288=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_atomicTypeSpecifier6776); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN288);

			// 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();
			// 992:7: -> ^( ATOMIC typeName )
			{
				// CivlCParser.g:992: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:996: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 set289=null;

		Object set289_tree=null;

		try {
			// CivlCParser.g:997:5: ( CONST | RESTRICT | VOLATILE | ATOMIC | INPUT | OUTPUT )
			// CivlCParser.g:
			{
			root_0 = (Object)adaptor.nil();


			set289=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(set289));
				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:1006: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 INLINE290=null;
		Token NORETURN291=null;
		Token PURE293=null;
		Token STATE_F294=null;
		Token SYSTEM295=null;
		Token SYSTEM297=null;
		Token FATOMIC298=null;
		Token DEVICE299=null;
		Token GLOBAL300=null;
		ParserRuleReturnScope abstractSpecifier292 =null;
		ParserRuleReturnScope libraryName296 =null;
		ParserRuleReturnScope differentiableSpecifier301 =null;

		Object INLINE290_tree=null;
		Object NORETURN291_tree=null;
		Object PURE293_tree=null;
		Object STATE_F294_tree=null;
		Object SYSTEM295_tree=null;
		Object SYSTEM297_tree=null;
		Object FATOMIC298_tree=null;
		Object DEVICE299_tree=null;
		Object GLOBAL300_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:1007: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 alt76=11;
			alt76 = dfa76.predict(input);
			switch (alt76) {
				case 1 :
					// CivlCParser.g:1007:7: INLINE
					{
					root_0 = (Object)adaptor.nil();


					INLINE290=(Token)match(input,INLINE,FOLLOW_INLINE_in_functionSpecifier6848); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					INLINE290_tree = (Object)adaptor.create(INLINE290);
					adaptor.addChild(root_0, INLINE290_tree);
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1007:16: NORETURN
					{
					root_0 = (Object)adaptor.nil();


					NORETURN291=(Token)match(input,NORETURN,FOLLOW_NORETURN_in_functionSpecifier6852); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					NORETURN291_tree = (Object)adaptor.create(NORETURN291);
					adaptor.addChild(root_0, NORETURN291_tree);
					}

					}
					break;
				case 3 :
					// CivlCParser.g:1008:7: abstractSpecifier
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_abstractSpecifier_in_functionSpecifier6860);
					abstractSpecifier292=abstractSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, abstractSpecifier292.getTree());

					}
					break;
				case 4 :
					// CivlCParser.g:1009:7: PURE
					{
					PURE293=(Token)match(input,PURE,FOLLOW_PURE_in_functionSpecifier6868); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_PURE.add(PURE293);

					// 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();
					// 1009:12: -> ^( PURE )
					{
						// CivlCParser.g:1009: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:1010:7: STATE_F
					{
					STATE_F294=(Token)match(input,STATE_F,FOLLOW_STATE_F_in_functionSpecifier6882); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_STATE_F.add(STATE_F294);

					// 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();
					// 1010:15: -> ^( STATE_F )
					{
						// CivlCParser.g:1010: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:1011:7: ( ( SYSTEM libraryName )=> SYSTEM libraryName )
					{
					// CivlCParser.g:1011:7: ( ( SYSTEM libraryName )=> SYSTEM libraryName )
					// CivlCParser.g:1011:8: ( SYSTEM libraryName )=> SYSTEM libraryName
					{
					SYSTEM295=(Token)match(input,SYSTEM,FOLLOW_SYSTEM_in_functionSpecifier6905); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SYSTEM.add(SYSTEM295);

					pushFollow(FOLLOW_libraryName_in_functionSpecifier6907);
					libraryName296=libraryName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_libraryName.add(libraryName296.getTree());
					}

					// AST REWRITE
					// elements: libraryName, 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();
					// 1011:52: -> ^( SYSTEM libraryName )
					{
						// CivlCParser.g:1011: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:1012:7: SYSTEM
					{
					SYSTEM297=(Token)match(input,SYSTEM,FOLLOW_SYSTEM_in_functionSpecifier6924); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SYSTEM.add(SYSTEM297);

					// 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();
					// 1012:15: -> ^( SYSTEM ABSENT )
					{
						// CivlCParser.g:1012: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:1013:7: FATOMIC
					{
					FATOMIC298=(Token)match(input,FATOMIC,FOLLOW_FATOMIC_in_functionSpecifier6941); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_FATOMIC.add(FATOMIC298);

					// 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();
					// 1013:15: -> ^( FATOMIC )
					{
						// CivlCParser.g:1013: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:1014:7: DEVICE
					{
					root_0 = (Object)adaptor.nil();


					DEVICE299=(Token)match(input,DEVICE,FOLLOW_DEVICE_in_functionSpecifier6955); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					DEVICE299_tree = (Object)adaptor.create(DEVICE299);
					adaptor.addChild(root_0, DEVICE299_tree);
					}

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


					GLOBAL300=(Token)match(input,GLOBAL,FOLLOW_GLOBAL_in_functionSpecifier6963); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					GLOBAL300_tree = (Object)adaptor.create(GLOBAL300);
					adaptor.addChild(root_0, GLOBAL300_tree);
					}

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


					pushFollow(FOLLOW_differentiableSpecifier_in_functionSpecifier6971);
					differentiableSpecifier301=differentiableSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, differentiableSpecifier301.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:1019: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 ABSTRACT302=null;
		Token CONTIN303=null;
		Token LPAREN304=null;
		Token INTEGER_CONSTANT305=null;
		Token RPAREN306=null;
		Token LPAREN307=null;
		Token STRING_LITERAL308=null;
		Token RPAREN309=null;

		Object ABSTRACT302_tree=null;
		Object CONTIN303_tree=null;
		Object LPAREN304_tree=null;
		Object INTEGER_CONSTANT305_tree=null;
		Object RPAREN306_tree=null;
		Object LPAREN307_tree=null;
		Object STRING_LITERAL308_tree=null;
		Object RPAREN309_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:1020:5: ( ABSTRACT ( -> ^( ABSTRACT ) | CONTIN LPAREN INTEGER_CONSTANT RPAREN -> ^( ABSTRACT INTEGER_CONSTANT ) | LPAREN STRING_LITERAL RPAREN -> ^( ABSTRACT STRING_LITERAL ) ) )
			// CivlCParser.g:1020:7: ABSTRACT ( -> ^( ABSTRACT ) | CONTIN LPAREN INTEGER_CONSTANT RPAREN -> ^( ABSTRACT INTEGER_CONSTANT ) | LPAREN STRING_LITERAL RPAREN -> ^( ABSTRACT STRING_LITERAL ) )
			{
			ABSTRACT302=(Token)match(input,ABSTRACT,FOLLOW_ABSTRACT_in_abstractSpecifier6988); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ABSTRACT.add(ABSTRACT302);

			// CivlCParser.g:1020:16: ( -> ^( ABSTRACT ) | CONTIN LPAREN INTEGER_CONSTANT RPAREN -> ^( ABSTRACT INTEGER_CONSTANT ) | LPAREN STRING_LITERAL RPAREN -> ^( ABSTRACT STRING_LITERAL ) )
			int alt77=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:
				{
				alt77=1;
				}
				break;
			case LPAREN:
				{
				int LA77_2 = input.LA(2);
				if ( (LA77_2==STRING_LITERAL) ) {
					alt77=3;
				}
				else if ( (LA77_2==IDENTIFIER||LA77_2==LPAREN||LA77_2==LSQUARE||LA77_2==RPAREN||LA77_2==STAR||(LA77_2 >= ABSTRACT && LA77_2 <= ALIGNAS)||(LA77_2 >= ATOMIC && LA77_2 <= AUTO)||LA77_2==BOOL||LA77_2==CHAR||(LA77_2 >= COMPLEX && LA77_2 <= CONST)||(LA77_2 >= DEVICE && LA77_2 <= DIFFERENTIABLE)||(LA77_2 >= DOMAIN && LA77_2 <= DOUBLE)||LA77_2==ENUM||(LA77_2 >= EXTERN && LA77_2 <= FATOMIC)||LA77_2==FLOAT||LA77_2==GLOBAL||(LA77_2 >= INLINE && LA77_2 <= INT)||(LA77_2 >= LONG && LA77_2 <= NORETURN)||LA77_2==OUTPUT||(LA77_2 >= PURE && LA77_2 <= RANGE)||(LA77_2 >= REAL && LA77_2 <= REGISTER)||LA77_2==RESTRICT||(LA77_2 >= SHARED && LA77_2 <= SIGNED)||LA77_2==STATE_F||LA77_2==STATIC||LA77_2==STRUCT||LA77_2==SYSTEM||(LA77_2 >= THREADLOCAL && LA77_2 <= TYPEOF)||(LA77_2 >= UNION && LA77_2 <= UNSIGNED)||(LA77_2 >= VOID && LA77_2 <= VOLATILE)) ) {
					alt77=1;
				}

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

				}
				break;
			case CONTIN:
				{
				alt77=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 77, 0, input);
				throw nvae;
			}
			switch (alt77) {
				case 1 :
					// CivlCParser.g:1020: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();
					// 1020:19: -> ^( ABSTRACT )
					{
						// CivlCParser.g:1020: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:1021:18: CONTIN LPAREN INTEGER_CONSTANT RPAREN
					{
					CONTIN303=(Token)match(input,CONTIN,FOLLOW_CONTIN_in_abstractSpecifier7016); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_CONTIN.add(CONTIN303);

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

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

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

					// AST REWRITE
					// elements: ABSTRACT, 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();
					// 1022:18: -> ^( ABSTRACT INTEGER_CONSTANT )
					{
						// CivlCParser.g:1022:21: ^( 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:1023:18: LPAREN STRING_LITERAL RPAREN
					{
					LPAREN307=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_abstractSpecifier7066); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN307);

					STRING_LITERAL308=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_abstractSpecifier7068); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_STRING_LITERAL.add(STRING_LITERAL308);

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

					// 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();
					// 1024:18: -> ^( ABSTRACT STRING_LITERAL )
					{
						// CivlCParser.g:1024:21: ^( 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:1028: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 DIFFERENTIABLE310=null;
		Token LPAREN311=null;
		Token INTEGER_CONSTANT312=null;
		Token COMMA313=null;
		Token RPAREN315=null;
		ParserRuleReturnScope intervalSeq314 =null;

		Object DIFFERENTIABLE310_tree=null;
		Object LPAREN311_tree=null;
		Object INTEGER_CONSTANT312_tree=null;
		Object COMMA313_tree=null;
		Object RPAREN315_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:1029:2: ( DIFFERENTIABLE LPAREN INTEGER_CONSTANT COMMA intervalSeq RPAREN -> ^( DIFFERENTIABLE INTEGER_CONSTANT intervalSeq ) )
			// CivlCParser.g:1029:4: DIFFERENTIABLE LPAREN INTEGER_CONSTANT COMMA intervalSeq RPAREN
			{
			DIFFERENTIABLE310=(Token)match(input,DIFFERENTIABLE,FOLLOW_DIFFERENTIABLE_in_differentiableSpecifier7126); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_DIFFERENTIABLE.add(DIFFERENTIABLE310);

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

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

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

			pushFollow(FOLLOW_intervalSeq_in_differentiableSpecifier7134);
			intervalSeq314=intervalSeq();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_intervalSeq.add(intervalSeq314.getTree());
			RPAREN315=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_differentiableSpecifier7136); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN315);

			// AST REWRITE
			// elements: intervalSeq, INTEGER_CONSTANT, DIFFERENTIABLE
			// 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();
			// 1030:4: -> ^( DIFFERENTIABLE INTEGER_CONSTANT intervalSeq )
			{
				// CivlCParser.g:1030:7: ^( 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:1033: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 LSQUARE316=null;
		Token RSQUARE317=null;
		Token i1=null;
		List<Object> list_i1=null;

		Object i0_tree=null;
		Object LSQUARE316_tree=null;
		Object RSQUARE317_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:1034:2: ( LSQUARE i0= IDENTIFIER i1+= ( SUB | IDENTIFIER )* RSQUARE -> ^( LIB_NAME $i0 ( $i1)* ) )
			// CivlCParser.g:1034:4: LSQUARE i0= IDENTIFIER i1+= ( SUB | IDENTIFIER )* RSQUARE
			{
			LSQUARE316=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_libraryName7160); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE316);

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

			// CivlCParser.g:1034:30: ( SUB | IDENTIFIER )*
			loop78:
			while (true) {
				int alt78=3;
				int LA78_0 = input.LA(1);
				if ( (LA78_0==SUB) ) {
					alt78=1;
				}
				else if ( (LA78_0==IDENTIFIER) ) {
					alt78=2;
				}

				switch (alt78) {
				case 1 :
					// CivlCParser.g:1034:31: SUB
					{
					i1=(Token)match(input,SUB,FOLLOW_SUB_in_libraryName7169); 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:1034:37: IDENTIFIER
					{
					i1=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_libraryName7173); 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 loop78;
				}
			}

			RSQUARE317=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_libraryName7177); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE317);

			// AST REWRITE
			// elements: i1, i0
			// 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();
			// 1035:4: -> ^( LIB_NAME $i0 ( $i1)* )
			{
				// CivlCParser.g:1035:7: ^( 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:1035:23: ( $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:1045: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 ALIGNAS318=null;
		Token LPAREN319=null;
		Token RPAREN321=null;
		Token RPAREN323=null;
		ParserRuleReturnScope typeName320 =null;
		ParserRuleReturnScope constantExpression322 =null;

		Object ALIGNAS318_tree=null;
		Object LPAREN319_tree=null;
		Object RPAREN321_tree=null;
		Object RPAREN323_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:1046:5: ( ALIGNAS LPAREN ( typeName RPAREN -> ^( ALIGNAS TYPE typeName ) | constantExpression RPAREN -> ^( ALIGNAS EXPR constantExpression ) ) )
			// CivlCParser.g:1046:7: ALIGNAS LPAREN ( typeName RPAREN -> ^( ALIGNAS TYPE typeName ) | constantExpression RPAREN -> ^( ALIGNAS EXPR constantExpression ) )
			{
			ALIGNAS318=(Token)match(input,ALIGNAS,FOLLOW_ALIGNAS_in_alignmentSpecifier7210); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ALIGNAS.add(ALIGNAS318);

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

			// CivlCParser.g:1047:9: ( typeName RPAREN -> ^( ALIGNAS TYPE typeName ) | constantExpression RPAREN -> ^( ALIGNAS EXPR constantExpression ) )
			int alt79=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:
				{
				alt79=1;
				}
				break;
			case IDENTIFIER:
				{
				int LA79_17 = input.LA(2);
				if ( ((isTypeName(input.LT(1).getText()))) ) {
					alt79=1;
				}
				else if ( (true) ) {
					alt79=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:
			case SUM:
				{
				alt79=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 79, 0, input);
				throw nvae;
			}
			switch (alt79) {
				case 1 :
					// CivlCParser.g:1047:11: typeName RPAREN
					{
					pushFollow(FOLLOW_typeName_in_alignmentSpecifier7224);
					typeName320=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName.add(typeName320.getTree());
					RPAREN321=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_alignmentSpecifier7226); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN321);

					// 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();
					// 1048:11: -> ^( ALIGNAS TYPE typeName )
					{
						// CivlCParser.g:1048: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:1049:11: constantExpression RPAREN
					{
					pushFollow(FOLLOW_constantExpression_in_alignmentSpecifier7258);
					constantExpression322=constantExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_constantExpression.add(constantExpression322.getTree());
					RPAREN323=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_alignmentSpecifier7260); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN323);

					// 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();
					// 1050:11: -> ^( ALIGNAS EXPR constantExpression )
					{
						// CivlCParser.g:1050: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:1059: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 pointer324 =null;

		RewriteRuleSubtreeStream stream_pointer=new RewriteRuleSubtreeStream(adaptor,"rule pointer");
		RewriteRuleSubtreeStream stream_directDeclarator=new RewriteRuleSubtreeStream(adaptor,"rule directDeclarator");

		try {
			// CivlCParser.g:1060:2: (d= directDeclarator -> ^( DECLARATOR ABSENT $d) | pointer d= directDeclarator -> ^( DECLARATOR pointer $d) )
			int alt80=2;
			int LA80_0 = input.LA(1);
			if ( (LA80_0==IDENTIFIER||LA80_0==LPAREN) ) {
				alt80=1;
			}
			else if ( (LA80_0==STAR) ) {
				alt80=2;
			}

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

			switch (alt80) {
				case 1 :
					// CivlCParser.g:1060:4: d= directDeclarator
					{
					pushFollow(FOLLOW_directDeclarator_in_declarator7308);
					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();
					// 1061:4: -> ^( DECLARATOR ABSENT $d)
					{
						// CivlCParser.g:1061: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:1062:4: pointer d= directDeclarator
					{
					pushFollow(FOLLOW_pointer_in_declarator7327);
					pointer324=pointer();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_pointer.add(pointer324.getTree());
					pushFollow(FOLLOW_directDeclarator_in_declarator7331);
					d=directDeclarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_directDeclarator.add(d.getTree());
					// AST REWRITE
					// elements: d, pointer
					// 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();
					// 1063:4: -> ^( DECLARATOR pointer $d)
					{
						// CivlCParser.g:1063: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:1071: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:1072:2: (p= directDeclaratorPrefix ( -> ^( DIRECT_DECLARATOR $p) | (s+= directDeclaratorSuffix )+ -> ^( DIRECT_DECLARATOR $p ( $s)+ ) ) )
			// CivlCParser.g:1072:4: p= directDeclaratorPrefix ( -> ^( DIRECT_DECLARATOR $p) | (s+= directDeclaratorSuffix )+ -> ^( DIRECT_DECLARATOR $p ( $s)+ ) )
			{
			pushFollow(FOLLOW_directDeclaratorPrefix_in_directDeclarator7360);
			p=directDeclaratorPrefix();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_directDeclaratorPrefix.add(p.getTree());
			// CivlCParser.g:1073:4: ( -> ^( DIRECT_DECLARATOR $p) | (s+= directDeclaratorSuffix )+ -> ^( DIRECT_DECLARATOR $p ( $s)+ ) )
			int alt82=2;
			int LA82_0 = input.LA(1);
			if ( (LA82_0==EOF||LA82_0==ASSIGN||(LA82_0 >= COLON && LA82_0 <= COMMA)||LA82_0==IDENTIFIER||LA82_0==LCURLY||LA82_0==RPAREN||LA82_0==SEMI||(LA82_0 >= ABSTRACT && LA82_0 <= ALIGNAS)||(LA82_0 >= ASSIGNS && LA82_0 <= AUTO)||LA82_0==BOOL||LA82_0==CHAR||(LA82_0 >= COMPLEX && LA82_0 <= CONST)||LA82_0==DEPENDS||(LA82_0 >= DEVICE && LA82_0 <= DIFFERENTIABLE)||(LA82_0 >= DOMAIN && LA82_0 <= ENUM)||(LA82_0 >= EXTERN && LA82_0 <= FATOMIC)||LA82_0==FLOAT||LA82_0==GLOBAL||LA82_0==GUARD||(LA82_0 >= INLINE && LA82_0 <= INT)||(LA82_0 >= LONG && LA82_0 <= NORETURN)||LA82_0==OUTPUT||(LA82_0 >= PURE && LA82_0 <= RESTRICT)||(LA82_0 >= SHARED && LA82_0 <= SIGNED)||LA82_0==STATE_F||(LA82_0 >= STATIC && LA82_0 <= STRUCT)||LA82_0==SYSTEM||(LA82_0 >= THREADLOCAL && LA82_0 <= TYPEOF)||(LA82_0 >= UNION && LA82_0 <= UNSIGNED)||(LA82_0 >= VOID && LA82_0 <= VOLATILE)) ) {
				alt82=1;
			}
			else if ( (LA82_0==LPAREN||LA82_0==LSQUARE) ) {
				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:1073: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();
					// 1073:6: -> ^( DIRECT_DECLARATOR $p)
					{
						// CivlCParser.g:1073: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:1074:6: (s+= directDeclaratorSuffix )+
					{
					// CivlCParser.g:1074:7: (s+= directDeclaratorSuffix )+
					int cnt81=0;
					loop81:
					while (true) {
						int alt81=2;
						int LA81_0 = input.LA(1);
						if ( (LA81_0==LPAREN||LA81_0==LSQUARE) ) {
							alt81=1;
						}

						switch (alt81) {
						case 1 :
							// CivlCParser.g:1074:7: s+= directDeclaratorSuffix
							{
							pushFollow(FOLLOW_directDeclaratorSuffix_in_directDeclarator7383);
							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 ( cnt81 >= 1 ) break loop81;
							if (state.backtracking>0) {state.failed=true; return retval;}
							EarlyExitException eee = new EarlyExitException(81, input);
							throw eee;
						}
						cnt81++;
					}

					// AST REWRITE
					// elements: p, s
					// 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();
					// 1074:33: -> ^( DIRECT_DECLARATOR $p ( $s)+ )
					{
						// CivlCParser.g:1074:36: ^( 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:1081: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 IDENTIFIER325=null;
		Token LPAREN326=null;
		Token RPAREN328=null;
		ParserRuleReturnScope declarator327 =null;

		Object IDENTIFIER325_tree=null;
		Object LPAREN326_tree=null;
		Object RPAREN328_tree=null;

		try {
			// CivlCParser.g:1082:2: ( IDENTIFIER | LPAREN ! declarator RPAREN !)
			int alt83=2;
			int LA83_0 = input.LA(1);
			if ( (LA83_0==IDENTIFIER) ) {
				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:1082:4: IDENTIFIER
					{
					root_0 = (Object)adaptor.nil();


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

					if ( state.backtracking==0 ) {
								if (DeclarationScope_stack.peek().isTypedef) {
									Symbols_stack.peek().types.add((IDENTIFIER325!=null?IDENTIFIER325.getText():null));
								}
							}
					}
					break;
				case 2 :
					// CivlCParser.g:1088:4: LPAREN ! declarator RPAREN !
					{
					root_0 = (Object)adaptor.nil();


					LPAREN326=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_directDeclaratorPrefix7424); if (state.failed) return retval;
					pushFollow(FOLLOW_declarator_in_directDeclaratorPrefix7427);
					declarator327=declarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, declarator327.getTree());

					RPAREN328=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_directDeclaratorPrefix7429); 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:1092: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 directDeclaratorArraySuffix329 =null;
		ParserRuleReturnScope directDeclaratorFunctionSuffix330 =null;


		try {
			// CivlCParser.g:1093:2: ( directDeclaratorArraySuffix | directDeclaratorFunctionSuffix )
			int alt84=2;
			int LA84_0 = input.LA(1);
			if ( (LA84_0==LSQUARE) ) {
				alt84=1;
			}
			else if ( (LA84_0==LPAREN) ) {
				alt84=2;
			}

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

			switch (alt84) {
				case 1 :
					// CivlCParser.g:1093:4: directDeclaratorArraySuffix
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_directDeclaratorArraySuffix_in_directDeclaratorSuffix7442);
					directDeclaratorArraySuffix329=directDeclaratorArraySuffix();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, directDeclaratorArraySuffix329.getTree());

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


					pushFollow(FOLLOW_directDeclaratorFunctionSuffix_in_directDeclaratorSuffix7447);
					directDeclaratorFunctionSuffix330=directDeclaratorFunctionSuffix();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, directDeclaratorFunctionSuffix330.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:1106: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 LSQUARE331=null;
		Token RSQUARE334=null;
		Token STATIC335=null;
		Token RSQUARE338=null;
		Token STATIC340=null;
		Token RSQUARE342=null;
		Token STAR344=null;
		Token RSQUARE345=null;
		ParserRuleReturnScope typeQualifierList_opt332 =null;
		ParserRuleReturnScope assignmentExpression_opt333 =null;
		ParserRuleReturnScope typeQualifierList_opt336 =null;
		ParserRuleReturnScope assignmentExpression337 =null;
		ParserRuleReturnScope typeQualifierList339 =null;
		ParserRuleReturnScope assignmentExpression341 =null;
		ParserRuleReturnScope typeQualifierList_opt343 =null;

		Object LSQUARE331_tree=null;
		Object RSQUARE334_tree=null;
		Object STATIC335_tree=null;
		Object RSQUARE338_tree=null;
		Object STATIC340_tree=null;
		Object RSQUARE342_tree=null;
		Object STAR344_tree=null;
		Object RSQUARE345_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:1107: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:1107: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 ) )
			{
			LSQUARE331=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_directDeclaratorArraySuffix7460); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE331);

			// CivlCParser.g:1108: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 alt85=4;
			alt85 = dfa85.predict(input);
			switch (alt85) {
				case 1 :
					// CivlCParser.g:1108:6: typeQualifierList_opt assignmentExpression_opt RSQUARE
					{
					pushFollow(FOLLOW_typeQualifierList_opt_in_directDeclaratorArraySuffix7467);
					typeQualifierList_opt332=typeQualifierList_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeQualifierList_opt.add(typeQualifierList_opt332.getTree());
					pushFollow(FOLLOW_assignmentExpression_opt_in_directDeclaratorArraySuffix7469);
					assignmentExpression_opt333=assignmentExpression_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_assignmentExpression_opt.add(assignmentExpression_opt333.getTree());
					RSQUARE334=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_directDeclaratorArraySuffix7471); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE334);

					// AST REWRITE
					// elements: typeQualifierList_opt, assignmentExpression_opt, LSQUARE, RSQUARE
					// 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: -> ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt assignmentExpression_opt RSQUARE )
					{
						// CivlCParser.g:1109: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:1111:6: STATIC typeQualifierList_opt assignmentExpression RSQUARE
					{
					STATIC335=(Token)match(input,STATIC,FOLLOW_STATIC_in_directDeclaratorArraySuffix7509); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_STATIC.add(STATIC335);

					pushFollow(FOLLOW_typeQualifierList_opt_in_directDeclaratorArraySuffix7511);
					typeQualifierList_opt336=typeQualifierList_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeQualifierList_opt.add(typeQualifierList_opt336.getTree());
					pushFollow(FOLLOW_assignmentExpression_in_directDeclaratorArraySuffix7513);
					assignmentExpression337=assignmentExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression337.getTree());
					RSQUARE338=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_directDeclaratorArraySuffix7515); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE338);

					// AST REWRITE
					// elements: assignmentExpression, RSQUARE, STATIC, typeQualifierList_opt, 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();
					// 1112:6: -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList_opt assignmentExpression RSQUARE )
					{
						// CivlCParser.g:1112: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:1114:8: typeQualifierList STATIC assignmentExpression RSQUARE
					{
					pushFollow(FOLLOW_typeQualifierList_in_directDeclaratorArraySuffix7555);
					typeQualifierList339=typeQualifierList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeQualifierList.add(typeQualifierList339.getTree());
					STATIC340=(Token)match(input,STATIC,FOLLOW_STATIC_in_directDeclaratorArraySuffix7557); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_STATIC.add(STATIC340);

					pushFollow(FOLLOW_assignmentExpression_in_directDeclaratorArraySuffix7559);
					assignmentExpression341=assignmentExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression341.getTree());
					RSQUARE342=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_directDeclaratorArraySuffix7561); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE342);

					// AST REWRITE
					// elements: STATIC, typeQualifierList, LSQUARE, assignmentExpression, RSQUARE
					// 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();
					// 1115:6: -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList assignmentExpression RSQUARE )
					{
						// CivlCParser.g:1115: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:1117:8: typeQualifierList_opt STAR RSQUARE
					{
					pushFollow(FOLLOW_typeQualifierList_opt_in_directDeclaratorArraySuffix7601);
					typeQualifierList_opt343=typeQualifierList_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeQualifierList_opt.add(typeQualifierList_opt343.getTree());
					STAR344=(Token)match(input,STAR,FOLLOW_STAR_in_directDeclaratorArraySuffix7603); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_STAR.add(STAR344);

					RSQUARE345=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_directDeclaratorArraySuffix7605); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE345);

					// AST REWRITE
					// elements: LSQUARE, RSQUARE, STAR, 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();
					// 1118:6: -> ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt STAR RSQUARE )
					{
						// CivlCParser.g:1118: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:1129: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 LPAREN346=null;
		Token RPAREN348=null;
		Token RPAREN350=null;
		Token RPAREN351=null;
		ParserRuleReturnScope parameterTypeList347 =null;
		ParserRuleReturnScope identifierList349 =null;

		Object LPAREN346_tree=null;
		Object RPAREN348_tree=null;
		Object RPAREN350_tree=null;
		Object RPAREN351_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().hasTypeSpec = false;

		try {
			// CivlCParser.g:1135:2: ( LPAREN ( parameterTypeList RPAREN -> ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN ) | identifierList RPAREN -> ^( FUNCTION_SUFFIX LPAREN identifierList RPAREN ) | RPAREN -> ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN ) ) )
			// CivlCParser.g:1135:4: LPAREN ( parameterTypeList RPAREN -> ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN ) | identifierList RPAREN -> ^( FUNCTION_SUFFIX LPAREN identifierList RPAREN ) | RPAREN -> ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN ) )
			{
			LPAREN346=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_directDeclaratorFunctionSuffix7664); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN346);

			// CivlCParser.g:1136:4: ( parameterTypeList RPAREN -> ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN ) | identifierList RPAREN -> ^( FUNCTION_SUFFIX LPAREN identifierList RPAREN ) | RPAREN -> ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN ) )
			int alt86=3;
			alt86 = dfa86.predict(input);
			switch (alt86) {
				case 1 :
					// CivlCParser.g:1136:6: parameterTypeList RPAREN
					{
					pushFollow(FOLLOW_parameterTypeList_in_directDeclaratorFunctionSuffix7671);
					parameterTypeList347=parameterTypeList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_parameterTypeList.add(parameterTypeList347.getTree());
					RPAREN348=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_directDeclaratorFunctionSuffix7673); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN348);

					// AST REWRITE
					// elements: LPAREN, parameterTypeList, 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();
					// 1137:6: -> ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN )
					{
						// CivlCParser.g:1137: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:1138:6: identifierList RPAREN
					{
					pushFollow(FOLLOW_identifierList_in_directDeclaratorFunctionSuffix7698);
					identifierList349=identifierList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_identifierList.add(identifierList349.getTree());
					RPAREN350=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_directDeclaratorFunctionSuffix7700); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN350);

					// 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();
					// 1139:6: -> ^( FUNCTION_SUFFIX LPAREN identifierList RPAREN )
					{
						// CivlCParser.g:1139: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:1140:6: RPAREN
					{
					RPAREN351=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_directDeclaratorFunctionSuffix7724); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN351);

					// AST REWRITE
					// elements: 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();
					// 1140:13: -> ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN )
					{
						// CivlCParser.g:1140: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:1148: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 typeQualifier352 =null;

		RewriteRuleSubtreeStream stream_typeQualifier=new RewriteRuleSubtreeStream(adaptor,"rule typeQualifier");

		try {
			// CivlCParser.g:1149:2: ( ( typeQualifier )* -> ^( TYPE_QUALIFIER_LIST ( typeQualifier )* ) )
			// CivlCParser.g:1149:4: ( typeQualifier )*
			{
			// CivlCParser.g:1149:4: ( typeQualifier )*
			loop87:
			while (true) {
				int alt87=2;
				int LA87_0 = input.LA(1);
				if ( (LA87_0==ATOMIC||LA87_0==CONST||LA87_0==INPUT||LA87_0==OUTPUT||LA87_0==RESTRICT||LA87_0==VOLATILE) ) {
					alt87=1;
				}

				switch (alt87) {
				case 1 :
					// CivlCParser.g:1149:4: typeQualifier
					{
					pushFollow(FOLLOW_typeQualifier_in_typeQualifierList_opt7754);
					typeQualifier352=typeQualifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeQualifier.add(typeQualifier352.getTree());
					}
					break;

				default :
					break loop87;
				}
			}

			// 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();
			// 1149:19: -> ^( TYPE_QUALIFIER_LIST ( typeQualifier )* )
			{
				// CivlCParser.g:1149: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:1149: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:1155: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 assignmentExpression353 =null;


		try {
			// CivlCParser.g:1156:2: ( -> ABSENT | assignmentExpression )
			int alt88=2;
			int LA88_0 = input.LA(1);
			if ( (LA88_0==RSQUARE) ) {
				alt88=1;
			}
			else if ( (LA88_0==AMPERSAND||LA88_0==CHARACTER_CONSTANT||LA88_0==ELLIPSIS||LA88_0==FLOATING_CONSTANT||LA88_0==IDENTIFIER||LA88_0==INTEGER_CONSTANT||LA88_0==LPAREN||LA88_0==MINUSMINUS||LA88_0==NOT||LA88_0==PLUS||LA88_0==PLUSPLUS||LA88_0==STAR||(LA88_0 >= STRING_LITERAL && LA88_0 <= SUB)||LA88_0==TILDE||LA88_0==ALIGNOF||LA88_0==BIG_O||LA88_0==CALLS||LA88_0==DERIV||LA88_0==GENERIC||LA88_0==HERE||LA88_0==PROCNULL||LA88_0==RESULT||(LA88_0 >= SCOPEOF && LA88_0 <= SELF)||(LA88_0 >= SIZEOF && LA88_0 <= SPAWN)||LA88_0==STATE_NULL||LA88_0==VALUE_AT||LA88_0==SUM) ) {
				alt88=2;
			}

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

			switch (alt88) {
				case 1 :
					// CivlCParser.g:1156: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();
					// 1156:5: -> ABSENT
					{
						adaptor.addChild(root_0, (Object)adaptor.create(ABSENT, "ABSENT"));
					}


					retval.tree = root_0;
					}

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


					pushFollow(FOLLOW_assignmentExpression_in_assignmentExpression_opt7785);
					assignmentExpression353=assignmentExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, assignmentExpression353.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:1164: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_part354 =null;

		RewriteRuleSubtreeStream stream_pointer_part=new RewriteRuleSubtreeStream(adaptor,"rule pointer_part");

		try {
			// CivlCParser.g:1165:5: ( ( pointer_part )+ -> ^( POINTER ( pointer_part )+ ) )
			// CivlCParser.g:1165:7: ( pointer_part )+
			{
			// CivlCParser.g:1165:7: ( pointer_part )+
			int cnt89=0;
			loop89:
			while (true) {
				int alt89=2;
				int LA89_0 = input.LA(1);
				if ( (LA89_0==STAR) ) {
					alt89=1;
				}

				switch (alt89) {
				case 1 :
					// CivlCParser.g:1165:7: pointer_part
					{
					pushFollow(FOLLOW_pointer_part_in_pointer7801);
					pointer_part354=pointer_part();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_pointer_part.add(pointer_part354.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: 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();
			// 1165:21: -> ^( POINTER ( pointer_part )+ )
			{
				// CivlCParser.g:1165: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:1172: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 STAR355=null;
		ParserRuleReturnScope typeQualifierList_opt356 =null;

		Object STAR355_tree=null;
		RewriteRuleTokenStream stream_STAR=new RewriteRuleTokenStream(adaptor,"token STAR");
		RewriteRuleSubtreeStream stream_typeQualifierList_opt=new RewriteRuleSubtreeStream(adaptor,"rule typeQualifierList_opt");

		try {
			// CivlCParser.g:1173:2: ( STAR typeQualifierList_opt -> ^( STAR typeQualifierList_opt ) )
			// CivlCParser.g:1173:4: STAR typeQualifierList_opt
			{
			STAR355=(Token)match(input,STAR,FOLLOW_STAR_in_pointer_part7827); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_STAR.add(STAR355);

			pushFollow(FOLLOW_typeQualifierList_opt_in_pointer_part7829);
			typeQualifierList_opt356=typeQualifierList_opt();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_typeQualifierList_opt.add(typeQualifierList_opt356.getTree());
			// AST REWRITE
			// elements: STAR, 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();
			// 1173:31: -> ^( STAR typeQualifierList_opt )
			{
				// CivlCParser.g:1173:34: ^( 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:1180: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 typeQualifier357 =null;

		RewriteRuleSubtreeStream stream_typeQualifier=new RewriteRuleSubtreeStream(adaptor,"rule typeQualifier");

		try {
			// CivlCParser.g:1181:5: ( ( typeQualifier )+ -> ^( TYPE_QUALIFIER_LIST ( typeQualifier )+ ) )
			// CivlCParser.g:1181:7: ( typeQualifier )+
			{
			// CivlCParser.g:1181:7: ( typeQualifier )+
			int cnt90=0;
			loop90:
			while (true) {
				int alt90=2;
				int LA90_0 = input.LA(1);
				if ( (LA90_0==ATOMIC||LA90_0==CONST||LA90_0==INPUT||LA90_0==OUTPUT||LA90_0==RESTRICT||LA90_0==VOLATILE) ) {
					alt90=1;
				}

				switch (alt90) {
				case 1 :
					// CivlCParser.g:1181:7: typeQualifier
					{
					pushFollow(FOLLOW_typeQualifier_in_typeQualifierList7853);
					typeQualifier357=typeQualifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeQualifier.add(typeQualifier357.getTree());
					}
					break;

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

			// 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();
			// 1181:22: -> ^( TYPE_QUALIFIER_LIST ( typeQualifier )+ )
			{
				// CivlCParser.g:1181: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:1195: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 parameterTypeListWithoutScope358 =null;
		ParserRuleReturnScope parameterTypeListWithScope359 =null;


		try {
			// CivlCParser.g:1196:2: ({...}? parameterTypeListWithoutScope |{...}? parameterTypeListWithScope )
			int alt91=2;
			switch ( input.LA(1) ) {
			case TYPEDEF:
				{
				int LA91_1 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case AUTO:
			case EXTERN:
			case REGISTER:
			case SHARED:
			case STATIC:
			case THREADLOCAL:
				{
				int LA91_2 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case VOID:
				{
				int LA91_3 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case CHAR:
				{
				int LA91_4 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case SHORT:
				{
				int LA91_5 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case INT:
				{
				int LA91_6 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case LONG:
				{
				int LA91_7 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case FLOAT:
				{
				int LA91_8 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case DOUBLE:
				{
				int LA91_9 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case SIGNED:
				{
				int LA91_10 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case UNSIGNED:
				{
				int LA91_11 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case BOOL:
				{
				int LA91_12 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case COMPLEX:
				{
				int LA91_13 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case REAL:
				{
				int LA91_14 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case RANGE:
				{
				int LA91_15 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case ATOMIC:
				{
				int LA91_16 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case STRUCT:
			case UNION:
				{
				int LA91_17 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case ENUM:
				{
				int LA91_18 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case IDENTIFIER:
				{
				int LA91_19 = input.LA(2);
				if ( (((isTypeName(input.LT(1).getText()))&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt91=1;
				}
				else if ( (((isTypeName(input.LT(1).getText()))&&(!Symbols_stack.peek().isFunctionDefinition))) ) {
					alt91=2;
				}

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

				}
				break;
			case DOMAIN:
				{
				int LA91_20 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case TYPEOF:
				{
				int LA91_21 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case MEM_TYPE:
				{
				int LA91_22 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case CONST:
			case INPUT:
			case OUTPUT:
			case RESTRICT:
			case VOLATILE:
				{
				int LA91_23 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case INLINE:
				{
				int LA91_24 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case NORETURN:
				{
				int LA91_25 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case ABSTRACT:
				{
				int LA91_26 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case PURE:
				{
				int LA91_27 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case STATE_F:
				{
				int LA91_28 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case SYSTEM:
				{
				int LA91_29 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case FATOMIC:
				{
				int LA91_30 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case DEVICE:
				{
				int LA91_31 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case GLOBAL:
				{
				int LA91_32 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case DIFFERENTIABLE:
				{
				int LA91_33 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			case ALIGNAS:
				{
				int LA91_34 = input.LA(2);
				if ( ((Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=1;
				}
				else if ( ((!Symbols_stack.peek().isFunctionDefinition)) ) {
					alt91=2;
				}

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

				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 91, 0, input);
				throw nvae;
			}
			switch (alt91) {
				case 1 :
					// CivlCParser.g:1196: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_parameterTypeList7882);
					parameterTypeListWithoutScope358=parameterTypeListWithoutScope();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, parameterTypeListWithoutScope358.getTree());

					}
					break;
				case 2 :
					// CivlCParser.g:1197:4: {...}? parameterTypeListWithScope
					{
					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_parameterTypeListWithScope_in_parameterTypeList7889);
					parameterTypeListWithScope359=parameterTypeListWithScope();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, parameterTypeListWithScope359.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:1200: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 parameterTypeListWithoutScope360 =null;



			Symbols_stack.peek().types = new HashSet<String>();
			Symbols_stack.peek().enumerationConstants = new HashSet<String>();
			Symbols_stack.peek().isFunctionDefinition = false;

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


			pushFollow(FOLLOW_parameterTypeListWithoutScope_in_parameterTypeListWithScope7910);
			parameterTypeListWithoutScope360=parameterTypeListWithoutScope();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) adaptor.addChild(root_0, parameterTypeListWithoutScope360.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:1210: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 COMMA362=null;
		Token ELLIPSIS363=null;
		ParserRuleReturnScope parameterList361 =null;

		Object COMMA362_tree=null;
		Object ELLIPSIS363_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:1211:5: ( parameterList ( -> ^( PARAMETER_TYPE_LIST parameterList ABSENT ) | COMMA ELLIPSIS -> ^( PARAMETER_TYPE_LIST parameterList ELLIPSIS ) ) )
			// CivlCParser.g:1211:7: parameterList ( -> ^( PARAMETER_TYPE_LIST parameterList ABSENT ) | COMMA ELLIPSIS -> ^( PARAMETER_TYPE_LIST parameterList ELLIPSIS ) )
			{
			pushFollow(FOLLOW_parameterList_in_parameterTypeListWithoutScope7924);
			parameterList361=parameterList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_parameterList.add(parameterList361.getTree());
			// CivlCParser.g:1212:7: ( -> ^( PARAMETER_TYPE_LIST parameterList ABSENT ) | COMMA ELLIPSIS -> ^( PARAMETER_TYPE_LIST parameterList ELLIPSIS ) )
			int alt92=2;
			int LA92_0 = input.LA(1);
			if ( (LA92_0==RPAREN) ) {
				alt92=1;
			}
			else if ( (LA92_0==COMMA) ) {
				alt92=2;
			}

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

			switch (alt92) {
				case 1 :
					// CivlCParser.g:1212: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();
					// 1212:9: -> ^( PARAMETER_TYPE_LIST parameterList ABSENT )
					{
						// CivlCParser.g:1212: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:1213:9: COMMA ELLIPSIS
					{
					COMMA362=(Token)match(input,COMMA,FOLLOW_COMMA_in_parameterTypeListWithoutScope7952); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA362);

					ELLIPSIS363=(Token)match(input,ELLIPSIS,FOLLOW_ELLIPSIS_in_parameterTypeListWithoutScope7954); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ELLIPSIS.add(ELLIPSIS363);

					// AST REWRITE
					// elements: ELLIPSIS, 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();
					// 1214:9: -> ^( PARAMETER_TYPE_LIST parameterList ELLIPSIS )
					{
						// CivlCParser.g:1214: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:1222: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 COMMA365=null;
		ParserRuleReturnScope parameterDeclaration364 =null;
		ParserRuleReturnScope parameterDeclaration366 =null;

		Object COMMA365_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_parameterDeclaration=new RewriteRuleSubtreeStream(adaptor,"rule parameterDeclaration");

		try {
			// CivlCParser.g:1223:5: ( parameterDeclaration ( COMMA parameterDeclaration )* -> ^( PARAMETER_LIST ( parameterDeclaration )+ ) )
			// CivlCParser.g:1223:7: parameterDeclaration ( COMMA parameterDeclaration )*
			{
			pushFollow(FOLLOW_parameterDeclaration_in_parameterList7999);
			parameterDeclaration364=parameterDeclaration();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_parameterDeclaration.add(parameterDeclaration364.getTree());
			// CivlCParser.g:1223:28: ( COMMA parameterDeclaration )*
			loop93:
			while (true) {
				int alt93=2;
				int LA93_0 = input.LA(1);
				if ( (LA93_0==COMMA) ) {
					int LA93_2 = input.LA(2);
					if ( (LA93_2==IDENTIFIER||(LA93_2 >= ABSTRACT && LA93_2 <= ALIGNAS)||(LA93_2 >= ATOMIC && LA93_2 <= AUTO)||LA93_2==BOOL||LA93_2==CHAR||(LA93_2 >= COMPLEX && LA93_2 <= CONST)||(LA93_2 >= DEVICE && LA93_2 <= DIFFERENTIABLE)||(LA93_2 >= DOMAIN && LA93_2 <= DOUBLE)||LA93_2==ENUM||(LA93_2 >= EXTERN && LA93_2 <= FATOMIC)||LA93_2==FLOAT||LA93_2==GLOBAL||(LA93_2 >= INLINE && LA93_2 <= INT)||(LA93_2 >= LONG && LA93_2 <= NORETURN)||LA93_2==OUTPUT||(LA93_2 >= PURE && LA93_2 <= RANGE)||(LA93_2 >= REAL && LA93_2 <= REGISTER)||LA93_2==RESTRICT||(LA93_2 >= SHARED && LA93_2 <= SIGNED)||LA93_2==STATE_F||LA93_2==STATIC||LA93_2==STRUCT||LA93_2==SYSTEM||(LA93_2 >= THREADLOCAL && LA93_2 <= TYPEOF)||(LA93_2 >= UNION && LA93_2 <= UNSIGNED)||(LA93_2 >= VOID && LA93_2 <= VOLATILE)) ) {
						alt93=1;
					}

				}

				switch (alt93) {
				case 1 :
					// CivlCParser.g:1223:29: COMMA parameterDeclaration
					{
					COMMA365=(Token)match(input,COMMA,FOLLOW_COMMA_in_parameterList8002); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA365);

					pushFollow(FOLLOW_parameterDeclaration_in_parameterList8004);
					parameterDeclaration366=parameterDeclaration();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_parameterDeclaration.add(parameterDeclaration366.getTree());
					}
					break;

				default :
					break loop93;
				}
			}

			// 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();
			// 1224:7: -> ^( PARAMETER_LIST ( parameterDeclaration )+ )
			{
				// CivlCParser.g:1224: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:1232: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 declarationSpecifiers367 =null;
		ParserRuleReturnScope declaratorOrAbstractDeclarator368 =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().hasTypeSpec = false;

		try {
			// CivlCParser.g:1238:5: ( declarationSpecifiers ( -> ^( PARAMETER_DECLARATION declarationSpecifiers ABSENT ) | declaratorOrAbstractDeclarator -> ^( PARAMETER_DECLARATION declarationSpecifiers declaratorOrAbstractDeclarator ) ) )
			// CivlCParser.g:1238:7: declarationSpecifiers ( -> ^( PARAMETER_DECLARATION declarationSpecifiers ABSENT ) | declaratorOrAbstractDeclarator -> ^( PARAMETER_DECLARATION declarationSpecifiers declaratorOrAbstractDeclarator ) )
			{
			pushFollow(FOLLOW_declarationSpecifiers_in_parameterDeclaration8050);
			declarationSpecifiers367=declarationSpecifiers();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_declarationSpecifiers.add(declarationSpecifiers367.getTree());
			// CivlCParser.g:1239:7: ( -> ^( PARAMETER_DECLARATION declarationSpecifiers ABSENT ) | declaratorOrAbstractDeclarator -> ^( PARAMETER_DECLARATION declarationSpecifiers declaratorOrAbstractDeclarator ) )
			int alt94=2;
			int LA94_0 = input.LA(1);
			if ( (LA94_0==COMMA||LA94_0==RPAREN) ) {
				alt94=1;
			}
			else if ( (LA94_0==IDENTIFIER||LA94_0==LPAREN||LA94_0==LSQUARE||LA94_0==STAR) ) {
				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:1239:11: 
					{
					// 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();
					// 1239:11: -> ^( PARAMETER_DECLARATION declarationSpecifiers ABSENT )
					{
						// CivlCParser.g:1239:14: ^( 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:1240:11: declaratorOrAbstractDeclarator
					{
					pushFollow(FOLLOW_declaratorOrAbstractDeclarator_in_parameterDeclaration8082);
					declaratorOrAbstractDeclarator368=declaratorOrAbstractDeclarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declaratorOrAbstractDeclarator.add(declaratorOrAbstractDeclarator368.getTree());
					// AST REWRITE
					// elements: declarationSpecifiers, declaratorOrAbstractDeclarator
					// 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();
					// 1241:11: -> ^( PARAMETER_DECLARATION declarationSpecifiers declaratorOrAbstractDeclarator )
					{
						// CivlCParser.g:1241:14: ^( 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:1249: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 declarator369 =null;
		ParserRuleReturnScope abstractDeclarator370 =null;


		try {
			// CivlCParser.g:1250:2: ( ( declarator )=> declarator | abstractDeclarator )
			int alt95=2;
			int LA95_0 = input.LA(1);
			if ( (LA95_0==IDENTIFIER) && (synpred29_CivlCParser())) {
				alt95=1;
			}
			else if ( (LA95_0==LPAREN) ) {
				int LA95_2 = input.LA(2);
				if ( (synpred29_CivlCParser()) ) {
					alt95=1;
				}
				else if ( (true) ) {
					alt95=2;
				}

			}
			else if ( (LA95_0==STAR) ) {
				int LA95_3 = input.LA(2);
				if ( (synpred29_CivlCParser()) ) {
					alt95=1;
				}
				else if ( (true) ) {
					alt95=2;
				}

			}
			else if ( (LA95_0==LSQUARE) ) {
				alt95=2;
			}

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

			switch (alt95) {
				case 1 :
					// CivlCParser.g:1250:4: ( declarator )=> declarator
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_declarator_in_declaratorOrAbstractDeclarator8147);
					declarator369=declarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, declarator369.getTree());

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


					pushFollow(FOLLOW_abstractDeclarator_in_declaratorOrAbstractDeclarator8152);
					abstractDeclarator370=abstractDeclarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, abstractDeclarator370.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:1259: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 IDENTIFIER371=null;
		Token COMMA372=null;
		Token IDENTIFIER373=null;

		Object IDENTIFIER371_tree=null;
		Object COMMA372_tree=null;
		Object IDENTIFIER373_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");

		try {
			// CivlCParser.g:1260:5: ( IDENTIFIER ( COMMA IDENTIFIER )* -> ^( IDENTIFIER_LIST ( IDENTIFIER )+ ) )
			// CivlCParser.g:1260:7: IDENTIFIER ( COMMA IDENTIFIER )*
			{
			IDENTIFIER371=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_identifierList8169); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER371);

			// CivlCParser.g:1260:18: ( COMMA IDENTIFIER )*
			loop96:
			while (true) {
				int alt96=2;
				int LA96_0 = input.LA(1);
				if ( (LA96_0==COMMA) ) {
					alt96=1;
				}

				switch (alt96) {
				case 1 :
					// CivlCParser.g:1260:20: COMMA IDENTIFIER
					{
					COMMA372=(Token)match(input,COMMA,FOLLOW_COMMA_in_identifierList8173); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA372);

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

					}
					break;

				default :
					break loop96;
				}
			}

			// 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();
			// 1260:40: -> ^( IDENTIFIER_LIST ( IDENTIFIER )+ )
			{
				// CivlCParser.g:1260:43: ^( 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:1269: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 specifierQualifierList374 =null;
		ParserRuleReturnScope abstractDeclarator375 =null;

		RewriteRuleSubtreeStream stream_specifierQualifierList=new RewriteRuleSubtreeStream(adaptor,"rule specifierQualifierList");
		RewriteRuleSubtreeStream stream_abstractDeclarator=new RewriteRuleSubtreeStream(adaptor,"rule abstractDeclarator");

		try {
			// CivlCParser.g:1270:5: ( specifierQualifierList ( -> ^( TYPE_NAME specifierQualifierList ABSENT ) | abstractDeclarator -> ^( TYPE_NAME specifierQualifierList abstractDeclarator ) ) )
			// CivlCParser.g:1270:7: specifierQualifierList ( -> ^( TYPE_NAME specifierQualifierList ABSENT ) | abstractDeclarator -> ^( TYPE_NAME specifierQualifierList abstractDeclarator ) )
			{
			pushFollow(FOLLOW_specifierQualifierList_in_typeName8206);
			specifierQualifierList374=specifierQualifierList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_specifierQualifierList.add(specifierQualifierList374.getTree());
			// CivlCParser.g:1271:7: ( -> ^( TYPE_NAME specifierQualifierList ABSENT ) | abstractDeclarator -> ^( TYPE_NAME specifierQualifierList abstractDeclarator ) )
			int alt97=2;
			int LA97_0 = input.LA(1);
			if ( (LA97_0==EOF||LA97_0==COLON||LA97_0==IDENTIFIER||LA97_0==RPAREN) ) {
				alt97=1;
			}
			else if ( (LA97_0==LPAREN||LA97_0==LSQUARE||LA97_0==STAR) ) {
				alt97=2;
			}

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

			switch (alt97) {
				case 1 :
					// CivlCParser.g:1271: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();
					// 1271:9: -> ^( TYPE_NAME specifierQualifierList ABSENT )
					{
						// CivlCParser.g:1271: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:1272:9: abstractDeclarator
					{
					pushFollow(FOLLOW_abstractDeclarator_in_typeName8234);
					abstractDeclarator375=abstractDeclarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_abstractDeclarator.add(abstractDeclarator375.getTree());
					// AST REWRITE
					// elements: specifierQualifierList, 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();
					// 1273:9: -> ^( TYPE_NAME specifierQualifierList abstractDeclarator )
					{
						// CivlCParser.g:1273: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:1285: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 pointer376 =null;
		ParserRuleReturnScope directAbstractDeclarator377 =null;
		ParserRuleReturnScope pointer378 =null;
		ParserRuleReturnScope directAbstractDeclarator379 =null;

		RewriteRuleSubtreeStream stream_pointer=new RewriteRuleSubtreeStream(adaptor,"rule pointer");
		RewriteRuleSubtreeStream stream_directAbstractDeclarator=new RewriteRuleSubtreeStream(adaptor,"rule directAbstractDeclarator");

		try {
			// CivlCParser.g:1286:5: ( pointer -> ^( ABSTRACT_DECLARATOR pointer ABSENT ) | directAbstractDeclarator -> ^( ABSTRACT_DECLARATOR ABSENT directAbstractDeclarator ) | pointer directAbstractDeclarator -> ^( ABSTRACT_DECLARATOR pointer directAbstractDeclarator ) )
			int alt98=3;
			alt98 = dfa98.predict(input);
			switch (alt98) {
				case 1 :
					// CivlCParser.g:1286:7: pointer
					{
					pushFollow(FOLLOW_pointer_in_abstractDeclarator8279);
					pointer376=pointer();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_pointer.add(pointer376.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();
					// 1287:7: -> ^( ABSTRACT_DECLARATOR pointer ABSENT )
					{
						// CivlCParser.g:1287: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:1288:7: directAbstractDeclarator
					{
					pushFollow(FOLLOW_directAbstractDeclarator_in_abstractDeclarator8303);
					directAbstractDeclarator377=directAbstractDeclarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_directAbstractDeclarator.add(directAbstractDeclarator377.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();
					// 1289:7: -> ^( ABSTRACT_DECLARATOR ABSENT directAbstractDeclarator )
					{
						// CivlCParser.g:1289: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:1290:7: pointer directAbstractDeclarator
					{
					pushFollow(FOLLOW_pointer_in_abstractDeclarator8327);
					pointer378=pointer();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_pointer.add(pointer378.getTree());
					pushFollow(FOLLOW_directAbstractDeclarator_in_abstractDeclarator8329);
					directAbstractDeclarator379=directAbstractDeclarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_directAbstractDeclarator.add(directAbstractDeclarator379.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();
					// 1291:7: -> ^( ABSTRACT_DECLARATOR pointer directAbstractDeclarator )
					{
						// CivlCParser.g:1291: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:1304: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 LPAREN380=null;
		Token RPAREN382=null;
		ParserRuleReturnScope abstractDeclarator381 =null;
		ParserRuleReturnScope directAbstractDeclaratorSuffix383 =null;
		ParserRuleReturnScope directAbstractDeclaratorSuffix384 =null;

		Object LPAREN380_tree=null;
		Object RPAREN382_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:1305:5: ( LPAREN abstractDeclarator RPAREN ( directAbstractDeclaratorSuffix )* -> ^( DIRECT_ABSTRACT_DECLARATOR abstractDeclarator ( directAbstractDeclaratorSuffix )* ) | ( directAbstractDeclaratorSuffix )+ -> ^( DIRECT_ABSTRACT_DECLARATOR ABSENT ( directAbstractDeclaratorSuffix )+ ) )
			int alt101=2;
			int LA101_0 = input.LA(1);
			if ( (LA101_0==LPAREN) ) {
				int LA101_1 = input.LA(2);
				if ( (LA101_1==LPAREN||LA101_1==LSQUARE||LA101_1==STAR) ) {
					alt101=1;
				}
				else if ( (LA101_1==IDENTIFIER||LA101_1==RPAREN||(LA101_1 >= ABSTRACT && LA101_1 <= ALIGNAS)||(LA101_1 >= ATOMIC && LA101_1 <= AUTO)||LA101_1==BOOL||LA101_1==CHAR||(LA101_1 >= COMPLEX && LA101_1 <= CONST)||(LA101_1 >= DEVICE && LA101_1 <= DIFFERENTIABLE)||(LA101_1 >= DOMAIN && LA101_1 <= DOUBLE)||LA101_1==ENUM||(LA101_1 >= EXTERN && LA101_1 <= FATOMIC)||LA101_1==FLOAT||LA101_1==GLOBAL||(LA101_1 >= INLINE && LA101_1 <= INT)||(LA101_1 >= LONG && LA101_1 <= NORETURN)||LA101_1==OUTPUT||(LA101_1 >= PURE && LA101_1 <= RANGE)||(LA101_1 >= REAL && LA101_1 <= REGISTER)||LA101_1==RESTRICT||(LA101_1 >= SHARED && LA101_1 <= SIGNED)||LA101_1==STATE_F||LA101_1==STATIC||LA101_1==STRUCT||LA101_1==SYSTEM||(LA101_1 >= THREADLOCAL && LA101_1 <= TYPEOF)||(LA101_1 >= UNION && LA101_1 <= UNSIGNED)||(LA101_1 >= VOID && LA101_1 <= VOLATILE)) ) {
					alt101=2;
				}

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

			}
			else if ( (LA101_0==LSQUARE) ) {
				alt101=2;
			}

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

			switch (alt101) {
				case 1 :
					// CivlCParser.g:1305:7: LPAREN abstractDeclarator RPAREN ( directAbstractDeclaratorSuffix )*
					{
					LPAREN380=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_directAbstractDeclarator8364); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN380);

					pushFollow(FOLLOW_abstractDeclarator_in_directAbstractDeclarator8366);
					abstractDeclarator381=abstractDeclarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_abstractDeclarator.add(abstractDeclarator381.getTree());
					RPAREN382=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_directAbstractDeclarator8368); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN382);

					// CivlCParser.g:1305:40: ( directAbstractDeclaratorSuffix )*
					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:1305:40: directAbstractDeclaratorSuffix
							{
							pushFollow(FOLLOW_directAbstractDeclaratorSuffix_in_directAbstractDeclarator8370);
							directAbstractDeclaratorSuffix383=directAbstractDeclaratorSuffix();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_directAbstractDeclaratorSuffix.add(directAbstractDeclaratorSuffix383.getTree());
							}
							break;

						default :
							break loop99;
						}
					}

					// 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();
					// 1306:7: -> ^( DIRECT_ABSTRACT_DECLARATOR abstractDeclarator ( directAbstractDeclaratorSuffix )* )
					{
						// CivlCParser.g:1306: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:1307: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:1308:7: ( directAbstractDeclaratorSuffix )+
					{
					// CivlCParser.g:1308:7: ( directAbstractDeclaratorSuffix )+
					int cnt100=0;
					loop100:
					while (true) {
						int alt100=2;
						int LA100_0 = input.LA(1);
						if ( (LA100_0==LPAREN||LA100_0==LSQUARE) ) {
							alt100=1;
						}

						switch (alt100) {
						case 1 :
							// CivlCParser.g:1308:7: directAbstractDeclaratorSuffix
							{
							pushFollow(FOLLOW_directAbstractDeclaratorSuffix_in_directAbstractDeclarator8407);
							directAbstractDeclaratorSuffix384=directAbstractDeclaratorSuffix();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_directAbstractDeclaratorSuffix.add(directAbstractDeclaratorSuffix384.getTree());
							}
							break;

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

					// 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();
					// 1309:7: -> ^( DIRECT_ABSTRACT_DECLARATOR ABSENT ( directAbstractDeclaratorSuffix )+ )
					{
						// CivlCParser.g:1309: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:1335: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 IDENTIFIER385=null;

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

		try {
			// CivlCParser.g:1336:5: ({...}? IDENTIFIER -> ^( TYPEDEF_NAME IDENTIFIER ) )
			// CivlCParser.g:1336:7: {...}? IDENTIFIER
			{
			if ( !((isTypeName(input.LT(1).getText()))) ) {
				if (state.backtracking>0) {state.failed=true; return retval;}
				throw new FailedPredicateException(input, "typedefName", "isTypeName(input.LT(1).getText())");
			}
			IDENTIFIER385=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_typedefName8447); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER385);

			// 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();
			// 1337:7: -> ^( TYPEDEF_NAME IDENTIFIER )
			{
				// CivlCParser.g:1337: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);
			}
		}
		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:1351: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 LSQUARE386=null;
		Token RSQUARE389=null;
		Token STATIC390=null;
		Token RSQUARE393=null;
		Token STATIC395=null;
		Token RSQUARE397=null;
		Token STAR398=null;
		Token RSQUARE399=null;
		Token LPAREN400=null;
		Token RPAREN402=null;
		Token RPAREN403=null;
		ParserRuleReturnScope typeQualifierList_opt387 =null;
		ParserRuleReturnScope assignmentExpression_opt388 =null;
		ParserRuleReturnScope typeQualifierList_opt391 =null;
		ParserRuleReturnScope assignmentExpression392 =null;
		ParserRuleReturnScope typeQualifierList394 =null;
		ParserRuleReturnScope assignmentExpression396 =null;
		ParserRuleReturnScope parameterTypeList401 =null;

		Object LSQUARE386_tree=null;
		Object RSQUARE389_tree=null;
		Object STATIC390_tree=null;
		Object RSQUARE393_tree=null;
		Object STATIC395_tree=null;
		Object RSQUARE397_tree=null;
		Object STAR398_tree=null;
		Object RSQUARE399_tree=null;
		Object LPAREN400_tree=null;
		Object RPAREN402_tree=null;
		Object RPAREN403_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:1352: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 alt104=2;
			int LA104_0 = input.LA(1);
			if ( (LA104_0==LSQUARE) ) {
				alt104=1;
			}
			else if ( (LA104_0==LPAREN) ) {
				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:1352: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 ) )
					{
					LSQUARE386=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_directAbstractDeclaratorSuffix8480); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE386);

					// CivlCParser.g:1353: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 alt102=4;
					alt102 = dfa102.predict(input);
					switch (alt102) {
						case 1 :
							// CivlCParser.g:1353:9: typeQualifierList_opt assignmentExpression_opt RSQUARE
							{
							pushFollow(FOLLOW_typeQualifierList_opt_in_directAbstractDeclaratorSuffix8490);
							typeQualifierList_opt387=typeQualifierList_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_typeQualifierList_opt.add(typeQualifierList_opt387.getTree());
							pushFollow(FOLLOW_assignmentExpression_opt_in_directAbstractDeclaratorSuffix8492);
							assignmentExpression_opt388=assignmentExpression_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_assignmentExpression_opt.add(assignmentExpression_opt388.getTree());
							RSQUARE389=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_directAbstractDeclaratorSuffix8494); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE389);

							// AST REWRITE
							// elements: typeQualifierList_opt, assignmentExpression_opt, 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();
							// 1354:9: -> ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt assignmentExpression_opt )
							{
								// CivlCParser.g:1354: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:1356:9: STATIC typeQualifierList_opt assignmentExpression RSQUARE
							{
							STATIC390=(Token)match(input,STATIC,FOLLOW_STATIC_in_directAbstractDeclaratorSuffix8539); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_STATIC.add(STATIC390);

							pushFollow(FOLLOW_typeQualifierList_opt_in_directAbstractDeclaratorSuffix8541);
							typeQualifierList_opt391=typeQualifierList_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_typeQualifierList_opt.add(typeQualifierList_opt391.getTree());
							pushFollow(FOLLOW_assignmentExpression_in_directAbstractDeclaratorSuffix8543);
							assignmentExpression392=assignmentExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression392.getTree());
							RSQUARE393=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_directAbstractDeclaratorSuffix8545); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE393);

							// AST REWRITE
							// elements: STATIC, assignmentExpression, typeQualifierList_opt, 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();
							// 1357:9: -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList_opt assignmentExpression )
							{
								// CivlCParser.g:1357: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:1359:9: typeQualifierList STATIC assignmentExpression RSQUARE
							{
							pushFollow(FOLLOW_typeQualifierList_in_directAbstractDeclaratorSuffix8590);
							typeQualifierList394=typeQualifierList();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_typeQualifierList.add(typeQualifierList394.getTree());
							STATIC395=(Token)match(input,STATIC,FOLLOW_STATIC_in_directAbstractDeclaratorSuffix8592); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_STATIC.add(STATIC395);

							pushFollow(FOLLOW_assignmentExpression_in_directAbstractDeclaratorSuffix8594);
							assignmentExpression396=assignmentExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression396.getTree());
							RSQUARE397=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_directAbstractDeclaratorSuffix8596); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE397);

							// AST REWRITE
							// elements: STATIC, assignmentExpression, 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();
							// 1360:9: -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList assignmentExpression )
							{
								// CivlCParser.g:1360: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:1361:9: STAR RSQUARE
							{
							STAR398=(Token)match(input,STAR,FOLLOW_STAR_in_directAbstractDeclaratorSuffix8628); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_STAR.add(STAR398);

							RSQUARE399=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_directAbstractDeclaratorSuffix8630); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE399);

							// 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();
							// 1362:9: -> ^( ARRAY_SUFFIX LSQUARE ABSENT ABSENT STAR )
							{
								// CivlCParser.g:1362: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:1364:7: LPAREN ( parameterTypeList RPAREN -> ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN ) | RPAREN -> ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN ) )
					{
					LPAREN400=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_directAbstractDeclaratorSuffix8668); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN400);

					// CivlCParser.g:1365:7: ( 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==IDENTIFIER||(LA103_0 >= ABSTRACT && LA103_0 <= ALIGNAS)||(LA103_0 >= ATOMIC && LA103_0 <= AUTO)||LA103_0==BOOL||LA103_0==CHAR||(LA103_0 >= COMPLEX && LA103_0 <= CONST)||(LA103_0 >= DEVICE && LA103_0 <= DIFFERENTIABLE)||(LA103_0 >= DOMAIN && LA103_0 <= DOUBLE)||LA103_0==ENUM||(LA103_0 >= EXTERN && LA103_0 <= FATOMIC)||LA103_0==FLOAT||LA103_0==GLOBAL||(LA103_0 >= INLINE && LA103_0 <= INT)||(LA103_0 >= LONG && LA103_0 <= NORETURN)||LA103_0==OUTPUT||(LA103_0 >= PURE && LA103_0 <= RANGE)||(LA103_0 >= REAL && LA103_0 <= REGISTER)||LA103_0==RESTRICT||(LA103_0 >= SHARED && LA103_0 <= SIGNED)||LA103_0==STATE_F||LA103_0==STATIC||LA103_0==STRUCT||LA103_0==SYSTEM||(LA103_0 >= THREADLOCAL && LA103_0 <= TYPEOF)||(LA103_0 >= UNION && LA103_0 <= UNSIGNED)||(LA103_0 >= VOID && LA103_0 <= VOLATILE)) ) {
						alt103=1;
					}
					else if ( (LA103_0==RPAREN) ) {
						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:1365:9: parameterTypeList RPAREN
							{
							pushFollow(FOLLOW_parameterTypeList_in_directAbstractDeclaratorSuffix8678);
							parameterTypeList401=parameterTypeList();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_parameterTypeList.add(parameterTypeList401.getTree());
							RPAREN402=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_directAbstractDeclaratorSuffix8680); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN402);

							// AST REWRITE
							// elements: LPAREN, parameterTypeList, 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();
							// 1366:9: -> ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN )
							{
								// CivlCParser.g:1366: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:1367:9: RPAREN
							{
							RPAREN403=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_directAbstractDeclaratorSuffix8710); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN403);

							// 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();
							// 1368:9: -> ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN )
							{
								// CivlCParser.g:1368: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:1373: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 LCURLY405=null;
		Token RCURLY407=null;
		Token COMMA408=null;
		Token RCURLY409=null;
		ParserRuleReturnScope assignmentExpression404 =null;
		ParserRuleReturnScope initializerList406 =null;

		Object LCURLY405_tree=null;
		Object RCURLY407_tree=null;
		Object COMMA408_tree=null;
		Object RCURLY409_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:1374:5: ( assignmentExpression -> ^( SCALAR_INITIALIZER assignmentExpression ) | LCURLY initializerList ( RCURLY | COMMA RCURLY ) -> initializerList )
			int alt106=2;
			int LA106_0 = input.LA(1);
			if ( (LA106_0==AMPERSAND||LA106_0==CHARACTER_CONSTANT||LA106_0==ELLIPSIS||LA106_0==FLOATING_CONSTANT||LA106_0==IDENTIFIER||LA106_0==INTEGER_CONSTANT||LA106_0==LPAREN||LA106_0==MINUSMINUS||LA106_0==NOT||LA106_0==PLUS||LA106_0==PLUSPLUS||LA106_0==STAR||(LA106_0 >= STRING_LITERAL && LA106_0 <= SUB)||LA106_0==TILDE||LA106_0==ALIGNOF||LA106_0==BIG_O||LA106_0==CALLS||LA106_0==DERIV||LA106_0==GENERIC||LA106_0==HERE||LA106_0==PROCNULL||LA106_0==RESULT||(LA106_0 >= SCOPEOF && LA106_0 <= SELF)||(LA106_0 >= SIZEOF && LA106_0 <= SPAWN)||LA106_0==STATE_NULL||LA106_0==VALUE_AT||LA106_0==SUM) ) {
				alt106=1;
			}
			else if ( (LA106_0==LCURLY) ) {
				alt106=2;
			}

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

			switch (alt106) {
				case 1 :
					// CivlCParser.g:1374:7: assignmentExpression
					{
					pushFollow(FOLLOW_assignmentExpression_in_initializer8757);
					assignmentExpression404=assignmentExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression404.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();
					// 1374:28: -> ^( SCALAR_INITIALIZER assignmentExpression )
					{
						// CivlCParser.g:1374: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:1375:7: LCURLY initializerList ( RCURLY | COMMA RCURLY )
					{
					LCURLY405=(Token)match(input,LCURLY,FOLLOW_LCURLY_in_initializer8773); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LCURLY.add(LCURLY405);

					pushFollow(FOLLOW_initializerList_in_initializer8775);
					initializerList406=initializerList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_initializerList.add(initializerList406.getTree());
					// CivlCParser.g:1376:9: ( RCURLY | COMMA RCURLY )
					int alt105=2;
					int LA105_0 = input.LA(1);
					if ( (LA105_0==RCURLY) ) {
						alt105=1;
					}
					else if ( (LA105_0==COMMA) ) {
						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:1376:13: RCURLY
							{
							RCURLY407=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_initializer8789); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY407);

							}
							break;
						case 2 :
							// CivlCParser.g:1377:13: COMMA RCURLY
							{
							COMMA408=(Token)match(input,COMMA,FOLLOW_COMMA_in_initializer8803); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_COMMA.add(COMMA408);

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

							}
							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();
					// 1379: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:1383: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 COMMA411=null;
		ParserRuleReturnScope designatedInitializer410 =null;
		ParserRuleReturnScope designatedInitializer412 =null;

		Object COMMA411_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_designatedInitializer=new RewriteRuleSubtreeStream(adaptor,"rule designatedInitializer");

		try {
			// CivlCParser.g:1384:5: ( designatedInitializer ( COMMA designatedInitializer )* -> ^( INITIALIZER_LIST ( designatedInitializer )+ ) )
			// CivlCParser.g:1384:7: designatedInitializer ( COMMA designatedInitializer )*
			{
			pushFollow(FOLLOW_designatedInitializer_in_initializerList8844);
			designatedInitializer410=designatedInitializer();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_designatedInitializer.add(designatedInitializer410.getTree());
			// CivlCParser.g:1384:29: ( COMMA designatedInitializer )*
			loop107:
			while (true) {
				int alt107=2;
				int LA107_0 = input.LA(1);
				if ( (LA107_0==COMMA) ) {
					int LA107_2 = input.LA(2);
					if ( (LA107_2==AMPERSAND||LA107_2==CHARACTER_CONSTANT||LA107_2==DOT||LA107_2==ELLIPSIS||LA107_2==FLOATING_CONSTANT||LA107_2==IDENTIFIER||LA107_2==INTEGER_CONSTANT||LA107_2==LCURLY||LA107_2==LPAREN||LA107_2==LSQUARE||LA107_2==MINUSMINUS||LA107_2==NOT||LA107_2==PLUS||LA107_2==PLUSPLUS||LA107_2==STAR||(LA107_2 >= STRING_LITERAL && LA107_2 <= SUB)||LA107_2==TILDE||LA107_2==ALIGNOF||LA107_2==BIG_O||LA107_2==CALLS||LA107_2==DERIV||LA107_2==GENERIC||LA107_2==HERE||LA107_2==PROCNULL||LA107_2==RESULT||(LA107_2 >= SCOPEOF && LA107_2 <= SELF)||(LA107_2 >= SIZEOF && LA107_2 <= SPAWN)||LA107_2==STATE_NULL||LA107_2==VALUE_AT||LA107_2==SUM) ) {
						alt107=1;
					}

				}

				switch (alt107) {
				case 1 :
					// CivlCParser.g:1384:30: COMMA designatedInitializer
					{
					COMMA411=(Token)match(input,COMMA,FOLLOW_COMMA_in_initializerList8847); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA411);

					pushFollow(FOLLOW_designatedInitializer_in_initializerList8849);
					designatedInitializer412=designatedInitializer();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_designatedInitializer.add(designatedInitializer412.getTree());
					}
					break;

				default :
					break loop107;
				}
			}

			// 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();
			// 1385:7: -> ^( INITIALIZER_LIST ( designatedInitializer )+ )
			{
				// CivlCParser.g:1385: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:1388: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 initializer413 =null;
		ParserRuleReturnScope designation414 =null;
		ParserRuleReturnScope initializer415 =null;

		RewriteRuleSubtreeStream stream_designation=new RewriteRuleSubtreeStream(adaptor,"rule designation");
		RewriteRuleSubtreeStream stream_initializer=new RewriteRuleSubtreeStream(adaptor,"rule initializer");

		try {
			// CivlCParser.g:1389:2: ( initializer -> ^( DESIGNATED_INITIALIZER ABSENT initializer ) | designation initializer -> ^( DESIGNATED_INITIALIZER designation initializer ) )
			int alt108=2;
			int LA108_0 = input.LA(1);
			if ( (LA108_0==AMPERSAND||LA108_0==CHARACTER_CONSTANT||LA108_0==ELLIPSIS||LA108_0==FLOATING_CONSTANT||LA108_0==IDENTIFIER||LA108_0==INTEGER_CONSTANT||LA108_0==LCURLY||LA108_0==LPAREN||LA108_0==MINUSMINUS||LA108_0==NOT||LA108_0==PLUS||LA108_0==PLUSPLUS||LA108_0==STAR||(LA108_0 >= STRING_LITERAL && LA108_0 <= SUB)||LA108_0==TILDE||LA108_0==ALIGNOF||LA108_0==BIG_O||LA108_0==CALLS||LA108_0==DERIV||LA108_0==GENERIC||LA108_0==HERE||LA108_0==PROCNULL||LA108_0==RESULT||(LA108_0 >= SCOPEOF && LA108_0 <= SELF)||(LA108_0 >= SIZEOF && LA108_0 <= SPAWN)||LA108_0==STATE_NULL||LA108_0==VALUE_AT||LA108_0==SUM) ) {
				alt108=1;
			}
			else if ( (LA108_0==DOT||LA108_0==LSQUARE) ) {
				alt108=2;
			}

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

			switch (alt108) {
				case 1 :
					// CivlCParser.g:1389:4: initializer
					{
					pushFollow(FOLLOW_initializer_in_designatedInitializer8880);
					initializer413=initializer();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_initializer.add(initializer413.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();
					// 1390:4: -> ^( DESIGNATED_INITIALIZER ABSENT initializer )
					{
						// CivlCParser.g:1390: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:1391:4: designation initializer
					{
					pushFollow(FOLLOW_designation_in_designatedInitializer8898);
					designation414=designation();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_designation.add(designation414.getTree());
					pushFollow(FOLLOW_initializer_in_designatedInitializer8900);
					initializer415=initializer();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_initializer.add(initializer415.getTree());
					// AST REWRITE
					// elements: designation, 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();
					// 1392:4: -> ^( DESIGNATED_INITIALIZER designation initializer )
					{
						// CivlCParser.g:1392: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:1396: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 ASSIGN417=null;
		ParserRuleReturnScope designatorList416 =null;

		Object ASSIGN417_tree=null;
		RewriteRuleTokenStream stream_ASSIGN=new RewriteRuleTokenStream(adaptor,"token ASSIGN");
		RewriteRuleSubtreeStream stream_designatorList=new RewriteRuleSubtreeStream(adaptor,"rule designatorList");

		try {
			// CivlCParser.g:1397:5: ( designatorList ASSIGN -> ^( DESIGNATION designatorList ) )
			// CivlCParser.g:1397:7: designatorList ASSIGN
			{
			pushFollow(FOLLOW_designatorList_in_designation8929);
			designatorList416=designatorList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_designatorList.add(designatorList416.getTree());
			ASSIGN417=(Token)match(input,ASSIGN,FOLLOW_ASSIGN_in_designation8931); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ASSIGN.add(ASSIGN417);

			// 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();
			// 1397:29: -> ^( DESIGNATION designatorList )
			{
				// CivlCParser.g:1397: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:1401: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 designator418 =null;


		try {
			// CivlCParser.g:1402:5: ( ( designator )+ )
			// CivlCParser.g:1402:7: ( designator )+
			{
			root_0 = (Object)adaptor.nil();


			// CivlCParser.g:1402:7: ( designator )+
			int cnt109=0;
			loop109:
			while (true) {
				int alt109=2;
				int LA109_0 = input.LA(1);
				if ( (LA109_0==DOT||LA109_0==LSQUARE) ) {
					alt109=1;
				}

				switch (alt109) {
				case 1 :
					// CivlCParser.g:1402:7: designator
					{
					pushFollow(FOLLOW_designator_in_designatorList8958);
					designator418=designator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, designator418.getTree());

					}
					break;

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

			}

			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:1406: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 LSQUARE419=null;
		Token RSQUARE421=null;
		Token DOT422=null;
		Token IDENTIFIER423=null;
		ParserRuleReturnScope constantExpression420 =null;

		Object LSQUARE419_tree=null;
		Object RSQUARE421_tree=null;
		Object DOT422_tree=null;
		Object IDENTIFIER423_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:1407:5: ( LSQUARE constantExpression RSQUARE -> ^( ARRAY_ELEMENT_DESIGNATOR constantExpression ) | DOT IDENTIFIER -> ^( FIELD_DESIGNATOR IDENTIFIER ) )
			int alt110=2;
			int LA110_0 = input.LA(1);
			if ( (LA110_0==LSQUARE) ) {
				alt110=1;
			}
			else if ( (LA110_0==DOT) ) {
				alt110=2;
			}

			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:1407:7: LSQUARE constantExpression RSQUARE
					{
					LSQUARE419=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_designator8978); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE419);

					pushFollow(FOLLOW_constantExpression_in_designator8980);
					constantExpression420=constantExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_constantExpression.add(constantExpression420.getTree());
					RSQUARE421=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_designator8982); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE421);

					// 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();
					// 1408:7: -> ^( ARRAY_ELEMENT_DESIGNATOR constantExpression )
					{
						// CivlCParser.g:1408: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:1409:7: DOT IDENTIFIER
					{
					DOT422=(Token)match(input,DOT,FOLLOW_DOT_in_designator9004); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_DOT.add(DOT422);

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

					// 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();
					// 1410:7: -> ^( FIELD_DESIGNATOR IDENTIFIER )
					{
						// CivlCParser.g:1410: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:1414: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 STATICASSERT424=null;
		Token LPAREN425=null;
		Token COMMA427=null;
		Token STRING_LITERAL428=null;
		Token RPAREN429=null;
		Token SEMI430=null;
		ParserRuleReturnScope constantExpression426 =null;

		Object STATICASSERT424_tree=null;
		Object LPAREN425_tree=null;
		Object COMMA427_tree=null;
		Object STRING_LITERAL428_tree=null;
		Object RPAREN429_tree=null;
		Object SEMI430_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:1415:5: ( STATICASSERT LPAREN constantExpression COMMA STRING_LITERAL RPAREN SEMI -> ^( STATICASSERT constantExpression STRING_LITERAL ) )
			// CivlCParser.g:1415:7: STATICASSERT LPAREN constantExpression COMMA STRING_LITERAL RPAREN SEMI
			{
			STATICASSERT424=(Token)match(input,STATICASSERT,FOLLOW_STATICASSERT_in_staticAssertDeclaration9039); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_STATICASSERT.add(STATICASSERT424);

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

			pushFollow(FOLLOW_constantExpression_in_staticAssertDeclaration9043);
			constantExpression426=constantExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_constantExpression.add(constantExpression426.getTree());
			COMMA427=(Token)match(input,COMMA,FOLLOW_COMMA_in_staticAssertDeclaration9045); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_COMMA.add(COMMA427);

			STRING_LITERAL428=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_staticAssertDeclaration9047); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_STRING_LITERAL.add(STRING_LITERAL428);

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

			SEMI430=(Token)match(input,SEMI,FOLLOW_SEMI_in_staticAssertDeclaration9057); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_SEMI.add(SEMI430);

			// AST REWRITE
			// elements: constantExpression, STRING_LITERAL, STATICASSERT
			// 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:7: -> ^( STATICASSERT constantExpression STRING_LITERAL )
			{
				// CivlCParser.g:1417: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:1421: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 DOMAIN431=null;
		Token LPAREN432=null;
		Token INTEGER_CONSTANT433=null;
		Token RPAREN434=null;

		Object DOMAIN431_tree=null;
		Object LPAREN432_tree=null;
		Object INTEGER_CONSTANT433_tree=null;
		Object RPAREN434_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:1422:2: ( DOMAIN ( -> ^( DOMAIN ) | LPAREN INTEGER_CONSTANT RPAREN -> ^( DOMAIN INTEGER_CONSTANT RPAREN ) ) )
			// CivlCParser.g:1422:4: DOMAIN ( -> ^( DOMAIN ) | LPAREN INTEGER_CONSTANT RPAREN -> ^( DOMAIN INTEGER_CONSTANT RPAREN ) )
			{
			DOMAIN431=(Token)match(input,DOMAIN,FOLLOW_DOMAIN_in_domainSpecifier9089); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_DOMAIN.add(DOMAIN431);

			// CivlCParser.g:1423:4: ( -> ^( DOMAIN ) | LPAREN INTEGER_CONSTANT RPAREN -> ^( DOMAIN INTEGER_CONSTANT RPAREN ) )
			int alt111=2;
			int LA111_0 = input.LA(1);
			if ( (LA111_0==EOF||(LA111_0 >= COLON && LA111_0 <= COMMA)||LA111_0==IDENTIFIER||LA111_0==LSQUARE||LA111_0==RPAREN||LA111_0==SEMI||LA111_0==STAR||(LA111_0 >= ABSTRACT && LA111_0 <= ALIGNAS)||(LA111_0 >= ATOMIC && LA111_0 <= AUTO)||LA111_0==BOOL||LA111_0==CHAR||(LA111_0 >= COMPLEX && LA111_0 <= CONST)||(LA111_0 >= DEVICE && LA111_0 <= DIFFERENTIABLE)||(LA111_0 >= DOMAIN && LA111_0 <= DOUBLE)||LA111_0==ENUM||(LA111_0 >= EXTERN && LA111_0 <= FATOMIC)||LA111_0==FLOAT||LA111_0==GLOBAL||(LA111_0 >= INLINE && LA111_0 <= INT)||(LA111_0 >= LONG && LA111_0 <= NORETURN)||LA111_0==OUTPUT||(LA111_0 >= PURE && LA111_0 <= RANGE)||(LA111_0 >= REAL && LA111_0 <= REGISTER)||LA111_0==RESTRICT||(LA111_0 >= SHARED && LA111_0 <= SIGNED)||LA111_0==STATE_F||LA111_0==STATIC||LA111_0==STRUCT||LA111_0==SYSTEM||(LA111_0 >= THREADLOCAL && LA111_0 <= TYPEOF)||(LA111_0 >= UNION && LA111_0 <= UNSIGNED)||(LA111_0 >= VOID && LA111_0 <= VOLATILE)) ) {
				alt111=1;
			}
			else if ( (LA111_0==LPAREN) ) {
				int LA111_2 = input.LA(2);
				if ( (LA111_2==INTEGER_CONSTANT) ) {
					alt111=2;
				}
				else if ( (LA111_2==IDENTIFIER||LA111_2==LPAREN||LA111_2==LSQUARE||LA111_2==RPAREN||LA111_2==STAR||(LA111_2 >= ABSTRACT && LA111_2 <= ALIGNAS)||(LA111_2 >= ATOMIC && LA111_2 <= AUTO)||LA111_2==BOOL||LA111_2==CHAR||(LA111_2 >= COMPLEX && LA111_2 <= CONST)||(LA111_2 >= DEVICE && LA111_2 <= DIFFERENTIABLE)||(LA111_2 >= DOMAIN && LA111_2 <= DOUBLE)||LA111_2==ENUM||(LA111_2 >= EXTERN && LA111_2 <= FATOMIC)||LA111_2==FLOAT||LA111_2==GLOBAL||(LA111_2 >= INLINE && LA111_2 <= INT)||(LA111_2 >= LONG && LA111_2 <= NORETURN)||LA111_2==OUTPUT||(LA111_2 >= PURE && LA111_2 <= RANGE)||(LA111_2 >= REAL && LA111_2 <= REGISTER)||LA111_2==RESTRICT||(LA111_2 >= SHARED && LA111_2 <= SIGNED)||LA111_2==STATE_F||LA111_2==STATIC||LA111_2==STRUCT||LA111_2==SYSTEM||(LA111_2 >= THREADLOCAL && LA111_2 <= TYPEOF)||(LA111_2 >= UNION && LA111_2 <= UNSIGNED)||(LA111_2 >= VOID && LA111_2 <= VOLATILE)) ) {
					alt111=1;
				}

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

			}

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

			switch (alt111) {
				case 1 :
					// CivlCParser.g:1423: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();
					// 1423:6: -> ^( DOMAIN )
					{
						// CivlCParser.g:1423: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:1424:6: LPAREN INTEGER_CONSTANT RPAREN
					{
					LPAREN432=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_domainSpecifier9107); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN432);

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

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

					// AST REWRITE
					// elements: RPAREN, INTEGER_CONSTANT, 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();
					// 1424:37: -> ^( DOMAIN INTEGER_CONSTANT RPAREN )
					{
						// CivlCParser.g:1424: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:1429: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_TYPE435=null;

		Object MEM_TYPE435_tree=null;
		RewriteRuleTokenStream stream_MEM_TYPE=new RewriteRuleTokenStream(adaptor,"token MEM_TYPE");

		try {
			// CivlCParser.g:1430:5: ( MEM_TYPE -> ^( MEM_TYPE ) )
			// CivlCParser.g:1430:7: MEM_TYPE
			{
			MEM_TYPE435=(Token)match(input,MEM_TYPE,FOLLOW_MEM_TYPE_in_memSpecifier9142); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_MEM_TYPE.add(MEM_TYPE435);

			// 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();
			// 1430:16: -> ^( MEM_TYPE )
			{
				// CivlCParser.g:1430: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:1436: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 labeledStatement436 =null;
		ParserRuleReturnScope compoundStatement437 =null;
		ParserRuleReturnScope expressionStatement438 =null;
		ParserRuleReturnScope selectionStatement439 =null;
		ParserRuleReturnScope iterationStatement440 =null;
		ParserRuleReturnScope jumpStatement441 =null;
		ParserRuleReturnScope whenStatement442 =null;
		ParserRuleReturnScope chooseStatement443 =null;
		ParserRuleReturnScope atomicStatement444 =null;
		ParserRuleReturnScope runStatement445 =null;
		ParserRuleReturnScope withStatement446 =null;
		ParserRuleReturnScope updateStatement447 =null;
		ParserRuleReturnScope asmStatement448 =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:1437: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 alt112=13;
			switch ( input.LA(1) ) {
			case IDENTIFIER:
				{
				int LA112_1 = input.LA(2);
				if ( (LA112_1==COLON) ) {
					alt112=1;
				}
				else if ( ((LA112_1 >= AMPERSAND && LA112_1 <= AND)||(LA112_1 >= ARROW && LA112_1 <= BITXOREQ)||LA112_1==COMMA||(LA112_1 >= DIV && LA112_1 <= DOTDOT)||LA112_1==EQUALS||(LA112_1 >= GT && LA112_1 <= GTE)||LA112_1==IMPLIES||LA112_1==LEXCON||LA112_1==LPAREN||(LA112_1 >= LSQUARE && LA112_1 <= LTE)||(LA112_1 >= MINUSMINUS && LA112_1 <= NEQ)||LA112_1==OR||(LA112_1 >= PLUS && LA112_1 <= PLUSPLUS)||LA112_1==QMARK||(LA112_1 >= SEMI && LA112_1 <= STAREQ)||(LA112_1 >= SUB && LA112_1 <= SUBEQ)) ) {
					alt112=3;
				}

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

				}
				break;
			case CASE:
			case DEFAULT:
				{
				alt112=1;
				}
				break;
			case LCURLY:
				{
				alt112=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:
			case SUM:
				{
				alt112=3;
				}
				break;
			case IF:
			case SWITCH:
				{
				alt112=4;
				}
				break;
			case CIVLFOR:
			case DO:
			case FOR:
			case PARFOR:
			case WHILE:
				{
				alt112=5;
				}
				break;
			case BREAK:
			case CONTINUE:
			case GOTO:
			case RETURN:
				{
				alt112=6;
				}
				break;
			case WHEN:
				{
				alt112=7;
				}
				break;
			case CHOOSE:
				{
				alt112=8;
				}
				break;
			case CIVLATOMIC:
				{
				alt112=9;
				}
				break;
			case RUN:
				{
				alt112=10;
				}
				break;
			case WITH:
				{
				alt112=11;
				}
				break;
			case UPDATE:
				{
				alt112=12;
				}
				break;
			case ASM:
				{
				alt112=13;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 112, 0, input);
				throw nvae;
			}
			switch (alt112) {
				case 1 :
					// CivlCParser.g:1437:7: labeledStatement
					{
					pushFollow(FOLLOW_labeledStatement_in_statement9166);
					labeledStatement436=labeledStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_labeledStatement.add(labeledStatement436.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();
					// 1437:24: -> ^( STATEMENT labeledStatement )
					{
						// CivlCParser.g:1437: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:1438:7: compoundStatement
					{
					pushFollow(FOLLOW_compoundStatement_in_statement9182);
					compoundStatement437=compoundStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_compoundStatement.add(compoundStatement437.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();
					// 1438:25: -> ^( STATEMENT compoundStatement )
					{
						// CivlCParser.g:1438: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:1439:7: expressionStatement
					{
					pushFollow(FOLLOW_expressionStatement_in_statement9198);
					expressionStatement438=expressionStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expressionStatement.add(expressionStatement438.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();
					// 1439:27: -> ^( STATEMENT expressionStatement )
					{
						// CivlCParser.g:1439: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:1440:7: selectionStatement
					{
					pushFollow(FOLLOW_selectionStatement_in_statement9214);
					selectionStatement439=selectionStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_selectionStatement.add(selectionStatement439.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();
					// 1440:26: -> ^( STATEMENT selectionStatement )
					{
						// CivlCParser.g:1440: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:1441:7: iterationStatement
					{
					pushFollow(FOLLOW_iterationStatement_in_statement9230);
					iterationStatement440=iterationStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_iterationStatement.add(iterationStatement440.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();
					// 1441:26: -> ^( STATEMENT iterationStatement )
					{
						// CivlCParser.g:1441: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:1442:7: jumpStatement
					{
					pushFollow(FOLLOW_jumpStatement_in_statement9246);
					jumpStatement441=jumpStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_jumpStatement.add(jumpStatement441.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();
					// 1442:21: -> ^( STATEMENT jumpStatement )
					{
						// CivlCParser.g:1442: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:1443:7: whenStatement
					{
					pushFollow(FOLLOW_whenStatement_in_statement9262);
					whenStatement442=whenStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_whenStatement.add(whenStatement442.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();
					// 1443:21: -> ^( STATEMENT whenStatement )
					{
						// CivlCParser.g:1443: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:1444:7: chooseStatement
					{
					pushFollow(FOLLOW_chooseStatement_in_statement9278);
					chooseStatement443=chooseStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_chooseStatement.add(chooseStatement443.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();
					// 1444:23: -> ^( STATEMENT chooseStatement )
					{
						// CivlCParser.g:1444: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:1445:7: atomicStatement
					{
					pushFollow(FOLLOW_atomicStatement_in_statement9294);
					atomicStatement444=atomicStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_atomicStatement.add(atomicStatement444.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();
					// 1445:23: -> ^( STATEMENT atomicStatement )
					{
						// CivlCParser.g:1445: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:1446:7: runStatement
					{
					pushFollow(FOLLOW_runStatement_in_statement9310);
					runStatement445=runStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_runStatement.add(runStatement445.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();
					// 1446:20: -> ^( STATEMENT runStatement )
					{
						// CivlCParser.g:1446: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:1447:7: withStatement
					{
					pushFollow(FOLLOW_withStatement_in_statement9326);
					withStatement446=withStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_withStatement.add(withStatement446.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();
					// 1447:21: -> ^( STATEMENT withStatement )
					{
						// CivlCParser.g:1447: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:1448:7: updateStatement
					{
					pushFollow(FOLLOW_updateStatement_in_statement9342);
					updateStatement447=updateStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_updateStatement.add(updateStatement447.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();
					// 1448:23: -> ^( STATEMENT updateStatement )
					{
						// CivlCParser.g:1448: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:1449:7: asmStatement
					{
					pushFollow(FOLLOW_asmStatement_in_statement9358);
					asmStatement448=asmStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_asmStatement.add(asmStatement448.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();
					// 1449:20: -> ^( STATEMENT asmStatement )
					{
						// CivlCParser.g:1449: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:1452: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 statement449 =null;
		ParserRuleReturnScope pragma450 =null;
		ParserRuleReturnScope statement451 =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:1459:2: ( statement | ( pragma )+ statement -> ^( STATEMENT ^( COMPOUND_STATEMENT ABSENT ^( BLOCK_ITEM_LIST ( pragma )+ statement ) ABSENT ) ) )
			int alt114=2;
			int LA114_0 = input.LA(1);
			if ( (LA114_0==AMPERSAND||LA114_0==CHARACTER_CONSTANT||LA114_0==ELLIPSIS||LA114_0==FLOATING_CONSTANT||(LA114_0 >= IDENTIFIER && LA114_0 <= IF)||LA114_0==INTEGER_CONSTANT||LA114_0==LCURLY||LA114_0==LPAREN||LA114_0==MINUSMINUS||LA114_0==NOT||LA114_0==PLUS||LA114_0==PLUSPLUS||LA114_0==SEMI||LA114_0==STAR||(LA114_0 >= STRING_LITERAL && LA114_0 <= SUB)||LA114_0==TILDE||(LA114_0 >= ALIGNOF && LA114_0 <= ASM)||LA114_0==BIG_O||(LA114_0 >= BREAK && LA114_0 <= CASE)||(LA114_0 >= CHOOSE && LA114_0 <= CIVLFOR)||(LA114_0 >= CONTINUE && LA114_0 <= DEFAULT)||LA114_0==DERIV||LA114_0==DO||LA114_0==EXISTS||(LA114_0 >= FOR && LA114_0 <= GENERIC)||LA114_0==GOTO||LA114_0==HERE||LA114_0==PARFOR||LA114_0==PROCNULL||(LA114_0 >= RESULT && LA114_0 <= SELF)||(LA114_0 >= SIZEOF && LA114_0 <= SPAWN)||LA114_0==STATE_NULL||LA114_0==SWITCH||LA114_0==UNIFORM||(LA114_0 >= UPDATE && LA114_0 <= VALUE_AT)||(LA114_0 >= WHEN && LA114_0 <= WITH)||LA114_0==SUM) ) {
				alt114=1;
			}
			else if ( (LA114_0==PPRAGMA) ) {
				alt114=2;
			}

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

			switch (alt114) {
				case 1 :
					// CivlCParser.g:1459:4: statement
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_statement_in_statementWithScope9390);
					statement449=statement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, statement449.getTree());

					}
					break;
				case 2 :
					// CivlCParser.g:1460:4: ( pragma )+ statement
					{
					// CivlCParser.g:1460:4: ( pragma )+
					int cnt113=0;
					loop113:
					while (true) {
						int alt113=2;
						int LA113_0 = input.LA(1);
						if ( (LA113_0==PPRAGMA) ) {
							alt113=1;
						}

						switch (alt113) {
						case 1 :
							// CivlCParser.g:1460:4: pragma
							{
							pushFollow(FOLLOW_pragma_in_statementWithScope9395);
							pragma450=pragma();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_pragma.add(pragma450.getTree());
							}
							break;

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

					pushFollow(FOLLOW_statement_in_statementWithScope9398);
					statement451=statement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statement.add(statement451.getTree());
					// AST REWRITE
					// elements: statement, pragma
					// 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();
					// 1460:22: -> ^( STATEMENT ^( COMPOUND_STATEMENT ABSENT ^( BLOCK_ITEM_LIST ( pragma )+ statement ) ABSENT ) )
					{
						// CivlCParser.g:1460: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:1460: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:1460: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:1479: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 IDENTIFIER452=null;
		Token COLON453=null;
		Token CASE455=null;
		Token COLON457=null;
		Token DEFAULT459=null;
		Token COLON460=null;
		ParserRuleReturnScope statement454 =null;
		ParserRuleReturnScope constantExpression456 =null;
		ParserRuleReturnScope statement458 =null;
		ParserRuleReturnScope statement461 =null;

		Object IDENTIFIER452_tree=null;
		Object COLON453_tree=null;
		Object CASE455_tree=null;
		Object COLON457_tree=null;
		Object DEFAULT459_tree=null;
		Object COLON460_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:1480: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 alt115=3;
			switch ( input.LA(1) ) {
			case IDENTIFIER:
				{
				alt115=1;
				}
				break;
			case CASE:
				{
				alt115=2;
				}
				break;
			case DEFAULT:
				{
				alt115=3;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 115, 0, input);
				throw nvae;
			}
			switch (alt115) {
				case 1 :
					// CivlCParser.g:1480:7: IDENTIFIER COLON statement
					{
					IDENTIFIER452=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_labeledStatement9437); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER452);

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

					pushFollow(FOLLOW_statement_in_labeledStatement9441);
					statement454=statement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statement.add(statement454.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();
					// 1481:7: -> ^( IDENTIFIER_LABELED_STATEMENT IDENTIFIER statement )
					{
						// CivlCParser.g:1481: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:1482:7: CASE constantExpression COLON statement
					{
					CASE455=(Token)match(input,CASE,FOLLOW_CASE_in_labeledStatement9465); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_CASE.add(CASE455);

					pushFollow(FOLLOW_constantExpression_in_labeledStatement9467);
					constantExpression456=constantExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_constantExpression.add(constantExpression456.getTree());
					COLON457=(Token)match(input,COLON,FOLLOW_COLON_in_labeledStatement9469); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COLON.add(COLON457);

					pushFollow(FOLLOW_statement_in_labeledStatement9471);
					statement458=statement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statement.add(statement458.getTree());
					// AST REWRITE
					// elements: CASE, statement, 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();
					// 1483:7: -> ^( CASE_LABELED_STATEMENT CASE constantExpression statement )
					{
						// CivlCParser.g:1483: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:1484:7: DEFAULT COLON statement
					{
					DEFAULT459=(Token)match(input,DEFAULT,FOLLOW_DEFAULT_in_labeledStatement9497); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_DEFAULT.add(DEFAULT459);

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

					pushFollow(FOLLOW_statement_in_labeledStatement9501);
					statement461=statement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statement.add(statement461.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();
					// 1485:7: -> ^( DEFAULT_LABELED_STATEMENT DEFAULT statement )
					{
						// CivlCParser.g:1485: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:1494: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 LCURLY462=null;
		Token RCURLY463=null;
		Token RCURLY465=null;
		ParserRuleReturnScope blockItemList464 =null;

		Object LCURLY462_tree=null;
		Object RCURLY463_tree=null;
		Object RCURLY465_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().hasTypeSpec = false;

		try {
			// CivlCParser.g:1504:5: ( LCURLY ( RCURLY -> ^( COMPOUND_STATEMENT LCURLY ABSENT RCURLY ) | blockItemList RCURLY -> ^( COMPOUND_STATEMENT LCURLY blockItemList RCURLY ) ) )
			// CivlCParser.g:1504:7: LCURLY ( RCURLY -> ^( COMPOUND_STATEMENT LCURLY ABSENT RCURLY ) | blockItemList RCURLY -> ^( COMPOUND_STATEMENT LCURLY blockItemList RCURLY ) )
			{
			LCURLY462=(Token)match(input,LCURLY,FOLLOW_LCURLY_in_compoundStatement9551); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LCURLY.add(LCURLY462);

			// CivlCParser.g:1505:7: ( RCURLY -> ^( COMPOUND_STATEMENT LCURLY ABSENT RCURLY ) | blockItemList RCURLY -> ^( COMPOUND_STATEMENT LCURLY blockItemList RCURLY ) )
			int alt116=2;
			int LA116_0 = input.LA(1);
			if ( (LA116_0==RCURLY) ) {
				alt116=1;
			}
			else 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)||LA116_0==SUM) ) {
				alt116=2;
			}

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

			switch (alt116) {
				case 1 :
					// CivlCParser.g:1505:9: RCURLY
					{
					RCURLY463=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_compoundStatement9561); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY463);

					// 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();
					// 1506:9: -> ^( COMPOUND_STATEMENT LCURLY ABSENT RCURLY )
					{
						// CivlCParser.g:1506: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:1507:9: blockItemList RCURLY
					{
					pushFollow(FOLLOW_blockItemList_in_compoundStatement9591);
					blockItemList464=blockItemList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_blockItemList.add(blockItemList464.getTree());
					RCURLY465=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_compoundStatement9593); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY465);

					// AST REWRITE
					// elements: LCURLY, RCURLY, 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();
					// 1508:9: -> ^( COMPOUND_STATEMENT LCURLY blockItemList RCURLY )
					{
						// CivlCParser.g:1508: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:1513: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 blockItem466 =null;

		RewriteRuleSubtreeStream stream_blockItem=new RewriteRuleSubtreeStream(adaptor,"rule blockItem");

		try {
			// CivlCParser.g:1514:5: ( ( blockItem )+ -> ^( BLOCK_ITEM_LIST ( blockItem )+ ) )
			// CivlCParser.g:1514:7: ( blockItem )+
			{
			// CivlCParser.g:1514:7: ( blockItem )+
			int cnt117=0;
			loop117:
			while (true) {
				int alt117=2;
				int LA117_0 = input.LA(1);
				if ( (LA117_0==AMPERSAND||LA117_0==ANNOTATION_START||LA117_0==CHARACTER_CONSTANT||LA117_0==ELLIPSIS||LA117_0==FLOATING_CONSTANT||(LA117_0 >= IDENTIFIER && LA117_0 <= IF)||LA117_0==INLINE_ANNOTATION_START||LA117_0==INTEGER_CONSTANT||LA117_0==LCURLY||LA117_0==LPAREN||LA117_0==MINUSMINUS||LA117_0==NOT||LA117_0==PLUS||LA117_0==PLUSPLUS||LA117_0==SEMI||LA117_0==STAR||(LA117_0 >= STRING_LITERAL && LA117_0 <= SUB)||LA117_0==TILDE||(LA117_0 >= ABSTRACT && LA117_0 <= ASM)||(LA117_0 >= ATOMIC && LA117_0 <= BIG_O)||(LA117_0 >= BOOL && LA117_0 <= CASE)||(LA117_0 >= CHAR && LA117_0 <= CIVLFOR)||(LA117_0 >= COMPLEX && LA117_0 <= CONST)||(LA117_0 >= CONTINUE && LA117_0 <= DEFAULT)||(LA117_0 >= DERIV && LA117_0 <= DOUBLE)||(LA117_0 >= ENUM && LA117_0 <= EXISTS)||(LA117_0 >= EXTERN && LA117_0 <= FATOMIC)||(LA117_0 >= FLOAT && LA117_0 <= GOTO)||LA117_0==HERE||(LA117_0 >= INLINE && LA117_0 <= INT)||(LA117_0 >= LONG && LA117_0 <= NORETURN)||LA117_0==OUTPUT||LA117_0==PARFOR||(LA117_0 >= PPRAGMA && LA117_0 <= RANGE)||(LA117_0 >= REAL && LA117_0 <= REGISTER)||(LA117_0 >= RESTRICT && LA117_0 <= SELF)||(LA117_0 >= SHARED && LA117_0 <= SYSTEM)||(LA117_0 >= THREADLOCAL && LA117_0 <= WITH)||LA117_0==SUM) ) {
					alt117=1;
				}

				switch (alt117) {
				case 1 :
					// CivlCParser.g:1514:7: blockItem
					{
					pushFollow(FOLLOW_blockItem_in_blockItemList9640);
					blockItem466=blockItem();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_blockItem.add(blockItem466.getTree());
					}
					break;

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

			// 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();
			// 1514:18: -> ^( BLOCK_ITEM_LIST ( blockItem )+ )
			{
				// CivlCParser.g:1514: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:1522: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 SEMI468=null;
		Token SEMI469=null;
		ParserRuleReturnScope expression467 =null;

		Object SEMI468_tree=null;
		Object SEMI469_tree=null;
		RewriteRuleTokenStream stream_SEMI=new RewriteRuleTokenStream(adaptor,"token SEMI");
		RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");

		try {
			// CivlCParser.g:1523:5: ( expression SEMI -> ^( EXPRESSION_STATEMENT expression SEMI ) | SEMI -> ^( EXPRESSION_STATEMENT ABSENT SEMI ) )
			int alt118=2;
			int LA118_0 = input.LA(1);
			if ( (LA118_0==AMPERSAND||LA118_0==CHARACTER_CONSTANT||LA118_0==ELLIPSIS||LA118_0==FLOATING_CONSTANT||LA118_0==IDENTIFIER||LA118_0==INTEGER_CONSTANT||LA118_0==LPAREN||LA118_0==MINUSMINUS||LA118_0==NOT||LA118_0==PLUS||LA118_0==PLUSPLUS||LA118_0==STAR||(LA118_0 >= STRING_LITERAL && LA118_0 <= SUB)||LA118_0==TILDE||LA118_0==ALIGNOF||LA118_0==BIG_O||LA118_0==CALLS||LA118_0==DERIV||LA118_0==EXISTS||(LA118_0 >= FORALL && LA118_0 <= GENERIC)||LA118_0==HERE||LA118_0==PROCNULL||LA118_0==RESULT||(LA118_0 >= SCOPEOF && LA118_0 <= SELF)||(LA118_0 >= SIZEOF && LA118_0 <= SPAWN)||LA118_0==STATE_NULL||LA118_0==UNIFORM||LA118_0==VALUE_AT||LA118_0==SUM) ) {
				alt118=1;
			}
			else if ( (LA118_0==SEMI) ) {
				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:1523:7: expression SEMI
					{
					pushFollow(FOLLOW_expression_in_expressionStatement9669);
					expression467=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression467.getTree());
					SEMI468=(Token)match(input,SEMI,FOLLOW_SEMI_in_expressionStatement9671); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SEMI.add(SEMI468);

					// 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();
					// 1523:23: -> ^( EXPRESSION_STATEMENT expression SEMI )
					{
						// CivlCParser.g:1523: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:1524:7: SEMI
					{
					SEMI469=(Token)match(input,SEMI,FOLLOW_SEMI_in_expressionStatement9689); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SEMI.add(SEMI469);

					// 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();
					// 1524:12: -> ^( EXPRESSION_STATEMENT ABSENT SEMI )
					{
						// CivlCParser.g:1524: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:1539: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 IF470=null;
		Token LPAREN471=null;
		Token RPAREN473=null;
		Token ELSE474=null;
		Token SWITCH475=null;
		Token LPAREN476=null;
		Token RPAREN478=null;
		ParserRuleReturnScope s1 =null;
		ParserRuleReturnScope s2 =null;
		ParserRuleReturnScope s =null;
		ParserRuleReturnScope expression472 =null;
		ParserRuleReturnScope expression477 =null;

		Object IF470_tree=null;
		Object LPAREN471_tree=null;
		Object RPAREN473_tree=null;
		Object ELSE474_tree=null;
		Object SWITCH475_tree=null;
		Object LPAREN476_tree=null;
		Object RPAREN478_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:1546: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 alt120=2;
			int LA120_0 = input.LA(1);
			if ( (LA120_0==IF) ) {
				alt120=1;
			}
			else if ( (LA120_0==SWITCH) ) {
				alt120=2;
			}

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

			switch (alt120) {
				case 1 :
					// CivlCParser.g:1546:7: IF LPAREN expression RPAREN s1= statementWithScope ( ( ELSE )=> ELSE s2= statementWithScope -> ^( IF expression $s1 $s2) | -> ^( IF expression $s1 ABSENT ) )
					{
					IF470=(Token)match(input,IF,FOLLOW_IF_in_selectionStatement9728); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IF.add(IF470);

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

					pushFollow(FOLLOW_expression_in_selectionStatement9732);
					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_selectionStatement9734); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN473);

					pushFollow(FOLLOW_statementWithScope_in_selectionStatement9738);
					s1=statementWithScope();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statementWithScope.add(s1.getTree());
					// CivlCParser.g:1547:9: ( ( ELSE )=> ELSE s2= statementWithScope -> ^( IF expression $s1 $s2) | -> ^( IF expression $s1 ABSENT ) )
					int alt119=2;
					int LA119_0 = input.LA(1);
					if ( (LA119_0==ELSE) ) {
						int LA119_1 = input.LA(2);
						if ( (synpred30_CivlCParser()) ) {
							alt119=1;
						}
						else if ( (true) ) {
							alt119=2;
						}

					}
					else if ( (LA119_0==EOF||LA119_0==AMPERSAND||LA119_0==ANNOTATION_START||LA119_0==CHARACTER_CONSTANT||LA119_0==ELLIPSIS||LA119_0==FLOATING_CONSTANT||(LA119_0 >= IDENTIFIER && LA119_0 <= IF)||LA119_0==INLINE_ANNOTATION_START||LA119_0==INTEGER_CONSTANT||LA119_0==LCURLY||LA119_0==LPAREN||LA119_0==MINUSMINUS||LA119_0==NOT||LA119_0==PLUS||LA119_0==PLUSPLUS||LA119_0==RCURLY||LA119_0==SEMI||LA119_0==STAR||(LA119_0 >= STRING_LITERAL && LA119_0 <= SUB)||LA119_0==TILDE||(LA119_0 >= ABSTRACT && LA119_0 <= ASM)||(LA119_0 >= ATOMIC && LA119_0 <= BIG_O)||(LA119_0 >= BOOL && LA119_0 <= CASE)||(LA119_0 >= CHAR && LA119_0 <= CIVLFOR)||(LA119_0 >= COMPLEX && LA119_0 <= CONST)||(LA119_0 >= CONTINUE && LA119_0 <= DEFAULT)||(LA119_0 >= DERIV && LA119_0 <= DOUBLE)||(LA119_0 >= ENUM && LA119_0 <= EXISTS)||(LA119_0 >= EXTERN && LA119_0 <= FATOMIC)||(LA119_0 >= FLOAT && LA119_0 <= GOTO)||LA119_0==HERE||(LA119_0 >= INLINE && LA119_0 <= INT)||(LA119_0 >= LONG && LA119_0 <= NORETURN)||LA119_0==OUTPUT||LA119_0==PARFOR||(LA119_0 >= PPRAGMA && LA119_0 <= RANGE)||(LA119_0 >= REAL && LA119_0 <= REGISTER)||(LA119_0 >= RESTRICT && LA119_0 <= SELF)||(LA119_0 >= SHARED && LA119_0 <= SYSTEM)||(LA119_0 >= THREADLOCAL && LA119_0 <= WITH)||LA119_0==SUM) ) {
						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:1547:11: ( ELSE )=> ELSE s2= statementWithScope
							{
							ELSE474=(Token)match(input,ELSE,FOLLOW_ELSE_in_selectionStatement9755); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_ELSE.add(ELSE474);

							pushFollow(FOLLOW_statementWithScope_in_selectionStatement9759);
							s2=statementWithScope();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_statementWithScope.add(s2.getTree());
							// AST REWRITE
							// elements: s1, IF, expression, s2
							// 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();
							// 1548:11: -> ^( IF expression $s1 $s2)
							{
								// CivlCParser.g:1548: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:1549:11: 
							{
							// AST REWRITE
							// elements: expression, IF, s1
							// 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();
							// 1549:11: -> ^( IF expression $s1 ABSENT )
							{
								// CivlCParser.g:1549: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:1551:7: SWITCH LPAREN expression RPAREN s= statementWithScope
					{
					SWITCH475=(Token)match(input,SWITCH,FOLLOW_SWITCH_in_selectionStatement9824); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SWITCH.add(SWITCH475);

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

					pushFollow(FOLLOW_expression_in_selectionStatement9828);
					expression477=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression477.getTree());
					RPAREN478=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_selectionStatement9830); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN478);

					pushFollow(FOLLOW_statementWithScope_in_selectionStatement9834);
					s=statementWithScope();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statementWithScope.add(s.getTree());
					// AST REWRITE
					// elements: expression, s, SWITCH
					// 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();
					// 1552:7: -> ^( SWITCH expression $s)
					{
						// CivlCParser.g:1552: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:1574: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 WHILE479=null;
		Token LPAREN480=null;
		Token RPAREN482=null;
		Token DO484=null;
		Token WHILE485=null;
		Token LPAREN486=null;
		Token RPAREN488=null;
		Token SEMI490=null;
		Token FOR491=null;
		Token LPAREN492=null;
		Token SEMI493=null;
		Token RPAREN494=null;
		Token SEMI495=null;
		Token SEMI496=null;
		Token RPAREN497=null;
		Token LPAREN498=null;
		Token COLON499=null;
		Token RPAREN500=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 expression481 =null;
		ParserRuleReturnScope invariant_opt483 =null;
		ParserRuleReturnScope expression487 =null;
		ParserRuleReturnScope invariant_opt489 =null;

		Object f_tree=null;
		Object WHILE479_tree=null;
		Object LPAREN480_tree=null;
		Object RPAREN482_tree=null;
		Object DO484_tree=null;
		Object WHILE485_tree=null;
		Object LPAREN486_tree=null;
		Object RPAREN488_tree=null;
		Object SEMI490_tree=null;
		Object FOR491_tree=null;
		Object LPAREN492_tree=null;
		Object SEMI493_tree=null;
		Object RPAREN494_tree=null;
		Object SEMI495_tree=null;
		Object SEMI496_tree=null;
		Object RPAREN497_tree=null;
		Object LPAREN498_tree=null;
		Object COLON499_tree=null;
		Object RPAREN500_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:1581: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 alt123=4;
			switch ( input.LA(1) ) {
			case WHILE:
				{
				alt123=1;
				}
				break;
			case DO:
				{
				alt123=2;
				}
				break;
			case FOR:
				{
				alt123=3;
				}
				break;
			case CIVLFOR:
			case PARFOR:
				{
				alt123=4;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 123, 0, input);
				throw nvae;
			}
			switch (alt123) {
				case 1 :
					// CivlCParser.g:1581:4: WHILE LPAREN expression RPAREN invariant_opt s= statementWithScope
					{
					WHILE479=(Token)match(input,WHILE,FOLLOW_WHILE_in_iterationStatement9877); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_WHILE.add(WHILE479);

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

					pushFollow(FOLLOW_expression_in_iterationStatement9881);
					expression481=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression481.getTree());
					RPAREN482=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_iterationStatement9883); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN482);

					pushFollow(FOLLOW_invariant_opt_in_iterationStatement9885);
					invariant_opt483=invariant_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_invariant_opt.add(invariant_opt483.getTree());
					pushFollow(FOLLOW_statementWithScope_in_iterationStatement9892);
					s=statementWithScope();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statementWithScope.add(s.getTree());
					// AST REWRITE
					// elements: s, expression, WHILE, invariant_opt
					// 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();
					// 1583:4: -> ^( WHILE expression $s invariant_opt )
					{
						// CivlCParser.g:1583: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:1584:4: DO s= statementWithScope WHILE LPAREN expression RPAREN invariant_opt SEMI
					{
					DO484=(Token)match(input,DO,FOLLOW_DO_in_iterationStatement9913); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_DO.add(DO484);

					pushFollow(FOLLOW_statementWithScope_in_iterationStatement9917);
					s=statementWithScope();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statementWithScope.add(s.getTree());
					WHILE485=(Token)match(input,WHILE,FOLLOW_WHILE_in_iterationStatement9919); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_WHILE.add(WHILE485);

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

					pushFollow(FOLLOW_expression_in_iterationStatement9923);
					expression487=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression487.getTree());
					RPAREN488=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_iterationStatement9925); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN488);

					pushFollow(FOLLOW_invariant_opt_in_iterationStatement9930);
					invariant_opt489=invariant_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_invariant_opt.add(invariant_opt489.getTree());
					SEMI490=(Token)match(input,SEMI,FOLLOW_SEMI_in_iterationStatement9932); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SEMI.add(SEMI490);

					// AST REWRITE
					// elements: DO, s, invariant_opt, 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();
					// 1586:4: -> ^( DO $s expression invariant_opt )
					{
						// CivlCParser.g:1586: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:1587: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) )
					{
					FOR491=(Token)match(input,FOR,FOLLOW_FOR_in_iterationStatement9953); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_FOR.add(FOR491);

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

					// CivlCParser.g:1588: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 alt121=2;
					alt121 = dfa121.predict(input);
					switch (alt121) {
						case 1 :
							// CivlCParser.g:1589:6: d= declaration e1= expression_opt SEMI e2= expression_opt RPAREN i= invariant_opt s= statementWithScope
							{
							pushFollow(FOLLOW_declaration_in_iterationStatement9969);
							d=declaration();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_declaration.add(d.getTree());
							pushFollow(FOLLOW_expression_opt_in_iterationStatement9973);
							e1=expression_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression_opt.add(e1.getTree());
							SEMI493=(Token)match(input,SEMI,FOLLOW_SEMI_in_iterationStatement9975); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_SEMI.add(SEMI493);

							pushFollow(FOLLOW_expression_opt_in_iterationStatement9979);
							e2=expression_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression_opt.add(e2.getTree());
							RPAREN494=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_iterationStatement9986); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN494);

							pushFollow(FOLLOW_invariant_opt_in_iterationStatement9990);
							i=invariant_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_invariant_opt.add(i.getTree());
							pushFollow(FOLLOW_statementWithScope_in_iterationStatement9994);
							s=statementWithScope();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_statementWithScope.add(s.getTree());
							// AST REWRITE
							// elements: FOR, s, e1, d, e2, 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();
							// 1591:6: -> ^( FOR $d $e1 $e2 $s $i)
							{
								// CivlCParser.g:1591: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:1592:6: e0= expression_opt SEMI e1= expression_opt SEMI e2= expression_opt RPAREN i= invariant_opt s= statementWithScope
							{
							pushFollow(FOLLOW_expression_opt_in_iterationStatement10029);
							e0=expression_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression_opt.add(e0.getTree());
							SEMI495=(Token)match(input,SEMI,FOLLOW_SEMI_in_iterationStatement10031); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_SEMI.add(SEMI495);

							pushFollow(FOLLOW_expression_opt_in_iterationStatement10035);
							e1=expression_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression_opt.add(e1.getTree());
							SEMI496=(Token)match(input,SEMI,FOLLOW_SEMI_in_iterationStatement10037); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_SEMI.add(SEMI496);

							pushFollow(FOLLOW_expression_opt_in_iterationStatement10046);
							e2=expression_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression_opt.add(e2.getTree());
							RPAREN497=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_iterationStatement10048); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN497);

							pushFollow(FOLLOW_invariant_opt_in_iterationStatement10052);
							i=invariant_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_invariant_opt.add(i.getTree());
							pushFollow(FOLLOW_statementWithScope_in_iterationStatement10061);
							s=statementWithScope();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_statementWithScope.add(s.getTree());
							// AST REWRITE
							// elements: e2, i, e0, e1, s, 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();
							// 1595:6: -> ^( FOR $e0 $e1 $e2 $s $i)
							{
								// CivlCParser.g:1595: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:1597:4: (f= CIVLFOR |f= PARFOR ) LPAREN t= typeName_opt v= identifierList COLON e= expression RPAREN i= invariant_opt s= statementWithScope
					{
					// CivlCParser.g:1597:4: (f= CIVLFOR |f= PARFOR )
					int alt122=2;
					int LA122_0 = input.LA(1);
					if ( (LA122_0==CIVLFOR) ) {
						alt122=1;
					}
					else if ( (LA122_0==PARFOR) ) {
						alt122=2;
					}

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

					switch (alt122) {
						case 1 :
							// CivlCParser.g:1597:5: f= CIVLFOR
							{
							f=(Token)match(input,CIVLFOR,FOLLOW_CIVLFOR_in_iterationStatement10100); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_CIVLFOR.add(f);

							}
							break;
						case 2 :
							// CivlCParser.g:1597:17: f= PARFOR
							{
							f=(Token)match(input,PARFOR,FOLLOW_PARFOR_in_iterationStatement10106); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_PARFOR.add(f);

							}
							break;

					}

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

					pushFollow(FOLLOW_typeName_opt_in_iterationStatement10118);
					t=typeName_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName_opt.add(t.getTree());
					pushFollow(FOLLOW_identifierList_in_iterationStatement10122);
					v=identifierList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_identifierList.add(v.getTree());
					COLON499=(Token)match(input,COLON,FOLLOW_COLON_in_iterationStatement10124); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COLON.add(COLON499);

					pushFollow(FOLLOW_expression_in_iterationStatement10128);
					e=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(e.getTree());
					RPAREN500=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_iterationStatement10130); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN500);

					pushFollow(FOLLOW_invariant_opt_in_iterationStatement10139);
					i=invariant_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_invariant_opt.add(i.getTree());
					pushFollow(FOLLOW_statementWithScope_in_iterationStatement10143);
					s=statementWithScope();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statementWithScope.add(s.getTree());
					// AST REWRITE
					// elements: f, e, t, v, i, s
					// 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();
					// 1600:6: -> ^( $f $t $v $e $s $i)
					{
						// CivlCParser.g:1600: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:1603: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 expression501 =null;


		try {
			// CivlCParser.g:1604:2: ( expression | -> ABSENT )
			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==INTEGER_CONSTANT||LA124_0==LPAREN||LA124_0==MINUSMINUS||LA124_0==NOT||LA124_0==PLUS||LA124_0==PLUSPLUS||LA124_0==STAR||(LA124_0 >= STRING_LITERAL && LA124_0 <= SUB)||LA124_0==TILDE||LA124_0==ALIGNOF||LA124_0==BIG_O||LA124_0==CALLS||LA124_0==DERIV||LA124_0==EXISTS||(LA124_0 >= FORALL && LA124_0 <= GENERIC)||LA124_0==HERE||LA124_0==PROCNULL||LA124_0==RESULT||(LA124_0 >= SCOPEOF && LA124_0 <= SELF)||(LA124_0 >= SIZEOF && LA124_0 <= SPAWN)||LA124_0==STATE_NULL||LA124_0==UNIFORM||LA124_0==VALUE_AT||LA124_0==SUM) ) {
				alt124=1;
			}
			else if ( (LA124_0==RPAREN||LA124_0==SEMI) ) {
				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:1604:4: expression
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_expression_in_expression_opt10181);
					expression501=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, expression501.getTree());

					}
					break;
				case 2 :
					// CivlCParser.g:1605: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();
					// 1605: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:1608: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 INVARIANT502=null;
		Token LPAREN503=null;
		Token RPAREN505=null;
		ParserRuleReturnScope expression504 =null;

		Object INVARIANT502_tree=null;
		Object LPAREN503_tree=null;
		Object RPAREN505_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:1609:2: ( -> ABSENT | INVARIANT LPAREN expression RPAREN -> ^( INVARIANT expression ) )
			int alt125=2;
			int LA125_0 = input.LA(1);
			if ( (LA125_0==AMPERSAND||LA125_0==CHARACTER_CONSTANT||LA125_0==ELLIPSIS||LA125_0==FLOATING_CONSTANT||(LA125_0 >= IDENTIFIER && LA125_0 <= IF)||LA125_0==INTEGER_CONSTANT||LA125_0==LCURLY||LA125_0==LPAREN||LA125_0==MINUSMINUS||LA125_0==NOT||LA125_0==PLUS||LA125_0==PLUSPLUS||LA125_0==SEMI||LA125_0==STAR||(LA125_0 >= STRING_LITERAL && LA125_0 <= SUB)||LA125_0==TILDE||(LA125_0 >= ALIGNOF && LA125_0 <= ASM)||LA125_0==BIG_O||(LA125_0 >= BREAK && LA125_0 <= CASE)||(LA125_0 >= CHOOSE && LA125_0 <= CIVLFOR)||(LA125_0 >= CONTINUE && LA125_0 <= DEFAULT)||LA125_0==DERIV||LA125_0==DO||LA125_0==EXISTS||(LA125_0 >= FOR && LA125_0 <= GENERIC)||LA125_0==GOTO||LA125_0==HERE||LA125_0==PARFOR||(LA125_0 >= PPRAGMA && LA125_0 <= PROCNULL)||(LA125_0 >= RESULT && LA125_0 <= SELF)||(LA125_0 >= SIZEOF && LA125_0 <= SPAWN)||LA125_0==STATE_NULL||LA125_0==SWITCH||LA125_0==UNIFORM||(LA125_0 >= UPDATE && LA125_0 <= VALUE_AT)||(LA125_0 >= WHEN && LA125_0 <= WITH)||LA125_0==SUM) ) {
				alt125=1;
			}
			else if ( (LA125_0==INVARIANT) ) {
				alt125=2;
			}

			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:1609: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();
					// 1609:4: -> ABSENT
					{
						adaptor.addChild(root_0, (Object)adaptor.create(ABSENT, "ABSENT"));
					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1610:4: INVARIANT LPAREN expression RPAREN
					{
					INVARIANT502=(Token)match(input,INVARIANT,FOLLOW_INVARIANT_in_invariant_opt10206); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_INVARIANT.add(INVARIANT502);

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

					pushFollow(FOLLOW_expression_in_invariant_opt10210);
					expression504=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression504.getTree());
					RPAREN505=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_invariant_opt10212); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN505);

					// 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();
					// 1611:3: -> ^( INVARIANT expression )
					{
						// CivlCParser.g:1611: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:1614: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 typeName506 =null;


		try {
			// CivlCParser.g:1615:2: ( typeName | -> ABSENT )
			int alt126=2;
			int LA126_0 = input.LA(1);
			if ( (LA126_0==ATOMIC||LA126_0==BOOL||LA126_0==CHAR||(LA126_0 >= COMPLEX && LA126_0 <= CONST)||(LA126_0 >= DOMAIN && LA126_0 <= DOUBLE)||LA126_0==ENUM||LA126_0==FLOAT||(LA126_0 >= INPUT && LA126_0 <= INT)||(LA126_0 >= LONG && LA126_0 <= MEM_TYPE)||LA126_0==OUTPUT||LA126_0==RANGE||LA126_0==REAL||LA126_0==RESTRICT||(LA126_0 >= SHORT && LA126_0 <= SIGNED)||LA126_0==STRUCT||LA126_0==TYPEOF||(LA126_0 >= UNION && LA126_0 <= UNSIGNED)||(LA126_0 >= VOID && LA126_0 <= VOLATILE)) ) {
				alt126=1;
			}
			else if ( (LA126_0==IDENTIFIER) ) {
				int LA126_2 = input.LA(2);
				if ( (LA126_2==IDENTIFIER||LA126_2==LPAREN||LA126_2==LSQUARE||LA126_2==STAR||LA126_2==ATOMIC||LA126_2==BOOL||LA126_2==CHAR||(LA126_2 >= COMPLEX && LA126_2 <= CONST)||(LA126_2 >= DOMAIN && LA126_2 <= DOUBLE)||LA126_2==ENUM||LA126_2==FLOAT||(LA126_2 >= INPUT && LA126_2 <= INT)||(LA126_2 >= LONG && LA126_2 <= MEM_TYPE)||LA126_2==OUTPUT||LA126_2==RANGE||LA126_2==REAL||LA126_2==RESTRICT||(LA126_2 >= SHORT && LA126_2 <= SIGNED)||LA126_2==STRUCT||LA126_2==TYPEOF||(LA126_2 >= UNION && LA126_2 <= UNSIGNED)||(LA126_2 >= VOID && LA126_2 <= VOLATILE)) ) {
					alt126=1;
				}
				else if ( ((LA126_2 >= COLON && LA126_2 <= COMMA)) ) {
					alt126=2;
				}

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

			}

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

			switch (alt126) {
				case 1 :
					// CivlCParser.g:1615:4: typeName
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_typeName_in_typeName_opt10233);
					typeName506=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, typeName506.getTree());

					}
					break;
				case 2 :
					// CivlCParser.g:1616: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();
					// 1616: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:1636: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 GOTO507=null;
		Token IDENTIFIER508=null;
		Token SEMI509=null;
		Token CONTINUE510=null;
		Token SEMI511=null;
		Token BREAK512=null;
		Token SEMI513=null;
		Token RETURN514=null;
		Token SEMI516=null;
		ParserRuleReturnScope expression_opt515 =null;

		Object GOTO507_tree=null;
		Object IDENTIFIER508_tree=null;
		Object SEMI509_tree=null;
		Object CONTINUE510_tree=null;
		Object SEMI511_tree=null;
		Object BREAK512_tree=null;
		Object SEMI513_tree=null;
		Object RETURN514_tree=null;
		Object SEMI516_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:1637:5: ( GOTO IDENTIFIER SEMI -> ^( GOTO IDENTIFIER SEMI ) | CONTINUE SEMI -> ^( CONTINUE SEMI ) | BREAK SEMI -> ^( BREAK SEMI ) | RETURN expression_opt SEMI -> ^( RETURN expression_opt SEMI ) )
			int alt127=4;
			switch ( input.LA(1) ) {
			case GOTO:
				{
				alt127=1;
				}
				break;
			case CONTINUE:
				{
				alt127=2;
				}
				break;
			case BREAK:
				{
				alt127=3;
				}
				break;
			case RETURN:
				{
				alt127=4;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 127, 0, input);
				throw nvae;
			}
			switch (alt127) {
				case 1 :
					// CivlCParser.g:1637:7: GOTO IDENTIFIER SEMI
					{
					GOTO507=(Token)match(input,GOTO,FOLLOW_GOTO_in_jumpStatement10256); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_GOTO.add(GOTO507);

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

					SEMI509=(Token)match(input,SEMI,FOLLOW_SEMI_in_jumpStatement10260); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SEMI.add(SEMI509);

					// AST REWRITE
					// elements: SEMI, IDENTIFIER, GOTO
					// 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:28: -> ^( GOTO IDENTIFIER SEMI )
					{
						// CivlCParser.g:1637: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:1638:7: CONTINUE SEMI
					{
					CONTINUE510=(Token)match(input,CONTINUE,FOLLOW_CONTINUE_in_jumpStatement10278); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_CONTINUE.add(CONTINUE510);

					SEMI511=(Token)match(input,SEMI,FOLLOW_SEMI_in_jumpStatement10280); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SEMI.add(SEMI511);

					// AST REWRITE
					// elements: CONTINUE, 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();
					// 1638:21: -> ^( CONTINUE SEMI )
					{
						// CivlCParser.g:1638: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:1639:7: BREAK SEMI
					{
					BREAK512=(Token)match(input,BREAK,FOLLOW_BREAK_in_jumpStatement10296); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_BREAK.add(BREAK512);

					SEMI513=(Token)match(input,SEMI,FOLLOW_SEMI_in_jumpStatement10298); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SEMI.add(SEMI513);

					// AST REWRITE
					// elements: SEMI, BREAK
					// 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();
					// 1639:18: -> ^( BREAK SEMI )
					{
						// CivlCParser.g:1639: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:1640:7: RETURN expression_opt SEMI
					{
					RETURN514=(Token)match(input,RETURN,FOLLOW_RETURN_in_jumpStatement10314); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RETURN.add(RETURN514);

					pushFollow(FOLLOW_expression_opt_in_jumpStatement10316);
					expression_opt515=expression_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression_opt.add(expression_opt515.getTree());
					SEMI516=(Token)match(input,SEMI,FOLLOW_SEMI_in_jumpStatement10318); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SEMI.add(SEMI516);

					// AST REWRITE
					// elements: RETURN, SEMI, expression_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();
					// 1640:34: -> ^( RETURN expression_opt SEMI )
					{
						// CivlCParser.g:1640: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:1653: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 PPRAGMA517=null;
		Token IDENTIFIER518=null;
		Token NEWLINE519=null;
		Token PPRAGMA520=null;
		Token IDENTIFIER521=null;
		Token NEWLINE523=null;
		ParserRuleReturnScope inlineList522 =null;

		Object PPRAGMA517_tree=null;
		Object IDENTIFIER518_tree=null;
		Object NEWLINE519_tree=null;
		Object PPRAGMA520_tree=null;
		Object IDENTIFIER521_tree=null;
		Object NEWLINE523_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:1654:5: ( PPRAGMA IDENTIFIER NEWLINE -> ^( PPRAGMA IDENTIFIER ^( TOKEN_LIST ) NEWLINE ) | PPRAGMA IDENTIFIER inlineList NEWLINE -> ^( PPRAGMA IDENTIFIER ^( TOKEN_LIST inlineList ) NEWLINE ) )
			int alt128=2;
			int LA128_0 = input.LA(1);
			if ( (LA128_0==PPRAGMA) ) {
				int LA128_1 = input.LA(2);
				if ( (LA128_1==IDENTIFIER) ) {
					int LA128_2 = input.LA(3);
					if ( (LA128_2==NEWLINE) ) {
						alt128=1;
					}
					else if ( ((LA128_2 >= AMPERSAND && LA128_2 <= NEQ)||(LA128_2 >= NOT && LA128_2 <= TYPE_QUALIFIER_LIST)) ) {
						alt128=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("", 128, 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("", 128, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

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

			switch (alt128) {
				case 1 :
					// CivlCParser.g:1654:7: PPRAGMA IDENTIFIER NEWLINE
					{
					PPRAGMA517=(Token)match(input,PPRAGMA,FOLLOW_PPRAGMA_in_pragma10347); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_PPRAGMA.add(PPRAGMA517);

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

					NEWLINE519=(Token)match(input,NEWLINE,FOLLOW_NEWLINE_in_pragma10351); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_NEWLINE.add(NEWLINE519);

					// AST REWRITE
					// elements: 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();
					// 1655:9: -> ^( PPRAGMA IDENTIFIER ^( TOKEN_LIST ) NEWLINE )
					{
						// CivlCParser.g:1655: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:1655: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:1656:7: PPRAGMA IDENTIFIER inlineList NEWLINE
					{
					PPRAGMA520=(Token)match(input,PPRAGMA,FOLLOW_PPRAGMA_in_pragma10381); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_PPRAGMA.add(PPRAGMA520);

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

					pushFollow(FOLLOW_inlineList_in_pragma10385);
					inlineList522=inlineList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_inlineList.add(inlineList522.getTree());
					NEWLINE523=(Token)match(input,NEWLINE,FOLLOW_NEWLINE_in_pragma10387); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_NEWLINE.add(NEWLINE523);

					// AST REWRITE
					// elements: NEWLINE, inlineList, 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();
					// 1657:9: -> ^( PPRAGMA IDENTIFIER ^( TOKEN_LIST inlineList ) NEWLINE )
					{
						// CivlCParser.g:1657: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:1657: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:1661: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 set524=null;

		Object set524_tree=null;

		try {
			// CivlCParser.g:1661:12: ( (~ NEWLINE )+ )
			// CivlCParser.g:1661:14: (~ NEWLINE )+
			{
			root_0 = (Object)adaptor.nil();


			// CivlCParser.g:1661:14: (~ NEWLINE )+
			int cnt129=0;
			loop129:
			while (true) {
				int alt129=2;
				int LA129_0 = input.LA(1);
				if ( ((LA129_0 >= AMPERSAND && LA129_0 <= NEQ)||(LA129_0 >= NOT && LA129_0 <= TYPE_QUALIFIER_LIST)) ) {
					alt129=1;
				}

				switch (alt129) {
				case 1 :
					// CivlCParser.g:
					{
					set524=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(set524));
						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 ( cnt129 >= 1 ) break loop129;
					if (state.backtracking>0) {state.failed=true; return retval;}
					EarlyExitException eee = new EarlyExitException(129, input);
					throw eee;
				}
				cnt129++;
			}

			}

			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:1670: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_START525=null;
		Token NEWLINE526=null;
		Token NEWLINE528=null;
		Token ANNOTATION_START529=null;
		Token ANNOTATION_END530=null;
		Token ANNOTATION_START531=null;
		Token ANNOTATION_END533=null;
		ParserRuleReturnScope inlineList527 =null;
		ParserRuleReturnScope annotationBody532 =null;

		Object INLINE_ANNOTATION_START525_tree=null;
		Object NEWLINE526_tree=null;
		Object NEWLINE528_tree=null;
		Object ANNOTATION_START529_tree=null;
		Object ANNOTATION_END530_tree=null;
		Object ANNOTATION_START531_tree=null;
		Object ANNOTATION_END533_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:1671: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 alt131=3;
			int LA131_0 = input.LA(1);
			if ( (LA131_0==INLINE_ANNOTATION_START) ) {
				alt131=1;
			}
			else if ( (LA131_0==ANNOTATION_START) ) {
				int LA131_2 = input.LA(2);
				if ( (LA131_2==ANNOTATION_END) ) {
					alt131=2;
				}
				else if ( ((LA131_2 >= AMPERSAND && LA131_2 <= AND)||(LA131_2 >= ANNOTATION_START && LA131_2 <= TYPE_QUALIFIER_LIST)) ) {
					alt131=3;
				}

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

			}

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

			switch (alt131) {
				case 1 :
					// CivlCParser.g:1671:6: INLINE_ANNOTATION_START ( NEWLINE -> ^( ANNOTATION INLINE_ANNOTATION_START ^( TOKEN_LIST ) NEWLINE ) | inlineList NEWLINE -> ^( ANNOTATION INLINE_ANNOTATION_START ^( TOKEN_LIST inlineList ) NEWLINE ) )
					{
					INLINE_ANNOTATION_START525=(Token)match(input,INLINE_ANNOTATION_START,FOLLOW_INLINE_ANNOTATION_START_in_annotation10443); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_INLINE_ANNOTATION_START.add(INLINE_ANNOTATION_START525);

					// CivlCParser.g:1672:6: ( NEWLINE -> ^( ANNOTATION INLINE_ANNOTATION_START ^( TOKEN_LIST ) NEWLINE ) | inlineList NEWLINE -> ^( ANNOTATION INLINE_ANNOTATION_START ^( TOKEN_LIST inlineList ) NEWLINE ) )
					int alt130=2;
					int LA130_0 = input.LA(1);
					if ( (LA130_0==NEWLINE) ) {
						alt130=1;
					}
					else if ( ((LA130_0 >= AMPERSAND && LA130_0 <= NEQ)||(LA130_0 >= NOT && LA130_0 <= TYPE_QUALIFIER_LIST)) ) {
						alt130=2;
					}

					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:1672:8: NEWLINE
							{
							NEWLINE526=(Token)match(input,NEWLINE,FOLLOW_NEWLINE_in_annotation10452); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_NEWLINE.add(NEWLINE526);

							// 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();
							// 1673:8: -> ^( ANNOTATION INLINE_ANNOTATION_START ^( TOKEN_LIST ) NEWLINE )
							{
								// CivlCParser.g:1673: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:1673: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:1674:8: inlineList NEWLINE
							{
							pushFollow(FOLLOW_inlineList_in_annotation10482);
							inlineList527=inlineList();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_inlineList.add(inlineList527.getTree());
							NEWLINE528=(Token)match(input,NEWLINE,FOLLOW_NEWLINE_in_annotation10484); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_NEWLINE.add(NEWLINE528);

							// AST REWRITE
							// elements: INLINE_ANNOTATION_START, inlineList, NEWLINE
							// 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:8: -> ^( ANNOTATION INLINE_ANNOTATION_START ^( TOKEN_LIST inlineList ) NEWLINE )
							{
								// CivlCParser.g:1675: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:1675: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:1677:6: ANNOTATION_START ANNOTATION_END
					{
					ANNOTATION_START529=(Token)match(input,ANNOTATION_START,FOLLOW_ANNOTATION_START_in_annotation10521); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ANNOTATION_START.add(ANNOTATION_START529);

					ANNOTATION_END530=(Token)match(input,ANNOTATION_END,FOLLOW_ANNOTATION_END_in_annotation10523); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ANNOTATION_END.add(ANNOTATION_END530);

					// AST REWRITE
					// elements: ANNOTATION_START, ANNOTATION_END
					// 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();
					// 1678:8: -> ^( ANNOTATION ANNOTATION_START ^( TOKEN_LIST ) ANNOTATION_END )
					{
						// CivlCParser.g:1678: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:1678: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:1679:6: ANNOTATION_START annotationBody ANNOTATION_END
					{
					ANNOTATION_START531=(Token)match(input,ANNOTATION_START,FOLLOW_ANNOTATION_START_in_annotation10551); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ANNOTATION_START.add(ANNOTATION_START531);

					pushFollow(FOLLOW_annotationBody_in_annotation10553);
					annotationBody532=annotationBody();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_annotationBody.add(annotationBody532.getTree());
					ANNOTATION_END533=(Token)match(input,ANNOTATION_END,FOLLOW_ANNOTATION_END_in_annotation10555); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ANNOTATION_END.add(ANNOTATION_END533);

					// 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();
					// 1680:8: -> ^( ANNOTATION ANNOTATION_START ^( TOKEN_LIST annotationBody ) ANNOTATION_END )
					{
						// CivlCParser.g:1680: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:1680: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:1683: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 set534=null;

		Object set534_tree=null;

		try {
			// CivlCParser.g:1683:16: ( (~ ANNOTATION_END )+ )
			// CivlCParser.g:1683:18: (~ ANNOTATION_END )+
			{
			root_0 = (Object)adaptor.nil();


			// CivlCParser.g:1683:18: (~ ANNOTATION_END )+
			int cnt132=0;
			loop132:
			while (true) {
				int alt132=2;
				int LA132_0 = input.LA(1);
				if ( ((LA132_0 >= AMPERSAND && LA132_0 <= AND)||(LA132_0 >= ANNOTATION_START && LA132_0 <= TYPE_QUALIFIER_LIST)) ) {
					alt132=1;
				}

				switch (alt132) {
				case 1 :
					// CivlCParser.g:
					{
					set534=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(set534));
						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 ( cnt132 >= 1 ) break loop132;
					if (state.backtracking>0) {state.failed=true; return retval;}
					EarlyExitException eee = new EarlyExitException(132, input);
					throw eee;
				}
				cnt132++;
			}

			}

			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:1692: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 RUN535=null;
		ParserRuleReturnScope statement536 =null;

		Object RUN535_tree=null;
		RewriteRuleTokenStream stream_RUN=new RewriteRuleTokenStream(adaptor,"token RUN");
		RewriteRuleSubtreeStream stream_statement=new RewriteRuleSubtreeStream(adaptor,"rule statement");

		try {
			// CivlCParser.g:1693:5: ( RUN statement -> ^( RUN statement ) )
			// CivlCParser.g:1693:7: RUN statement
			{
			RUN535=(Token)match(input,RUN,FOLLOW_RUN_in_runStatement10609); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RUN.add(RUN535);

			pushFollow(FOLLOW_statement_in_runStatement10611);
			statement536=statement();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_statement.add(statement536.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();
			// 1693:21: -> ^( RUN statement )
			{
				// CivlCParser.g:1693:24: ^( 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:1699: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 WITH537=null;
		Token LPAREN538=null;
		Token RPAREN540=null;
		ParserRuleReturnScope assignmentExpression539 =null;
		ParserRuleReturnScope statement541 =null;

		Object WITH537_tree=null;
		Object LPAREN538_tree=null;
		Object RPAREN540_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:1700:2: ( WITH LPAREN assignmentExpression RPAREN statement -> ^( WITH assignmentExpression statement ) )
			// CivlCParser.g:1700:4: WITH LPAREN assignmentExpression RPAREN statement
			{
			WITH537=(Token)match(input,WITH,FOLLOW_WITH_in_withStatement10635); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_WITH.add(WITH537);

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

			pushFollow(FOLLOW_assignmentExpression_in_withStatement10639);
			assignmentExpression539=assignmentExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression539.getTree());
			RPAREN540=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_withStatement10641); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN540);

			pushFollow(FOLLOW_statement_in_withStatement10643);
			statement541=statement();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_statement.add(statement541.getTree());
			// AST REWRITE
			// elements: statement, assignmentExpression, WITH
			// 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();
			// 1701:7: -> ^( WITH assignmentExpression statement )
			{
				// CivlCParser.g:1701:10: ^( 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:1704: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 UPDATE542=null;
		Token LPAREN543=null;
		Token RPAREN545=null;
		Token LPAREN547=null;
		Token RPAREN549=null;
		Token SEMI550=null;
		ParserRuleReturnScope assignmentExpression544 =null;
		ParserRuleReturnScope postfixExpressionRoot546 =null;
		ParserRuleReturnScope argumentExpressionList548 =null;

		Object UPDATE542_tree=null;
		Object LPAREN543_tree=null;
		Object RPAREN545_tree=null;
		Object LPAREN547_tree=null;
		Object RPAREN549_tree=null;
		Object SEMI550_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:1705:2: ( UPDATE LPAREN assignmentExpression RPAREN postfixExpressionRoot LPAREN argumentExpressionList RPAREN SEMI -> ^( UPDATE assignmentExpression ^( CALL ABSENT postfixExpressionRoot ABSENT argumentExpressionList RPAREN ) ) )
			// CivlCParser.g:1705:4: UPDATE LPAREN assignmentExpression RPAREN postfixExpressionRoot LPAREN argumentExpressionList RPAREN SEMI
			{
			UPDATE542=(Token)match(input,UPDATE,FOLLOW_UPDATE_in_updateStatement10670); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_UPDATE.add(UPDATE542);

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

			pushFollow(FOLLOW_assignmentExpression_in_updateStatement10674);
			assignmentExpression544=assignmentExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression544.getTree());
			RPAREN545=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_updateStatement10676); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN545);

			pushFollow(FOLLOW_postfixExpressionRoot_in_updateStatement10681);
			postfixExpressionRoot546=postfixExpressionRoot();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_postfixExpressionRoot.add(postfixExpressionRoot546.getTree());
			LPAREN547=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_updateStatement10683); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN547);

			pushFollow(FOLLOW_argumentExpressionList_in_updateStatement10685);
			argumentExpressionList548=argumentExpressionList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_argumentExpressionList.add(argumentExpressionList548.getTree());
			RPAREN549=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_updateStatement10687); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN549);

			SEMI550=(Token)match(input,SEMI,FOLLOW_SEMI_in_updateStatement10689); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_SEMI.add(SEMI550);

			// AST REWRITE
			// elements: postfixExpressionRoot, assignmentExpression, RPAREN, argumentExpressionList, UPDATE
			// 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();
			// 1707:4: -> ^( UPDATE assignmentExpression ^( CALL ABSENT postfixExpressionRoot ABSENT argumentExpressionList RPAREN ) )
			{
				// CivlCParser.g:1707: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:1708:8: ^( 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:1712: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 set551=null;
		Token LPAREN552=null;
		Token RPAREN554=null;
		ParserRuleReturnScope balancedToken553 =null;

		Object set551_tree=null;
		Object LPAREN552_tree=null;
		Object RPAREN554_tree=null;

		try {
			// CivlCParser.g:1713:2: (~ ( LPAREN | RPAREN ) | LPAREN ( balancedToken )* RPAREN )
			int alt134=2;
			int LA134_0 = input.LA(1);
			if ( ((LA134_0 >= AMPERSAND && LA134_0 <= LINE)||(LA134_0 >= LSLIST && LA134_0 <= REXCON)||(LA134_0 >= RSLIST && LA134_0 <= TYPE_QUALIFIER_LIST)) ) {
				alt134=1;
			}
			else if ( (LA134_0==LPAREN) ) {
				alt134=2;
			}

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

			switch (alt134) {
				case 1 :
					// CivlCParser.g:1713:4: ~ ( LPAREN | RPAREN )
					{
					root_0 = (Object)adaptor.nil();


					set551=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(set551));
						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:1714:4: LPAREN ( balancedToken )* RPAREN
					{
					root_0 = (Object)adaptor.nil();


					LPAREN552=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_balancedToken10752); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					LPAREN552_tree = (Object)adaptor.create(LPAREN552);
					adaptor.addChild(root_0, LPAREN552_tree);
					}

					// CivlCParser.g:1714:11: ( balancedToken )*
					loop133:
					while (true) {
						int alt133=2;
						int LA133_0 = input.LA(1);
						if ( ((LA133_0 >= AMPERSAND && LA133_0 <= REXCON)||(LA133_0 >= RSLIST && LA133_0 <= TYPE_QUALIFIER_LIST)) ) {
							alt133=1;
						}

						switch (alt133) {
						case 1 :
							// CivlCParser.g:1714:11: balancedToken
							{
							pushFollow(FOLLOW_balancedToken_in_balancedToken10754);
							balancedToken553=balancedToken();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) adaptor.addChild(root_0, balancedToken553.getTree());

							}
							break;

						default :
							break loop133;
						}
					}

					RPAREN554=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_balancedToken10757); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					RPAREN554_tree = (Object)adaptor.create(RPAREN554);
					adaptor.addChild(root_0, RPAREN554_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:1717: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 ASM555=null;
		Token VOLATILE556=null;
		Token GOTO557=null;
		Token LPAREN558=null;
		Token RPAREN560=null;
		Token SEMI561=null;
		ParserRuleReturnScope balancedToken559 =null;

		Object ASM555_tree=null;
		Object VOLATILE556_tree=null;
		Object GOTO557_tree=null;
		Object LPAREN558_tree=null;
		Object RPAREN560_tree=null;
		Object SEMI561_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:1718:2: ( ASM ( VOLATILE )? ( GOTO )? LPAREN ( balancedToken )* RPAREN SEMI -> ^( ASM ( VOLATILE )? ( GOTO )? ^( TOKEN_LIST ( balancedToken )* ) ) )
			// CivlCParser.g:1718:4: ASM ( VOLATILE )? ( GOTO )? LPAREN ( balancedToken )* RPAREN SEMI
			{
			ASM555=(Token)match(input,ASM,FOLLOW_ASM_in_asmStatement10768); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ASM.add(ASM555);

			// CivlCParser.g:1718:8: ( VOLATILE )?
			int alt135=2;
			int LA135_0 = input.LA(1);
			if ( (LA135_0==VOLATILE) ) {
				alt135=1;
			}
			switch (alt135) {
				case 1 :
					// CivlCParser.g:1718:8: VOLATILE
					{
					VOLATILE556=(Token)match(input,VOLATILE,FOLLOW_VOLATILE_in_asmStatement10770); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_VOLATILE.add(VOLATILE556);

					}
					break;

			}

			// CivlCParser.g:1718:18: ( GOTO )?
			int alt136=2;
			int LA136_0 = input.LA(1);
			if ( (LA136_0==GOTO) ) {
				alt136=1;
			}
			switch (alt136) {
				case 1 :
					// CivlCParser.g:1718:18: GOTO
					{
					GOTO557=(Token)match(input,GOTO,FOLLOW_GOTO_in_asmStatement10773); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_GOTO.add(GOTO557);

					}
					break;

			}

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

			// CivlCParser.g:1719:4: ( balancedToken )*
			loop137:
			while (true) {
				int alt137=2;
				int LA137_0 = input.LA(1);
				if ( ((LA137_0 >= AMPERSAND && LA137_0 <= REXCON)||(LA137_0 >= RSLIST && LA137_0 <= TYPE_QUALIFIER_LIST)) ) {
					alt137=1;
				}

				switch (alt137) {
				case 1 :
					// CivlCParser.g:1719:4: balancedToken
					{
					pushFollow(FOLLOW_balancedToken_in_asmStatement10781);
					balancedToken559=balancedToken();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_balancedToken.add(balancedToken559.getTree());
					}
					break;

				default :
					break loop137;
				}
			}

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

			SEMI561=(Token)match(input,SEMI,FOLLOW_SEMI_in_asmStatement10789); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_SEMI.add(SEMI561);

			// AST REWRITE
			// elements: ASM, VOLATILE, balancedToken, GOTO
			// 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();
			// 1721:4: -> ^( ASM ( VOLATILE )? ( GOTO )? ^( TOKEN_LIST ( balancedToken )* ) )
			{
				// CivlCParser.g:1721: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:1721:13: ( VOLATILE )?
				if ( stream_VOLATILE.hasNext() ) {
					adaptor.addChild(root_1, stream_VOLATILE.nextNode());
				}
				stream_VOLATILE.reset();

				// CivlCParser.g:1721:23: ( GOTO )?
				if ( stream_GOTO.hasNext() ) {
					adaptor.addChild(root_1, stream_GOTO.nextNode());
				}
				stream_GOTO.reset();

				// CivlCParser.g:1721: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:1721: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:1732: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 WHEN562=null;
		Token LPAREN563=null;
		Token RPAREN565=null;
		ParserRuleReturnScope expression564 =null;
		ParserRuleReturnScope statement566 =null;

		Object WHEN562_tree=null;
		Object LPAREN563_tree=null;
		Object RPAREN565_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:1733:2: ( WHEN LPAREN expression RPAREN statement -> ^( WHEN expression statement ) )
			// CivlCParser.g:1733:4: WHEN LPAREN expression RPAREN statement
			{
			WHEN562=(Token)match(input,WHEN,FOLLOW_WHEN_in_whenStatement10824); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_WHEN.add(WHEN562);

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

			pushFollow(FOLLOW_expression_in_whenStatement10828);
			expression564=expression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_expression.add(expression564.getTree());
			RPAREN565=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_whenStatement10830); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN565);

			pushFollow(FOLLOW_statement_in_whenStatement10832);
			statement566=statement();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_statement.add(statement566.getTree());
			// AST REWRITE
			// elements: statement, expression, WHEN
			// 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();
			// 1734:3: -> ^( WHEN expression statement )
			{
				// CivlCParser.g:1734: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:1743: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 CHOOSE567=null;
		Token LCURLY568=null;
		Token RCURLY570=null;
		ParserRuleReturnScope statement569 =null;

		Object CHOOSE567_tree=null;
		Object LCURLY568_tree=null;
		Object RCURLY570_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:1744:2: ( CHOOSE LCURLY ( statement )+ RCURLY -> ^( CHOOSE ( statement )+ ) )
			// CivlCParser.g:1744:4: CHOOSE LCURLY ( statement )+ RCURLY
			{
			CHOOSE567=(Token)match(input,CHOOSE,FOLLOW_CHOOSE_in_chooseStatement10857); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_CHOOSE.add(CHOOSE567);

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

			// CivlCParser.g:1744:18: ( statement )+
			int cnt138=0;
			loop138:
			while (true) {
				int alt138=2;
				int LA138_0 = input.LA(1);
				if ( (LA138_0==AMPERSAND||LA138_0==CHARACTER_CONSTANT||LA138_0==ELLIPSIS||LA138_0==FLOATING_CONSTANT||(LA138_0 >= IDENTIFIER && LA138_0 <= IF)||LA138_0==INTEGER_CONSTANT||LA138_0==LCURLY||LA138_0==LPAREN||LA138_0==MINUSMINUS||LA138_0==NOT||LA138_0==PLUS||LA138_0==PLUSPLUS||LA138_0==SEMI||LA138_0==STAR||(LA138_0 >= STRING_LITERAL && LA138_0 <= SUB)||LA138_0==TILDE||(LA138_0 >= ALIGNOF && LA138_0 <= ASM)||LA138_0==BIG_O||(LA138_0 >= BREAK && LA138_0 <= CASE)||(LA138_0 >= CHOOSE && LA138_0 <= CIVLFOR)||(LA138_0 >= CONTINUE && LA138_0 <= DEFAULT)||LA138_0==DERIV||LA138_0==DO||LA138_0==EXISTS||(LA138_0 >= FOR && LA138_0 <= GENERIC)||LA138_0==GOTO||LA138_0==HERE||LA138_0==PARFOR||LA138_0==PROCNULL||(LA138_0 >= RESULT && LA138_0 <= SELF)||(LA138_0 >= SIZEOF && LA138_0 <= SPAWN)||LA138_0==STATE_NULL||LA138_0==SWITCH||LA138_0==UNIFORM||(LA138_0 >= UPDATE && LA138_0 <= VALUE_AT)||(LA138_0 >= WHEN && LA138_0 <= WITH)||LA138_0==SUM) ) {
					alt138=1;
				}

				switch (alt138) {
				case 1 :
					// CivlCParser.g:1744:18: statement
					{
					pushFollow(FOLLOW_statement_in_chooseStatement10861);
					statement569=statement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statement.add(statement569.getTree());
					}
					break;

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

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

			// AST REWRITE
			// elements: statement, CHOOSE
			// 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();
			// 1744:36: -> ^( CHOOSE ( statement )+ )
			{
				// CivlCParser.g:1744:39: ^( 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:1753: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 CIVLATOMIC571=null;
		ParserRuleReturnScope s =null;

		Object CIVLATOMIC571_tree=null;
		RewriteRuleTokenStream stream_CIVLATOMIC=new RewriteRuleTokenStream(adaptor,"token CIVLATOMIC");
		RewriteRuleSubtreeStream stream_statementWithScope=new RewriteRuleSubtreeStream(adaptor,"rule statementWithScope");

		try {
			// CivlCParser.g:1754:2: ( CIVLATOMIC s= statementWithScope -> ^( CIVLATOMIC $s) )
			// CivlCParser.g:1754:4: CIVLATOMIC s= statementWithScope
			{
			CIVLATOMIC571=(Token)match(input,CIVLATOMIC,FOLLOW_CIVLATOMIC_in_atomicStatement10886); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_CIVLATOMIC.add(CIVLATOMIC571);

			pushFollow(FOLLOW_statementWithScope_in_atomicStatement10890);
			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();
			// 1754:36: -> ^( CIVLATOMIC $s)
			{
				// CivlCParser.g:1754:39: ^( 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:1766: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 declarator572 =null;
		ParserRuleReturnScope contract573 =null;
		ParserRuleReturnScope declarationList_opt574 =null;
		ParserRuleReturnScope compoundStatement575 =null;
		ParserRuleReturnScope declarationSpecifiers576 =null;
		ParserRuleReturnScope declarator577 =null;
		ParserRuleReturnScope contract578 =null;
		ParserRuleReturnScope declarationList_opt579 =null;
		ParserRuleReturnScope compoundStatement580 =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().hasTypeSpec = false;

		try {
			// CivlCParser.g:1776: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 alt139=2;
			switch ( input.LA(1) ) {
			case IDENTIFIER:
				{
				int LA139_1 = input.LA(2);
				if ( (!(((isTypeName(input.LT(1).getText()))))) ) {
					alt139=1;
				}
				else if ( ((isTypeName(input.LT(1).getText()))) ) {
					alt139=2;
				}

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

				}
				break;
			case LPAREN:
			case STAR:
				{
				alt139=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:
				{
				alt139=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 139, 0, input);
				throw nvae;
			}
			switch (alt139) {
				case 1 :
					// CivlCParser.g:1776:4: declarator contract declarationList_opt compoundStatement
					{
					pushFollow(FOLLOW_declarator_in_functionDefinition10928);
					declarator572=declarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declarator.add(declarator572.getTree());
					pushFollow(FOLLOW_contract_in_functionDefinition10933);
					contract573=contract();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_contract.add(contract573.getTree());
					pushFollow(FOLLOW_declarationList_opt_in_functionDefinition10938);
					declarationList_opt574=declarationList_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declarationList_opt.add(declarationList_opt574.getTree());
					pushFollow(FOLLOW_compoundStatement_in_functionDefinition10943);
					compoundStatement575=compoundStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_compoundStatement.add(compoundStatement575.getTree());
					// AST REWRITE
					// elements: declarationList_opt, contract, declarator, 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();
					// 1780:4: -> ^( FUNCTION_DEFINITION ^( DECLARATION_SPECIFIERS ) declarator declarationList_opt compoundStatement contract )
					{
						// CivlCParser.g:1780: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:1780: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:1783:7: declarationSpecifiers declarator contract declarationList_opt compoundStatement
					{
					pushFollow(FOLLOW_declarationSpecifiers_in_functionDefinition10988);
					declarationSpecifiers576=declarationSpecifiers();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declarationSpecifiers.add(declarationSpecifiers576.getTree());
					pushFollow(FOLLOW_declarator_in_functionDefinition10993);
					declarator577=declarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declarator.add(declarator577.getTree());
					pushFollow(FOLLOW_contract_in_functionDefinition10998);
					contract578=contract();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_contract.add(contract578.getTree());
					pushFollow(FOLLOW_declarationList_opt_in_functionDefinition11003);
					declarationList_opt579=declarationList_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declarationList_opt.add(declarationList_opt579.getTree());
					pushFollow(FOLLOW_compoundStatement_in_functionDefinition11008);
					compoundStatement580=compoundStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_compoundStatement.add(compoundStatement580.getTree());
					// AST REWRITE
					// elements: compoundStatement, contract, declarator, declarationList_opt, 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();
					// 1788:4: -> ^( FUNCTION_DEFINITION declarationSpecifiers declarator declarationList_opt compoundStatement contract )
					{
						// CivlCParser.g:1788: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:1798: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 declaration581 =null;

		RewriteRuleSubtreeStream stream_declaration=new RewriteRuleSubtreeStream(adaptor,"rule declaration");

		try {
			// CivlCParser.g:1799:2: ( ( declaration )* -> ^( DECLARATION_LIST ( declaration )* ) )
			// CivlCParser.g:1799:4: ( declaration )*
			{
			// CivlCParser.g:1799:4: ( declaration )*
			loop140:
			while (true) {
				int alt140=2;
				int LA140_0 = input.LA(1);
				if ( (LA140_0==IDENTIFIER||(LA140_0 >= ABSTRACT && LA140_0 <= ALIGNAS)||(LA140_0 >= ATOMIC && LA140_0 <= AUTO)||LA140_0==BOOL||LA140_0==CHAR||(LA140_0 >= COMPLEX && LA140_0 <= CONST)||(LA140_0 >= DEVICE && LA140_0 <= DIFFERENTIABLE)||(LA140_0 >= DOMAIN && LA140_0 <= DOUBLE)||LA140_0==ENUM||(LA140_0 >= EXTERN && LA140_0 <= FATOMIC)||LA140_0==FLOAT||LA140_0==GLOBAL||(LA140_0 >= INLINE && LA140_0 <= INT)||(LA140_0 >= LONG && LA140_0 <= NORETURN)||LA140_0==OUTPUT||(LA140_0 >= PURE && LA140_0 <= RANGE)||(LA140_0 >= REAL && LA140_0 <= REGISTER)||LA140_0==RESTRICT||(LA140_0 >= SHARED && LA140_0 <= SIGNED)||LA140_0==STATE_F||(LA140_0 >= STATIC && LA140_0 <= STRUCT)||LA140_0==SYSTEM||(LA140_0 >= THREADLOCAL && LA140_0 <= TYPEOF)||(LA140_0 >= UNION && LA140_0 <= UNSIGNED)||(LA140_0 >= VOID && LA140_0 <= VOLATILE)) ) {
					alt140=1;
				}

				switch (alt140) {
				case 1 :
					// CivlCParser.g:1799:4: declaration
					{
					pushFollow(FOLLOW_declaration_in_declarationList_opt11057);
					declaration581=declaration();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declaration.add(declaration581.getTree());
					}
					break;

				default :
					break loop140;
				}
			}

			// 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();
			// 1799:17: -> ^( DECLARATION_LIST ( declaration )* )
			{
				// CivlCParser.g:1799: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:1799: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:1807: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 separationLogicItem582 =null;
		ParserRuleReturnScope porItem583 =null;


		try {
			// CivlCParser.g:1808:2: ( separationLogicItem | porItem )
			int alt141=2;
			int LA141_0 = input.LA(1);
			if ( (LA141_0==ENSURES||LA141_0==REQUIRES) ) {
				alt141=1;
			}
			else if ( (LA141_0==ASSIGNS||LA141_0==DEPENDS||LA141_0==GUARD||LA141_0==READS) ) {
				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:1808:4: separationLogicItem
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_separationLogicItem_in_contractItem11080);
					separationLogicItem582=separationLogicItem();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, separationLogicItem582.getTree());

					}
					break;
				case 2 :
					// CivlCParser.g:1809:7: porItem
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_porItem_in_contractItem11088);
					porItem583=porItem();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, porItem583.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:1812: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 REQUIRES584=null;
		Token LCURLY585=null;
		Token RCURLY587=null;
		Token ENSURES588=null;
		Token LCURLY589=null;
		Token RCURLY591=null;
		ParserRuleReturnScope expression586 =null;
		ParserRuleReturnScope expression590 =null;

		Object REQUIRES584_tree=null;
		Object LCURLY585_tree=null;
		Object RCURLY587_tree=null;
		Object ENSURES588_tree=null;
		Object LCURLY589_tree=null;
		Object RCURLY591_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:1813:5: ( REQUIRES LCURLY expression RCURLY -> ^( REQUIRES expression RCURLY ) | ENSURES LCURLY expression RCURLY -> ^( ENSURES expression RCURLY ) )
			int alt142=2;
			int LA142_0 = input.LA(1);
			if ( (LA142_0==REQUIRES) ) {
				alt142=1;
			}
			else if ( (LA142_0==ENSURES) ) {
				alt142=2;
			}

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

			switch (alt142) {
				case 1 :
					// CivlCParser.g:1814:7: REQUIRES LCURLY expression RCURLY
					{
					REQUIRES584=(Token)match(input,REQUIRES,FOLLOW_REQUIRES_in_separationLogicItem11108); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_REQUIRES.add(REQUIRES584);

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

					pushFollow(FOLLOW_expression_in_separationLogicItem11112);
					expression586=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression586.getTree());
					RCURLY587=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_separationLogicItem11114); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY587);

					// AST REWRITE
					// elements: REQUIRES, expression, RCURLY
					// 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();
					// 1814:41: -> ^( REQUIRES expression RCURLY )
					{
						// CivlCParser.g:1814: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:1815:4: ENSURES LCURLY expression RCURLY
					{
					ENSURES588=(Token)match(input,ENSURES,FOLLOW_ENSURES_in_separationLogicItem11129); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ENSURES.add(ENSURES588);

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

					pushFollow(FOLLOW_expression_in_separationLogicItem11133);
					expression590=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression590.getTree());
					RCURLY591=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_separationLogicItem11135); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY591);

					// 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();
					// 1815:37: -> ^( ENSURES expression RCURLY )
					{
						// CivlCParser.g:1815: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:1818: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 DEPENDS592=null;
		Token LSQUARE593=null;
		Token RSQUARE595=null;
		Token LCURLY596=null;
		Token RCURLY598=null;
		Token GUARD599=null;
		Token LSQUARE600=null;
		Token RSQUARE602=null;
		Token LCURLY603=null;
		Token RCURLY605=null;
		Token ASSIGNS606=null;
		Token LSQUARE607=null;
		Token RSQUARE609=null;
		Token LCURLY610=null;
		Token RCURLY612=null;
		Token READS613=null;
		Token LSQUARE614=null;
		Token RSQUARE616=null;
		Token LCURLY617=null;
		Token RCURLY619=null;
		ParserRuleReturnScope expression594 =null;
		ParserRuleReturnScope argumentExpressionList597 =null;
		ParserRuleReturnScope expression601 =null;
		ParserRuleReturnScope argumentExpressionList604 =null;
		ParserRuleReturnScope expression608 =null;
		ParserRuleReturnScope argumentExpressionList611 =null;
		ParserRuleReturnScope expression615 =null;
		ParserRuleReturnScope argumentExpressionList618 =null;

		Object DEPENDS592_tree=null;
		Object LSQUARE593_tree=null;
		Object RSQUARE595_tree=null;
		Object LCURLY596_tree=null;
		Object RCURLY598_tree=null;
		Object GUARD599_tree=null;
		Object LSQUARE600_tree=null;
		Object RSQUARE602_tree=null;
		Object LCURLY603_tree=null;
		Object RCURLY605_tree=null;
		Object ASSIGNS606_tree=null;
		Object LSQUARE607_tree=null;
		Object RSQUARE609_tree=null;
		Object LCURLY610_tree=null;
		Object RCURLY612_tree=null;
		Object READS613_tree=null;
		Object LSQUARE614_tree=null;
		Object RSQUARE616_tree=null;
		Object LCURLY617_tree=null;
		Object RCURLY619_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:1819: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 alt147=4;
			switch ( input.LA(1) ) {
			case DEPENDS:
				{
				alt147=1;
				}
				break;
			case GUARD:
				{
				alt147=2;
				}
				break;
			case ASSIGNS:
				{
				alt147=3;
				}
				break;
			case READS:
				{
				alt147=4;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 147, 0, input);
				throw nvae;
			}
			switch (alt147) {
				case 1 :
					// CivlCParser.g:1820:7: DEPENDS ( LSQUARE expression RSQUARE )? LCURLY argumentExpressionList RCURLY
					{
					DEPENDS592=(Token)match(input,DEPENDS,FOLLOW_DEPENDS_in_porItem11168); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_DEPENDS.add(DEPENDS592);

					// CivlCParser.g:1820:15: ( LSQUARE expression RSQUARE )?
					int alt143=2;
					int LA143_0 = input.LA(1);
					if ( (LA143_0==LSQUARE) ) {
						alt143=1;
					}
					switch (alt143) {
						case 1 :
							// CivlCParser.g:1820:16: LSQUARE expression RSQUARE
							{
							LSQUARE593=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_porItem11171); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE593);

							pushFollow(FOLLOW_expression_in_porItem11173);
							expression594=expression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression.add(expression594.getTree());
							RSQUARE595=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_porItem11175); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE595);

							}
							break;

					}

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

					pushFollow(FOLLOW_argumentExpressionList_in_porItem11181);
					argumentExpressionList597=argumentExpressionList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_argumentExpressionList.add(argumentExpressionList597.getTree());
					RCURLY598=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_porItem11183); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY598);

					// AST REWRITE
					// elements: DEPENDS, expression, 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();
					// 1821:7: -> ^( DEPENDS ( expression )? argumentExpressionList )
					{
						// CivlCParser.g:1821:10: ^( DEPENDS ( expression )? argumentExpressionList )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_DEPENDS.nextNode(), root_1);
						// CivlCParser.g:1821:20: ( 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:1822:7: GUARD ( LSQUARE expression RSQUARE )? LCURLY argumentExpressionList RCURLY
					{
					GUARD599=(Token)match(input,GUARD,FOLLOW_GUARD_in_porItem11208); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_GUARD.add(GUARD599);

					// CivlCParser.g:1822:13: ( LSQUARE expression RSQUARE )?
					int alt144=2;
					int LA144_0 = input.LA(1);
					if ( (LA144_0==LSQUARE) ) {
						alt144=1;
					}
					switch (alt144) {
						case 1 :
							// CivlCParser.g:1822:14: LSQUARE expression RSQUARE
							{
							LSQUARE600=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_porItem11211); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE600);

							pushFollow(FOLLOW_expression_in_porItem11213);
							expression601=expression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression.add(expression601.getTree());
							RSQUARE602=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_porItem11215); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE602);

							}
							break;

					}

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

					pushFollow(FOLLOW_argumentExpressionList_in_porItem11221);
					argumentExpressionList604=argumentExpressionList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_argumentExpressionList.add(argumentExpressionList604.getTree());
					RCURLY605=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_porItem11223); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY605);

					// AST REWRITE
					// elements: GUARD, expression, 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();
					// 1823:7: -> ^( GUARD ( expression )? argumentExpressionList )
					{
						// CivlCParser.g:1823:10: ^( GUARD ( expression )? argumentExpressionList )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_GUARD.nextNode(), root_1);
						// CivlCParser.g:1823:18: ( 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:1824:7: ASSIGNS ( LSQUARE expression RSQUARE )? LCURLY argumentExpressionList RCURLY
					{
					ASSIGNS606=(Token)match(input,ASSIGNS,FOLLOW_ASSIGNS_in_porItem11248); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ASSIGNS.add(ASSIGNS606);

					// CivlCParser.g:1824:15: ( LSQUARE expression RSQUARE )?
					int alt145=2;
					int LA145_0 = input.LA(1);
					if ( (LA145_0==LSQUARE) ) {
						alt145=1;
					}
					switch (alt145) {
						case 1 :
							// CivlCParser.g:1824:16: LSQUARE expression RSQUARE
							{
							LSQUARE607=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_porItem11251); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE607);

							pushFollow(FOLLOW_expression_in_porItem11253);
							expression608=expression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression.add(expression608.getTree());
							RSQUARE609=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_porItem11255); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE609);

							}
							break;

					}

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

					pushFollow(FOLLOW_argumentExpressionList_in_porItem11261);
					argumentExpressionList611=argumentExpressionList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_argumentExpressionList.add(argumentExpressionList611.getTree());
					RCURLY612=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_porItem11263); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY612);

					// AST REWRITE
					// elements: argumentExpressionList, expression, ASSIGNS
					// 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();
					// 1825:7: -> ^( ASSIGNS ( expression )? argumentExpressionList )
					{
						// CivlCParser.g:1825:10: ^( ASSIGNS ( expression )? argumentExpressionList )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_ASSIGNS.nextNode(), root_1);
						// CivlCParser.g:1825:20: ( 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:1826:7: READS ( LSQUARE expression RSQUARE )? LCURLY argumentExpressionList RCURLY
					{
					READS613=(Token)match(input,READS,FOLLOW_READS_in_porItem11288); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_READS.add(READS613);

					// CivlCParser.g:1826:13: ( LSQUARE expression RSQUARE )?
					int alt146=2;
					int LA146_0 = input.LA(1);
					if ( (LA146_0==LSQUARE) ) {
						alt146=1;
					}
					switch (alt146) {
						case 1 :
							// CivlCParser.g:1826:14: LSQUARE expression RSQUARE
							{
							LSQUARE614=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_porItem11291); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE614);

							pushFollow(FOLLOW_expression_in_porItem11293);
							expression615=expression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression.add(expression615.getTree());
							RSQUARE616=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_porItem11295); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE616);

							}
							break;

					}

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

					pushFollow(FOLLOW_argumentExpressionList_in_porItem11301);
					argumentExpressionList618=argumentExpressionList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_argumentExpressionList.add(argumentExpressionList618.getTree());
					RCURLY619=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_porItem11303); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY619);

					// 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();
					// 1827:7: -> ^( READS ( expression )? argumentExpressionList )
					{
						// CivlCParser.g:1827:10: ^( READS ( expression )? argumentExpressionList )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_READS.nextNode(), root_1);
						// CivlCParser.g:1827:18: ( 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:1836: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 contractItem620 =null;

		RewriteRuleSubtreeStream stream_contractItem=new RewriteRuleSubtreeStream(adaptor,"rule contractItem");

		try {
			// CivlCParser.g:1837:2: ( ( contractItem )* -> ^( CONTRACT ( contractItem )* ) )
			// CivlCParser.g:1837:4: ( contractItem )*
			{
			// CivlCParser.g:1837:4: ( contractItem )*
			loop148:
			while (true) {
				int alt148=2;
				int LA148_0 = input.LA(1);
				if ( (LA148_0==ASSIGNS||LA148_0==DEPENDS||LA148_0==ENSURES||LA148_0==GUARD||LA148_0==READS||LA148_0==REQUIRES) ) {
					alt148=1;
				}

				switch (alt148) {
				case 1 :
					// CivlCParser.g:1837:4: contractItem
					{
					pushFollow(FOLLOW_contractItem_in_contract11337);
					contractItem620=contractItem();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_contractItem.add(contractItem620.getTree());
					}
					break;

				default :
					break loop148;
				}
			}

			// 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();
			// 1837:18: -> ^( CONTRACT ( contractItem )* )
			{
				// CivlCParser.g:1837:21: ^( CONTRACT ( contractItem )* )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(CONTRACT, "CONTRACT"), root_1);
				// CivlCParser.g:1837: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:1844: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 blockItem621 =null;



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

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


			pushFollow(FOLLOW_blockItem_in_blockItemWithScope11371);
			blockItem621=blockItem();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) adaptor.addChild(root_0, blockItem621.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:1856: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 functionDefinition622 =null;
		ParserRuleReturnScope functionDefinition623 =null;
		ParserRuleReturnScope declaration624 =null;
		ParserRuleReturnScope pragma625 =null;
		ParserRuleReturnScope annotation626 =null;
		ParserRuleReturnScope statement627 =null;


		try {
			// CivlCParser.g:1857:2: ( ( declarator contract declarationList_opt LCURLY )=> functionDefinition | ( declarationSpecifiers declarator contract declarationList_opt LCURLY )=> functionDefinition | declaration | pragma | annotation | statement )
			int alt149=6;
			alt149 = dfa149.predict(input);
			switch (alt149) {
				case 1 :
					// CivlCParser.g:1857:4: ( declarator contract declarationList_opt LCURLY )=> functionDefinition
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_functionDefinition_in_blockItem11396);
					functionDefinition622=functionDefinition();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, functionDefinition622.getTree());

					}
					break;
				case 2 :
					// CivlCParser.g:1859:4: ( declarationSpecifiers declarator contract declarationList_opt LCURLY )=> functionDefinition
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_functionDefinition_in_blockItem11417);
					functionDefinition623=functionDefinition();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, functionDefinition623.getTree());

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


					pushFollow(FOLLOW_declaration_in_blockItem11422);
					declaration624=declaration();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, declaration624.getTree());

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


					pushFollow(FOLLOW_pragma_in_blockItem11427);
					pragma625=pragma();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, pragma625.getTree());

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


					pushFollow(FOLLOW_annotation_in_blockItem11432);
					annotation626=annotation();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, annotation626.getTree());

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


					pushFollow(FOLLOW_statement_in_blockItem11437);
					statement627=statement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, statement627.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:1879: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 EOF629=null;
		ParserRuleReturnScope blockItem628 =null;

		Object EOF629_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().hasTypeSpec = false;

		try {
			// CivlCParser.g:1889:2: ( ( blockItem )* EOF -> ^( TRANSLATION_UNIT ( blockItem )* ) )
			// CivlCParser.g:1889:4: ( blockItem )* EOF
			{
			// CivlCParser.g:1889:4: ( blockItem )*
			loop150:
			while (true) {
				int alt150=2;
				int LA150_0 = input.LA(1);
				if ( (LA150_0==AMPERSAND||LA150_0==ANNOTATION_START||LA150_0==CHARACTER_CONSTANT||LA150_0==ELLIPSIS||LA150_0==FLOATING_CONSTANT||(LA150_0 >= IDENTIFIER && LA150_0 <= IF)||LA150_0==INLINE_ANNOTATION_START||LA150_0==INTEGER_CONSTANT||LA150_0==LCURLY||LA150_0==LPAREN||LA150_0==MINUSMINUS||LA150_0==NOT||LA150_0==PLUS||LA150_0==PLUSPLUS||LA150_0==SEMI||LA150_0==STAR||(LA150_0 >= STRING_LITERAL && LA150_0 <= SUB)||LA150_0==TILDE||(LA150_0 >= ABSTRACT && LA150_0 <= ASM)||(LA150_0 >= ATOMIC && LA150_0 <= BIG_O)||(LA150_0 >= BOOL && LA150_0 <= CASE)||(LA150_0 >= CHAR && LA150_0 <= CIVLFOR)||(LA150_0 >= COMPLEX && LA150_0 <= CONST)||(LA150_0 >= CONTINUE && LA150_0 <= DEFAULT)||(LA150_0 >= DERIV && LA150_0 <= DOUBLE)||(LA150_0 >= ENUM && LA150_0 <= EXISTS)||(LA150_0 >= EXTERN && LA150_0 <= FATOMIC)||(LA150_0 >= FLOAT && LA150_0 <= GOTO)||LA150_0==HERE||(LA150_0 >= INLINE && LA150_0 <= INT)||(LA150_0 >= LONG && LA150_0 <= NORETURN)||LA150_0==OUTPUT||LA150_0==PARFOR||(LA150_0 >= PPRAGMA && LA150_0 <= RANGE)||(LA150_0 >= REAL && LA150_0 <= REGISTER)||(LA150_0 >= RESTRICT && LA150_0 <= SELF)||(LA150_0 >= SHARED && LA150_0 <= SYSTEM)||(LA150_0 >= THREADLOCAL && LA150_0 <= WITH)||LA150_0==SUM) ) {
					alt150=1;
				}

				switch (alt150) {
				case 1 :
					// CivlCParser.g:1889:4: blockItem
					{
					pushFollow(FOLLOW_blockItem_in_translationUnit11467);
					blockItem628=blockItem();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_blockItem.add(blockItem628.getTree());
					}
					break;

				default :
					break loop150;
				}
			}

			EOF629=(Token)match(input,EOF,FOLLOW_EOF_in_translationUnit11470); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_EOF.add(EOF629);

			// 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();
			// 1889:19: -> ^( TRANSLATION_UNIT ( blockItem )* )
			{
				// CivlCParser.g:1889:22: ^( 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:1889:41: ( 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:369:4: ( LPAREN typeName RPAREN LCURLY )
		// CivlCParser.g:369:5: LPAREN typeName RPAREN LCURLY
		{
		match(input,LPAREN,FOLLOW_LPAREN_in_synpred1_CivlCParser2329); if (state.failed) return;

		pushFollow(FOLLOW_typeName_in_synpred1_CivlCParser2331);
		typeName();
		state._fsp--;
		if (state.failed) return;

		match(input,RPAREN,FOLLOW_RPAREN_in_synpred1_CivlCParser2333); if (state.failed) return;

		match(input,LCURLY,FOLLOW_LCURLY_in_synpred1_CivlCParser2335); if (state.failed) return;

		}

	}
	// $ANTLR end synpred1_CivlCParser

	// $ANTLR start synpred2_CivlCParser
	public final void synpred2_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:402:4: ( SIZEOF LPAREN typeName )
		// CivlCParser.g:402:5: SIZEOF LPAREN typeName
		{
		match(input,SIZEOF,FOLLOW_SIZEOF_in_synpred2_CivlCParser2638); if (state.failed) return;

		match(input,LPAREN,FOLLOW_LPAREN_in_synpred2_CivlCParser2640); if (state.failed) return;

		pushFollow(FOLLOW_typeName_in_synpred2_CivlCParser2642);
		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:465:4: ( LPAREN typeName RPAREN ~ LCURLY )
		// CivlCParser.g:465:5: LPAREN typeName RPAREN ~ LCURLY
		{
		match(input,LPAREN,FOLLOW_LPAREN_in_synpred3_CivlCParser3087); if (state.failed) return;

		pushFollow(FOLLOW_typeName_in_synpred3_CivlCParser3089);
		typeName();
		state._fsp--;
		if (state.failed) return;

		match(input,RPAREN,FOLLOW_RPAREN_in_synpred3_CivlCParser3091); 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:475:11: ( AT )
		// CivlCParser.g:475:12: AT
		{
		match(input,AT,FOLLOW_AT_in_synpred4_CivlCParser3172); if (state.failed) return;

		}

	}
	// $ANTLR end synpred4_CivlCParser

	// $ANTLR start synpred5_CivlCParser
	public final void synpred5_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:483:11: ( STAR )
		// CivlCParser.g:483:12: STAR
		{
		match(input,STAR,FOLLOW_STAR_in_synpred5_CivlCParser3253); if (state.failed) return;

		}

	}
	// $ANTLR end synpred5_CivlCParser

	// $ANTLR start synpred6_CivlCParser
	public final void synpred6_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:485:11: ( DIV )
		// CivlCParser.g:485:12: DIV
		{
		match(input,DIV,FOLLOW_DIV_in_synpred6_CivlCParser3304); if (state.failed) return;

		}

	}
	// $ANTLR end synpred6_CivlCParser

	// $ANTLR start synpred7_CivlCParser
	public final void synpred7_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:487:11: ( MOD )
		// CivlCParser.g:487:12: MOD
		{
		match(input,MOD,FOLLOW_MOD_in_synpred7_CivlCParser3355); if (state.failed) return;

		}

	}
	// $ANTLR end synpred7_CivlCParser

	// $ANTLR start synpred8_CivlCParser
	public final void synpred8_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:495:11: ( PLUS )
		// CivlCParser.g:495:12: PLUS
		{
		match(input,PLUS,FOLLOW_PLUS_in_synpred8_CivlCParser3436); if (state.failed) return;

		}

	}
	// $ANTLR end synpred8_CivlCParser

	// $ANTLR start synpred9_CivlCParser
	public final void synpred9_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:497:11: ( SUB )
		// CivlCParser.g:497:12: SUB
		{
		match(input,SUB,FOLLOW_SUB_in_synpred9_CivlCParser3485); if (state.failed) return;

		}

	}
	// $ANTLR end synpred9_CivlCParser

	// $ANTLR start synpred10_CivlCParser
	public final void synpred10_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:506:11: ( DOTDOT )
		// CivlCParser.g:506:12: DOTDOT
		{
		match(input,DOTDOT,FOLLOW_DOTDOT_in_synpred10_CivlCParser3560); if (state.failed) return;

		}

	}
	// $ANTLR end synpred10_CivlCParser

	// $ANTLR start synpred11_CivlCParser
	public final void synpred11_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:513:11: ( HASH )
		// CivlCParser.g:513:12: HASH
		{
		match(input,HASH,FOLLOW_HASH_in_synpred11_CivlCParser3637); if (state.failed) return;

		}

	}
	// $ANTLR end synpred11_CivlCParser

	// $ANTLR start synpred12_CivlCParser
	public final void synpred12_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:521:11: ( SHIFTLEFT )
		// CivlCParser.g:521:12: SHIFTLEFT
		{
		match(input,SHIFTLEFT,FOLLOW_SHIFTLEFT_in_synpred12_CivlCParser3713); if (state.failed) return;

		}

	}
	// $ANTLR end synpred12_CivlCParser

	// $ANTLR start synpred13_CivlCParser
	public final void synpred13_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:523:11: ( SHIFTRIGHT )
		// CivlCParser.g:523:12: SHIFTRIGHT
		{
		match(input,SHIFTRIGHT,FOLLOW_SHIFTRIGHT_in_synpred13_CivlCParser3762); if (state.failed) return;

		}

	}
	// $ANTLR end synpred13_CivlCParser

	// $ANTLR start synpred14_CivlCParser
	public final void synpred14_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:531:11: ( relationalOperator )
		// CivlCParser.g:531:12: relationalOperator
		{
		pushFollow(FOLLOW_relationalOperator_in_synpred14_CivlCParser3843);
		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:546:11: ( equalityOperator )
		// CivlCParser.g:546:12: equalityOperator
		{
		pushFollow(FOLLOW_equalityOperator_in_synpred15_CivlCParser3981);
		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:561:11: ( AMPERSAND )
		// CivlCParser.g:561:12: AMPERSAND
		{
		match(input,AMPERSAND,FOLLOW_AMPERSAND_in_synpred16_CivlCParser4116); if (state.failed) return;

		}

	}
	// $ANTLR end synpred16_CivlCParser

	// $ANTLR start synpred17_CivlCParser
	public final void synpred17_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:569:11: ( BITXOR )
		// CivlCParser.g:569:12: BITXOR
		{
		match(input,BITXOR,FOLLOW_BITXOR_in_synpred17_CivlCParser4199); if (state.failed) return;

		}

	}
	// $ANTLR end synpred17_CivlCParser

	// $ANTLR start synpred18_CivlCParser
	public final void synpred18_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:577:11: ( BITOR )
		// CivlCParser.g:577:12: BITOR
		{
		match(input,BITOR,FOLLOW_BITOR_in_synpred18_CivlCParser4282); if (state.failed) return;

		}

	}
	// $ANTLR end synpred18_CivlCParser

	// $ANTLR start synpred19_CivlCParser
	public final void synpred19_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:585:11: ( AND )
		// CivlCParser.g:585:12: AND
		{
		match(input,AND,FOLLOW_AND_in_synpred19_CivlCParser4365); if (state.failed) return;

		}

	}
	// $ANTLR end synpred19_CivlCParser

	// $ANTLR start synpred20_CivlCParser
	public final void synpred20_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:593:11: ( OR )
		// CivlCParser.g:593:12: OR
		{
		match(input,OR,FOLLOW_OR_in_synpred20_CivlCParser4456); if (state.failed) return;

		}

	}
	// $ANTLR end synpred20_CivlCParser

	// $ANTLR start synpred21_CivlCParser
	public final void synpred21_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:602:11: ( IMPLIES )
		// CivlCParser.g:602:12: IMPLIES
		{
		match(input,IMPLIES,FOLLOW_IMPLIES_in_synpred21_CivlCParser4550); if (state.failed) return;

		}

	}
	// $ANTLR end synpred21_CivlCParser

	// $ANTLR start synpred22_CivlCParser
	public final void synpred22_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:611:11: ( QMARK )
		// CivlCParser.g:611:12: QMARK
		{
		match(input,QMARK,FOLLOW_QMARK_in_synpred22_CivlCParser4636); if (state.failed) return;

		}

	}
	// $ANTLR end synpred22_CivlCParser

	// $ANTLR start synpred23_CivlCParser
	public final void synpred23_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:639:5: ( LPAREN typeName RPAREN LAMBDA LPAREN boundVariableDeclarationList BITOR )
		// CivlCParser.g:639:6: LPAREN typeName RPAREN LAMBDA LPAREN boundVariableDeclarationList BITOR
		{
		match(input,LPAREN,FOLLOW_LPAREN_in_synpred23_CivlCParser4904); if (state.failed) return;

		pushFollow(FOLLOW_typeName_in_synpred23_CivlCParser4906);
		typeName();
		state._fsp--;
		if (state.failed) return;

		match(input,RPAREN,FOLLOW_RPAREN_in_synpred23_CivlCParser4908); if (state.failed) return;

		match(input,LAMBDA,FOLLOW_LAMBDA_in_synpred23_CivlCParser4910); if (state.failed) return;

		match(input,LPAREN,FOLLOW_LPAREN_in_synpred23_CivlCParser4912); if (state.failed) return;

		pushFollow(FOLLOW_boundVariableDeclarationList_in_synpred23_CivlCParser4930);
		boundVariableDeclarationList();
		state._fsp--;
		if (state.failed) return;

		match(input,BITOR,FOLLOW_BITOR_in_synpred23_CivlCParser4932); if (state.failed) return;

		}

	}
	// $ANTLR end synpred23_CivlCParser

	// $ANTLR start synpred24_CivlCParser
	public final void synpred24_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:675:4: ( arrayLambdaExpression )
		// CivlCParser.g:675:5: arrayLambdaExpression
		{
		pushFollow(FOLLOW_arrayLambdaExpression_in_synpred24_CivlCParser5245);
		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:676:4: ( unaryExpression assignmentOperator )
		// CivlCParser.g:676:5: unaryExpression assignmentOperator
		{
		pushFollow(FOLLOW_unaryExpression_in_synpred25_CivlCParser5255);
		unaryExpression();
		state._fsp--;
		if (state.failed) return;

		pushFollow(FOLLOW_assignmentOperator_in_synpred25_CivlCParser5257);
		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:700:6: ( COMMA )
		// CivlCParser.g:700:7: COMMA
		{
		match(input,COMMA,FOLLOW_COMMA_in_synpred26_CivlCParser5418); if (state.failed) return;

		}

	}
	// $ANTLR end synpred26_CivlCParser

	// $ANTLR start synpred27_CivlCParser
	public final void synpred27_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:793:4: ( typeSpecifier )
		// CivlCParser.g:793:5: typeSpecifier
		{
		pushFollow(FOLLOW_typeSpecifier_in_synpred27_CivlCParser5683);
		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:1011:8: ( SYSTEM libraryName )
		// CivlCParser.g:1011:9: SYSTEM libraryName
		{
		match(input,SYSTEM,FOLLOW_SYSTEM_in_synpred28_CivlCParser6898); if (state.failed) return;

		pushFollow(FOLLOW_libraryName_in_synpred28_CivlCParser6900);
		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:1250:4: ( declarator )
		// CivlCParser.g:1250:5: declarator
		{
		pushFollow(FOLLOW_declarator_in_synpred29_CivlCParser8143);
		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:1547:11: ( ELSE )
		// CivlCParser.g:1547:12: ELSE
		{
		match(input,ELSE,FOLLOW_ELSE_in_synpred30_CivlCParser9751); if (state.failed) return;

		}

	}
	// $ANTLR end synpred30_CivlCParser

	// $ANTLR start synpred31_CivlCParser
	public final void synpred31_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:1857:4: ( declarator contract declarationList_opt LCURLY )
		// CivlCParser.g:1857:5: declarator contract declarationList_opt LCURLY
		{
		pushFollow(FOLLOW_declarator_in_synpred31_CivlCParser11383);
		declarator();
		state._fsp--;
		if (state.failed) return;

		pushFollow(FOLLOW_contract_in_synpred31_CivlCParser11385);
		contract();
		state._fsp--;
		if (state.failed) return;

		pushFollow(FOLLOW_declarationList_opt_in_synpred31_CivlCParser11387);
		declarationList_opt();
		state._fsp--;
		if (state.failed) return;

		match(input,LCURLY,FOLLOW_LCURLY_in_synpred31_CivlCParser11389); if (state.failed) return;

		}

	}
	// $ANTLR end synpred31_CivlCParser

	// $ANTLR start synpred32_CivlCParser
	public final void synpred32_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:1859:4: ( declarationSpecifiers declarator contract declarationList_opt LCURLY )
		// CivlCParser.g:1859:5: declarationSpecifiers declarator contract declarationList_opt LCURLY
		{
		pushFollow(FOLLOW_declarationSpecifiers_in_synpred32_CivlCParser11402);
		declarationSpecifiers();
		state._fsp--;
		if (state.failed) return;

		pushFollow(FOLLOW_declarator_in_synpred32_CivlCParser11404);
		declarator();
		state._fsp--;
		if (state.failed) return;

		pushFollow(FOLLOW_contract_in_synpred32_CivlCParser11406);
		contract();
		state._fsp--;
		if (state.failed) return;

		pushFollow(FOLLOW_declarationList_opt_in_synpred32_CivlCParser11408);
		declarationList_opt();
		state._fsp--;
		if (state.failed) return;

		match(input,LCURLY,FOLLOW_LCURLY_in_synpred32_CivlCParser11410); 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 DFA76 dfa76 = new DFA76(this);
	protected DFA85 dfa85 = new DFA85(this);
	protected DFA86 dfa86 = new DFA86(this);
	protected DFA98 dfa98 = new DFA98(this);
	protected DFA102 dfa102 = new DFA102(this);
	protected DFA121 dfa121 = new DFA121(this);
	protected DFA149 dfa149 = new DFA149(this);
	static final String DFA76_eotS =
		"\36\uffff";
	static final String DFA76_eofS =
		"\36\uffff";
	static final String DFA76_minS =
		"\1\172\5\uffff\1\26\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 DFA76_maxS =
		"\1\u00d1\5\uffff\1\u00dc\4\uffff\1\u0124\1\uffff\1\162\1\u0124\1\uffff"+
		"\1\0\1\uffff\1\u0124\1\161\1\u0124\1\161\1\0\1\u0124\1\161\2\0\1\161\2"+
		"\0";
	static final String DFA76_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 DFA76_specialS =
		"\15\uffff\1\5\1\7\1\uffff\1\0\1\uffff\1\11\1\10\1\12\1\15\1\1\1\13\1\6"+
		"\1\2\1\16\1\14\1\3\1\4}>";
	static final String[] DFA76_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\17\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\17\uffff\1\14\15\uffff\1\14\10\uffff\1\14\15\uffff\1\15\11\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\107"+
			"\uffff\1\14",
			"",
			"\2\14\2\uffff\10\14\12\uffff\4\14\7\uffff\1\14\10\uffff\2\14\11\uffff"+
			"\1\17\3\uffff\1\14\11\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\17\uffff\1\14\15\uffff\1\14\10\uffff\1\14\15\uffff\1\23\11\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\111\uffff\1\14",
			"",
			"\1\uffff",
			"",
			"\1\14\17\uffff\1\14\15\uffff\1\14\10\uffff\1\14\15\uffff\1\25\11\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\111\uffff\1\14",
			"\2\14\2\uffff\1\14\1\uffff\1\14\1\uffff\1\14\1\uffff\1\14\13\uffff\1"+
			"\14\1\uffff\2\14\7\uffff\1\14\10\uffff\2\14\11\uffff\1\17\3\uffff\1\14"+
			"\11\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\17\uffff\1\14\15\uffff\1\14\10\uffff\1\14\15\uffff\1\30\11\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\111\uffff\1\14",
			"\2\14\2\uffff\1\14\1\uffff\1\14\1\uffff\1\14\1\uffff\1\14\13\uffff\1"+
			"\14\1\uffff\2\14\7\uffff\1\14\10\uffff\2\14\11\uffff\1\17\3\uffff\1\14"+
			"\11\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\17\uffff\1\14\15\uffff\1\14\10\uffff\1\14\15\uffff\1\33\11\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\111\uffff\1\14",
			"\2\14\2\uffff\1\14\1\uffff\1\14\1\uffff\1\14\1\uffff\1\14\13\uffff\1"+
			"\14\1\uffff\2\14\7\uffff\1\14\10\uffff\2\14\11\uffff\1\17\3\uffff\1\14"+
			"\11\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\13\uffff\1"+
			"\14\1\uffff\2\14\7\uffff\1\14\10\uffff\2\14\11\uffff\1\17\3\uffff\1\14"+
			"\11\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[] DFA76_eot = DFA.unpackEncodedString(DFA76_eotS);
	static final short[] DFA76_eof = DFA.unpackEncodedString(DFA76_eofS);
	static final char[] DFA76_min = DFA.unpackEncodedStringToUnsignedChars(DFA76_minS);
	static final char[] DFA76_max = DFA.unpackEncodedStringToUnsignedChars(DFA76_maxS);
	static final short[] DFA76_accept = DFA.unpackEncodedString(DFA76_acceptS);
	static final short[] DFA76_special = DFA.unpackEncodedString(DFA76_specialS);
	static final short[][] DFA76_transition;

	static {
		int numStates = DFA76_transitionS.length;
		DFA76_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA76_transition[i] = DFA.unpackEncodedString(DFA76_transitionS[i]);
		}
	}

	protected class DFA76 extends DFA {

		public DFA76(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 76;
			this.eot = DFA76_eot;
			this.eof = DFA76_eof;
			this.min = DFA76_min;
			this.max = DFA76_max;
			this.accept = DFA76_accept;
			this.special = DFA76_special;
			this.transition = DFA76_transition;
		}
		@Override
		public String getDescription() {
			return "1006: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 LA76_16 = input.LA(1);
						 
						int index76_16 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred28_CivlCParser()) ) {s = 17;}
						else if ( (true) ) {s = 12;}
						 
						input.seek(index76_16);
						if ( s>=0 ) return s;
						break;

					case 1 : 
						int LA76_22 = input.LA(1);
						 
						int index76_22 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred28_CivlCParser()) ) {s = 17;}
						else if ( (true) ) {s = 12;}
						 
						input.seek(index76_22);
						if ( s>=0 ) return s;
						break;

					case 2 : 
						int LA76_25 = input.LA(1);
						 
						int index76_25 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred28_CivlCParser()) ) {s = 17;}
						else if ( (true) ) {s = 12;}
						 
						input.seek(index76_25);
						if ( s>=0 ) return s;
						break;

					case 3 : 
						int LA76_28 = input.LA(1);
						 
						int index76_28 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred28_CivlCParser()) ) {s = 17;}
						else if ( (true) ) {s = 12;}
						 
						input.seek(index76_28);
						if ( s>=0 ) return s;
						break;

					case 4 : 
						int LA76_29 = input.LA(1);
						 
						int index76_29 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred28_CivlCParser()) ) {s = 17;}
						else if ( (true) ) {s = 12;}
						 
						input.seek(index76_29);
						if ( s>=0 ) return s;
						break;

					case 5 : 
						int LA76_13 = input.LA(1);
						 
						int index76_13 = input.index();
						input.rewind();
						s = -1;
						if ( (LA76_13==SUB) ) {s = 14;}
						else if ( (LA76_13==IDENTIFIER) && (synpred28_CivlCParser())) {s = 15;}
						else if ( (LA76_13==RSQUARE) ) {s = 16;}
						else if ( ((LA76_13 >= AMPERSAND && LA76_13 <= AND)||(LA76_13 >= ARROW && LA76_13 <= BITXOREQ)||(LA76_13 >= DIV && LA76_13 <= DOTDOT)||LA76_13==EQUALS||(LA76_13 >= GT && LA76_13 <= GTE)||LA76_13==IMPLIES||LA76_13==LEXCON||LA76_13==LPAREN||(LA76_13 >= LSQUARE && LA76_13 <= LTE)||(LA76_13 >= MINUSMINUS && LA76_13 <= NEQ)||LA76_13==OR||(LA76_13 >= PLUS && LA76_13 <= PLUSPLUS)||LA76_13==QMARK||(LA76_13 >= SHIFTLEFT && LA76_13 <= STAREQ)||LA76_13==SUBEQ) ) {s = 12;}
						 
						input.seek(index76_13);
						if ( s>=0 ) return s;
						break;

					case 6 : 
						int LA76_24 = input.LA(1);
						 
						int index76_24 = input.index();
						input.rewind();
						s = -1;
						if ( (LA76_24==RSQUARE) ) {s = 28;}
						else if ( (LA76_24==SUB) ) {s = 14;}
						else if ( (LA76_24==IDENTIFIER) && (synpred28_CivlCParser())) {s = 15;}
						else if ( ((LA76_24 >= AMPERSAND && LA76_24 <= AND)||LA76_24==ARROW||LA76_24==AT||LA76_24==BITOR||LA76_24==BITXOR||LA76_24==DIV||(LA76_24 >= DOT && LA76_24 <= DOTDOT)||LA76_24==EQUALS||(LA76_24 >= GT && LA76_24 <= GTE)||LA76_24==IMPLIES||LA76_24==LEXCON||LA76_24==LPAREN||(LA76_24 >= LSQUARE && LA76_24 <= LTE)||(LA76_24 >= MINUSMINUS && LA76_24 <= MOD)||LA76_24==NEQ||LA76_24==OR||LA76_24==PLUS||LA76_24==PLUSPLUS||LA76_24==QMARK||LA76_24==SHIFTLEFT||LA76_24==SHIFTRIGHT||LA76_24==STAR) ) {s = 12;}
						 
						input.seek(index76_24);
						if ( s>=0 ) return s;
						break;

					case 7 : 
						int LA76_14 = input.LA(1);
						 
						int index76_14 = input.index();
						input.rewind();
						s = -1;
						if ( (LA76_14==RSQUARE) && (synpred28_CivlCParser())) {s = 17;}
						else if ( (LA76_14==SUB) ) {s = 18;}
						else if ( (LA76_14==IDENTIFIER) ) {s = 19;}
						else if ( (LA76_14==AMPERSAND||LA76_14==CHARACTER_CONSTANT||LA76_14==ELLIPSIS||LA76_14==FLOATING_CONSTANT||LA76_14==INTEGER_CONSTANT||LA76_14==LPAREN||LA76_14==MINUSMINUS||LA76_14==NOT||LA76_14==PLUS||LA76_14==PLUSPLUS||LA76_14==STAR||LA76_14==STRING_LITERAL||LA76_14==TILDE||LA76_14==ALIGNOF||LA76_14==BIG_O||LA76_14==CALLS||LA76_14==DERIV||LA76_14==GENERIC||LA76_14==HERE||LA76_14==PROCNULL||LA76_14==RESULT||(LA76_14 >= SCOPEOF && LA76_14 <= SELF)||(LA76_14 >= SIZEOF && LA76_14 <= SPAWN)||LA76_14==STATE_NULL||LA76_14==VALUE_AT||LA76_14==SUM) ) {s = 12;}
						 
						input.seek(index76_14);
						if ( s>=0 ) return s;
						break;

					case 8 : 
						int LA76_19 = input.LA(1);
						 
						int index76_19 = input.index();
						input.rewind();
						s = -1;
						if ( (LA76_19==RSQUARE) ) {s = 22;}
						else if ( (LA76_19==SUB) ) {s = 14;}
						else if ( (LA76_19==IDENTIFIER) && (synpred28_CivlCParser())) {s = 15;}
						else if ( ((LA76_19 >= AMPERSAND && LA76_19 <= AND)||LA76_19==ARROW||LA76_19==AT||LA76_19==BITOR||LA76_19==BITXOR||LA76_19==DIV||(LA76_19 >= DOT && LA76_19 <= DOTDOT)||LA76_19==EQUALS||(LA76_19 >= GT && LA76_19 <= GTE)||LA76_19==IMPLIES||LA76_19==LEXCON||LA76_19==LPAREN||(LA76_19 >= LSQUARE && LA76_19 <= LTE)||(LA76_19 >= MINUSMINUS && LA76_19 <= MOD)||LA76_19==NEQ||LA76_19==OR||LA76_19==PLUS||LA76_19==PLUSPLUS||LA76_19==QMARK||LA76_19==SHIFTLEFT||LA76_19==SHIFTRIGHT||LA76_19==STAR) ) {s = 12;}
						 
						input.seek(index76_19);
						if ( s>=0 ) return s;
						break;

					case 9 : 
						int LA76_18 = input.LA(1);
						 
						int index76_18 = input.index();
						input.rewind();
						s = -1;
						if ( (LA76_18==RSQUARE) && (synpred28_CivlCParser())) {s = 17;}
						else if ( (LA76_18==SUB) ) {s = 20;}
						else if ( (LA76_18==IDENTIFIER) ) {s = 21;}
						else if ( (LA76_18==AMPERSAND||LA76_18==CHARACTER_CONSTANT||LA76_18==ELLIPSIS||LA76_18==FLOATING_CONSTANT||LA76_18==INTEGER_CONSTANT||LA76_18==LPAREN||LA76_18==MINUSMINUS||LA76_18==NOT||LA76_18==PLUS||LA76_18==PLUSPLUS||LA76_18==STAR||LA76_18==STRING_LITERAL||LA76_18==TILDE||LA76_18==ALIGNOF||LA76_18==BIG_O||LA76_18==CALLS||LA76_18==DERIV||LA76_18==EXISTS||(LA76_18 >= FORALL && LA76_18 <= GENERIC)||LA76_18==HERE||LA76_18==PROCNULL||LA76_18==RESULT||(LA76_18 >= SCOPEOF && LA76_18 <= SELF)||(LA76_18 >= SIZEOF && LA76_18 <= SPAWN)||LA76_18==STATE_NULL||LA76_18==UNIFORM||LA76_18==VALUE_AT||LA76_18==SUM) ) {s = 12;}
						 
						input.seek(index76_18);
						if ( s>=0 ) return s;
						break;

					case 10 : 
						int LA76_20 = input.LA(1);
						 
						int index76_20 = input.index();
						input.rewind();
						s = -1;
						if ( (LA76_20==RSQUARE) && (synpred28_CivlCParser())) {s = 17;}
						else if ( (LA76_20==SUB) ) {s = 23;}
						else if ( (LA76_20==IDENTIFIER) ) {s = 24;}
						else if ( (LA76_20==AMPERSAND||LA76_20==CHARACTER_CONSTANT||LA76_20==ELLIPSIS||LA76_20==FLOATING_CONSTANT||LA76_20==INTEGER_CONSTANT||LA76_20==LPAREN||LA76_20==MINUSMINUS||LA76_20==NOT||LA76_20==PLUS||LA76_20==PLUSPLUS||LA76_20==STAR||LA76_20==STRING_LITERAL||LA76_20==TILDE||LA76_20==ALIGNOF||LA76_20==BIG_O||LA76_20==CALLS||LA76_20==DERIV||LA76_20==EXISTS||(LA76_20 >= FORALL && LA76_20 <= GENERIC)||LA76_20==HERE||LA76_20==PROCNULL||LA76_20==RESULT||(LA76_20 >= SCOPEOF && LA76_20 <= SELF)||(LA76_20 >= SIZEOF && LA76_20 <= SPAWN)||LA76_20==STATE_NULL||LA76_20==UNIFORM||LA76_20==VALUE_AT||LA76_20==SUM) ) {s = 12;}
						 
						input.seek(index76_20);
						if ( s>=0 ) return s;
						break;

					case 11 : 
						int LA76_23 = input.LA(1);
						 
						int index76_23 = input.index();
						input.rewind();
						s = -1;
						if ( (LA76_23==RSQUARE) && (synpred28_CivlCParser())) {s = 17;}
						else if ( (LA76_23==SUB) ) {s = 26;}
						else if ( (LA76_23==IDENTIFIER) ) {s = 27;}
						else if ( (LA76_23==AMPERSAND||LA76_23==CHARACTER_CONSTANT||LA76_23==ELLIPSIS||LA76_23==FLOATING_CONSTANT||LA76_23==INTEGER_CONSTANT||LA76_23==LPAREN||LA76_23==MINUSMINUS||LA76_23==NOT||LA76_23==PLUS||LA76_23==PLUSPLUS||LA76_23==STAR||LA76_23==STRING_LITERAL||LA76_23==TILDE||LA76_23==ALIGNOF||LA76_23==BIG_O||LA76_23==CALLS||LA76_23==DERIV||LA76_23==EXISTS||(LA76_23 >= FORALL && LA76_23 <= GENERIC)||LA76_23==HERE||LA76_23==PROCNULL||LA76_23==RESULT||(LA76_23 >= SCOPEOF && LA76_23 <= SELF)||(LA76_23 >= SIZEOF && LA76_23 <= SPAWN)||LA76_23==STATE_NULL||LA76_23==UNIFORM||LA76_23==VALUE_AT||LA76_23==SUM) ) {s = 12;}
						 
						input.seek(index76_23);
						if ( s>=0 ) return s;
						break;

					case 12 : 
						int LA76_27 = input.LA(1);
						 
						int index76_27 = input.index();
						input.rewind();
						s = -1;
						if ( (LA76_27==RSQUARE) ) {s = 29;}
						else if ( (LA76_27==SUB) ) {s = 14;}
						else if ( (LA76_27==IDENTIFIER) && (synpred28_CivlCParser())) {s = 15;}
						else if ( ((LA76_27 >= AMPERSAND && LA76_27 <= AND)||LA76_27==ARROW||LA76_27==AT||LA76_27==BITOR||LA76_27==BITXOR||LA76_27==DIV||(LA76_27 >= DOT && LA76_27 <= DOTDOT)||LA76_27==EQUALS||(LA76_27 >= GT && LA76_27 <= GTE)||LA76_27==IMPLIES||LA76_27==LEXCON||LA76_27==LPAREN||(LA76_27 >= LSQUARE && LA76_27 <= LTE)||(LA76_27 >= MINUSMINUS && LA76_27 <= MOD)||LA76_27==NEQ||LA76_27==OR||LA76_27==PLUS||LA76_27==PLUSPLUS||LA76_27==QMARK||LA76_27==SHIFTLEFT||LA76_27==SHIFTRIGHT||LA76_27==STAR) ) {s = 12;}
						 
						input.seek(index76_27);
						if ( s>=0 ) return s;
						break;

					case 13 : 
						int LA76_21 = input.LA(1);
						 
						int index76_21 = input.index();
						input.rewind();
						s = -1;
						if ( (LA76_21==RSQUARE) ) {s = 25;}
						else if ( (LA76_21==SUB) ) {s = 14;}
						else if ( (LA76_21==IDENTIFIER) && (synpred28_CivlCParser())) {s = 15;}
						else if ( ((LA76_21 >= AMPERSAND && LA76_21 <= AND)||LA76_21==ARROW||LA76_21==AT||LA76_21==BITOR||LA76_21==BITXOR||LA76_21==DIV||(LA76_21 >= DOT && LA76_21 <= DOTDOT)||LA76_21==EQUALS||(LA76_21 >= GT && LA76_21 <= GTE)||LA76_21==IMPLIES||LA76_21==LEXCON||LA76_21==LPAREN||(LA76_21 >= LSQUARE && LA76_21 <= LTE)||(LA76_21 >= MINUSMINUS && LA76_21 <= MOD)||LA76_21==NEQ||LA76_21==OR||LA76_21==PLUS||LA76_21==PLUSPLUS||LA76_21==QMARK||LA76_21==SHIFTLEFT||LA76_21==SHIFTRIGHT||LA76_21==STAR) ) {s = 12;}
						 
						input.seek(index76_21);
						if ( s>=0 ) return s;
						break;

					case 14 : 
						int LA76_26 = input.LA(1);
						 
						int index76_26 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred28_CivlCParser()) ) {s = 17;}
						else if ( (true) ) {s = 12;}
						 
						input.seek(index76_26);
						if ( s>=0 ) return s;
						break;
			}
			if (state.backtracking>0) {state.failed=true; return -1;}
			NoViableAltException nvae =
				new NoViableAltException(getDescription(), 76, _s, input);
			error(nvae);
			throw nvae;
		}
	}

	static final String DFA85_eotS =
		"\7\uffff";
	static final String DFA85_eofS =
		"\7\uffff";
	static final String DFA85_minS =
		"\2\4\1\uffff\1\4\3\uffff";
	static final String DFA85_maxS =
		"\2\u0124\1\uffff\1\u0124\3\uffff";
	static final String DFA85_acceptS =
		"\2\uffff\1\1\1\uffff\1\2\1\3\1\4";
	static final String DFA85_specialS =
		"\7\uffff}>";
	static final String[] DFA85_transitionS = {
			"\1\2\17\uffff\1\2\15\uffff\1\2\10\uffff\1\2\15\uffff\1\2\11\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\107\uffff\1\2",
			"\1\2\17\uffff\1\2\15\uffff\1\2\10\uffff\1\2\15\uffff\1\2\11\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\107\uffff\1\2",
			"",
			"\1\2\17\uffff\1\2\15\uffff\1\2\10\uffff\1\2\15\uffff\1\2\11\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\111\uffff\1\2",
			"",
			"",
			""
	};

	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: ( 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 DFA86_eotS =
		"\11\uffff";
	static final String DFA86_eofS =
		"\11\uffff";
	static final String DFA86_minS =
		"\1\71\1\uffff\1\26\1\uffff\1\42\1\0\1\26\1\uffff\1\0";
	static final String DFA86_maxS =
		"\1\u00dc\1\uffff\1\u00dc\1\uffff\1\u00dc\1\0\1\u00dc\1\uffff\1\0";
	static final String DFA86_acceptS =
		"\1\uffff\1\1\1\uffff\1\3\3\uffff\1\2\1\uffff";
	static final String DFA86_specialS =
		"\5\uffff\1\0\2\uffff\1\1}>";
	static final String[] DFA86_transitionS = {
			"\1\2\53\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\17\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\100\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\17\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[] DFA86_eot = DFA.unpackEncodedString(DFA86_eotS);
	static final short[] DFA86_eof = DFA.unpackEncodedString(DFA86_eofS);
	static final char[] DFA86_min = DFA.unpackEncodedStringToUnsignedChars(DFA86_minS);
	static final char[] DFA86_max = DFA.unpackEncodedStringToUnsignedChars(DFA86_maxS);
	static final short[] DFA86_accept = DFA.unpackEncodedString(DFA86_acceptS);
	static final short[] DFA86_special = DFA.unpackEncodedString(DFA86_specialS);
	static final short[][] DFA86_transition;

	static {
		int numStates = DFA86_transitionS.length;
		DFA86_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA86_transition[i] = DFA.unpackEncodedString(DFA86_transitionS[i]);
		}
	}

	protected class DFA86 extends DFA {

		public DFA86(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 86;
			this.eot = DFA86_eot;
			this.eof = DFA86_eof;
			this.min = DFA86_min;
			this.max = DFA86_max;
			this.accept = DFA86_accept;
			this.special = DFA86_special;
			this.transition = DFA86_transition;
		}
		@Override
		public String getDescription() {
			return "1136: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 LA86_5 = input.LA(1);
						 
						int index86_5 = input.index();
						input.rewind();
						s = -1;
						if ( (((isTypeName(input.LT(1).getText()))&&((!Symbols_stack.peek().isFunctionDefinition)||(Symbols_stack.peek().isFunctionDefinition)))) ) {s = 1;}
						else if ( (true) ) {s = 7;}
						 
						input.seek(index86_5);
						if ( s>=0 ) return s;
						break;

					case 1 : 
						int LA86_8 = input.LA(1);
						 
						int index86_8 = input.index();
						input.rewind();
						s = -1;
						if ( (((isTypeName(input.LT(1).getText()))&&((!Symbols_stack.peek().isFunctionDefinition)||(Symbols_stack.peek().isFunctionDefinition)))) ) {s = 1;}
						else if ( (true) ) {s = 7;}
						 
						input.seek(index86_8);
						if ( s>=0 ) return s;
						break;
			}
			if (state.backtracking>0) {state.failed=true; return -1;}
			NoViableAltException nvae =
				new NoViableAltException(getDescription(), 86, _s, input);
			error(nvae);
			throw nvae;
		}
	}

	static final String DFA98_eotS =
		"\6\uffff";
	static final String DFA98_eofS =
		"\1\uffff\1\4\1\uffff\1\4\2\uffff";
	static final String DFA98_minS =
		"\1\111\1\25\1\uffff\1\25\2\uffff";
	static final String DFA98_maxS =
		"\1\156\1\u00dc\1\uffff\1\u00dc\2\uffff";
	static final String DFA98_acceptS =
		"\2\uffff\1\2\1\uffff\1\1\1\3";
	static final String DFA98_specialS =
		"\6\uffff}>";
	static final String[] DFA98_transitionS = {
			"\1\2\1\uffff\1\2\42\uffff\1\1",
			"\2\4\42\uffff\1\4\17\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\17\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[] DFA98_eot = DFA.unpackEncodedString(DFA98_eotS);
	static final short[] DFA98_eof = DFA.unpackEncodedString(DFA98_eofS);
	static final char[] DFA98_min = DFA.unpackEncodedStringToUnsignedChars(DFA98_minS);
	static final char[] DFA98_max = DFA.unpackEncodedStringToUnsignedChars(DFA98_maxS);
	static final short[] DFA98_accept = DFA.unpackEncodedString(DFA98_acceptS);
	static final short[] DFA98_special = DFA.unpackEncodedString(DFA98_specialS);
	static final short[][] DFA98_transition;

	static {
		int numStates = DFA98_transitionS.length;
		DFA98_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA98_transition[i] = DFA.unpackEncodedString(DFA98_transitionS[i]);
		}
	}

	protected class DFA98 extends DFA {

		public DFA98(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 98;
			this.eot = DFA98_eot;
			this.eof = DFA98_eof;
			this.min = DFA98_min;
			this.max = DFA98_max;
			this.accept = DFA98_accept;
			this.special = DFA98_special;
			this.transition = DFA98_transition;
		}
		@Override
		public String getDescription() {
			return "1285:1: abstractDeclarator : ( pointer -> ^( ABSTRACT_DECLARATOR pointer ABSENT ) | directAbstractDeclarator -> ^( ABSTRACT_DECLARATOR ABSENT directAbstractDeclarator ) | pointer directAbstractDeclarator -> ^( ABSTRACT_DECLARATOR pointer directAbstractDeclarator ) );";
		}
	}

	static final String DFA102_eotS =
		"\7\uffff";
	static final String DFA102_eofS =
		"\7\uffff";
	static final String DFA102_minS =
		"\2\4\1\uffff\1\4\3\uffff";
	static final String DFA102_maxS =
		"\2\u0124\1\uffff\1\u0124\3\uffff";
	static final String DFA102_acceptS =
		"\2\uffff\1\1\1\uffff\1\2\1\3\1\4";
	static final String DFA102_specialS =
		"\7\uffff}>";
	static final String[] DFA102_transitionS = {
			"\1\2\17\uffff\1\2\15\uffff\1\2\10\uffff\1\2\15\uffff\1\2\11\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\107\uffff\1\2",
			"\1\2\17\uffff\1\2\15\uffff\1\2\10\uffff\1\2\15\uffff\1\2\11\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\107\uffff\1\2",
			"",
			"\1\2\17\uffff\1\2\15\uffff\1\2\10\uffff\1\2\15\uffff\1\2\11\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\111\uffff\1\2",
			"",
			"",
			""
	};

	static final short[] DFA102_eot = DFA.unpackEncodedString(DFA102_eotS);
	static final short[] DFA102_eof = DFA.unpackEncodedString(DFA102_eofS);
	static final char[] DFA102_min = DFA.unpackEncodedStringToUnsignedChars(DFA102_minS);
	static final char[] DFA102_max = DFA.unpackEncodedStringToUnsignedChars(DFA102_maxS);
	static final short[] DFA102_accept = DFA.unpackEncodedString(DFA102_acceptS);
	static final short[] DFA102_special = DFA.unpackEncodedString(DFA102_specialS);
	static final short[][] DFA102_transition;

	static {
		int numStates = DFA102_transitionS.length;
		DFA102_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA102_transition[i] = DFA.unpackEncodedString(DFA102_transitionS[i]);
		}
	}

	protected class DFA102 extends DFA {

		public DFA102(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 102;
			this.eot = DFA102_eot;
			this.eof = DFA102_eof;
			this.min = DFA102_min;
			this.max = DFA102_max;
			this.accept = DFA102_accept;
			this.special = DFA102_special;
			this.transition = DFA102_transition;
		}
		@Override
		public String getDescription() {
			return "1353: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 DFA121_eotS =
		"\75\uffff";
	static final String DFA121_eofS =
		"\75\uffff";
	static final String DFA121_minS =
		"\1\4\22\uffff\1\0\51\uffff";
	static final String DFA121_maxS =
		"\1\u0124\22\uffff\1\0\51\uffff";
	static final String DFA121_acceptS =
		"\1\uffff\1\1\42\uffff\1\2\30\uffff";
	static final String DFA121_specialS =
		"\23\uffff\1\0\51\uffff}>";
	static final String[] DFA121_transitionS = {
			"\1\44\17\uffff\1\44\15\uffff\1\44\10\uffff\1\44\15\uffff\1\23\11\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"+
			"\107\uffff\1\44",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\uffff",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			""
	};

	static final short[] DFA121_eot = DFA.unpackEncodedString(DFA121_eotS);
	static final short[] DFA121_eof = DFA.unpackEncodedString(DFA121_eofS);
	static final char[] DFA121_min = DFA.unpackEncodedStringToUnsignedChars(DFA121_minS);
	static final char[] DFA121_max = DFA.unpackEncodedStringToUnsignedChars(DFA121_maxS);
	static final short[] DFA121_accept = DFA.unpackEncodedString(DFA121_acceptS);
	static final short[] DFA121_special = DFA.unpackEncodedString(DFA121_specialS);
	static final short[][] DFA121_transition;

	static {
		int numStates = DFA121_transitionS.length;
		DFA121_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA121_transition[i] = DFA.unpackEncodedString(DFA121_transitionS[i]);
		}
	}

	protected class DFA121 extends DFA {

		public DFA121(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 121;
			this.eot = DFA121_eot;
			this.eof = DFA121_eof;
			this.min = DFA121_min;
			this.max = DFA121_max;
			this.accept = DFA121_accept;
			this.special = DFA121_special;
			this.transition = DFA121_transition;
		}
		@Override
		public String getDescription() {
			return "1588: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 LA121_19 = input.LA(1);
						 
						int index121_19 = input.index();
						input.rewind();
						s = -1;
						if ( ((isTypeName(input.LT(1).getText()))) ) {s = 1;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index121_19);
						if ( s>=0 ) return s;
						break;
			}
			if (state.backtracking>0) {state.failed=true; return -1;}
			NoViableAltException nvae =
				new NoViableAltException(getDescription(), 121, _s, input);
			error(nvae);
			throw nvae;
		}
	}

	static final String DFA149_eotS =
		"\130\uffff";
	static final String DFA149_eofS =
		"\130\uffff";
	static final String DFA149_minS =
		"\1\4\44\0\63\uffff";
	static final String DFA149_maxS =
		"\1\u0124\44\0\63\uffff";
	static final String DFA149_acceptS =
		"\45\uffff\1\3\1\4\1\5\1\uffff\1\6\54\uffff\1\1\1\2";
	static final String DFA149_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\63\uffff}>";
	static final String[] DFA149_transitionS = {
			"\1\51\2\uffff\1\47\14\uffff\1\51\15\uffff\1\51\10\uffff\1\51\15\uffff"+
			"\1\1\1\51\5\uffff\1\47\2\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\104\uffff\1\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[] DFA149_eot = DFA.unpackEncodedString(DFA149_eotS);
	static final short[] DFA149_eof = DFA.unpackEncodedString(DFA149_eofS);
	static final char[] DFA149_min = DFA.unpackEncodedStringToUnsignedChars(DFA149_minS);
	static final char[] DFA149_max = DFA.unpackEncodedStringToUnsignedChars(DFA149_maxS);
	static final short[] DFA149_accept = DFA.unpackEncodedString(DFA149_acceptS);
	static final short[] DFA149_special = DFA.unpackEncodedString(DFA149_specialS);
	static final short[][] DFA149_transition;

	static {
		int numStates = DFA149_transitionS.length;
		DFA149_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA149_transition[i] = DFA.unpackEncodedString(DFA149_transitionS[i]);
		}
	}

	protected class DFA149 extends DFA {

		public DFA149(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 149;
			this.eot = DFA149_eot;
			this.eof = DFA149_eof;
			this.min = DFA149_min;
			this.max = DFA149_max;
			this.accept = DFA149_accept;
			this.special = DFA149_special;
			this.transition = DFA149_transition;
		}
		@Override
		public String getDescription() {
			return "1856: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 LA149_1 = input.LA(1);
						 
						int index149_1 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( ((isTypeName(input.LT(1).getText()))) ) {s = 37;}
						else if ( (true) ) {s = 41;}
						 
						input.seek(index149_1);
						if ( s>=0 ) return s;
						break;

					case 1 : 
						int LA149_2 = input.LA(1);
						 
						int index149_2 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 41;}
						 
						input.seek(index149_2);
						if ( s>=0 ) return s;
						break;

					case 2 : 
						int LA149_3 = input.LA(1);
						 
						int index149_3 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 41;}
						 
						input.seek(index149_3);
						if ( s>=0 ) return s;
						break;

					case 3 : 
						int LA149_4 = input.LA(1);
						 
						int index149_4 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_4);
						if ( s>=0 ) return s;
						break;

					case 4 : 
						int LA149_5 = input.LA(1);
						 
						int index149_5 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_5);
						if ( s>=0 ) return s;
						break;

					case 5 : 
						int LA149_6 = input.LA(1);
						 
						int index149_6 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_6);
						if ( s>=0 ) return s;
						break;

					case 6 : 
						int LA149_7 = input.LA(1);
						 
						int index149_7 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_7);
						if ( s>=0 ) return s;
						break;

					case 7 : 
						int LA149_8 = input.LA(1);
						 
						int index149_8 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_8);
						if ( s>=0 ) return s;
						break;

					case 8 : 
						int LA149_9 = input.LA(1);
						 
						int index149_9 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_9);
						if ( s>=0 ) return s;
						break;

					case 9 : 
						int LA149_10 = input.LA(1);
						 
						int index149_10 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_10);
						if ( s>=0 ) return s;
						break;

					case 10 : 
						int LA149_11 = input.LA(1);
						 
						int index149_11 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_11);
						if ( s>=0 ) return s;
						break;

					case 11 : 
						int LA149_12 = input.LA(1);
						 
						int index149_12 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_12);
						if ( s>=0 ) return s;
						break;

					case 12 : 
						int LA149_13 = input.LA(1);
						 
						int index149_13 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_13);
						if ( s>=0 ) return s;
						break;

					case 13 : 
						int LA149_14 = input.LA(1);
						 
						int index149_14 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_14);
						if ( s>=0 ) return s;
						break;

					case 14 : 
						int LA149_15 = input.LA(1);
						 
						int index149_15 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_15);
						if ( s>=0 ) return s;
						break;

					case 15 : 
						int LA149_16 = input.LA(1);
						 
						int index149_16 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_16);
						if ( s>=0 ) return s;
						break;

					case 16 : 
						int LA149_17 = input.LA(1);
						 
						int index149_17 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_17);
						if ( s>=0 ) return s;
						break;

					case 17 : 
						int LA149_18 = input.LA(1);
						 
						int index149_18 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_18);
						if ( s>=0 ) return s;
						break;

					case 18 : 
						int LA149_19 = input.LA(1);
						 
						int index149_19 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_19);
						if ( s>=0 ) return s;
						break;

					case 19 : 
						int LA149_20 = input.LA(1);
						 
						int index149_20 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_20);
						if ( s>=0 ) return s;
						break;

					case 20 : 
						int LA149_21 = input.LA(1);
						 
						int index149_21 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_21);
						if ( s>=0 ) return s;
						break;

					case 21 : 
						int LA149_22 = input.LA(1);
						 
						int index149_22 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_22);
						if ( s>=0 ) return s;
						break;

					case 22 : 
						int LA149_23 = input.LA(1);
						 
						int index149_23 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_23);
						if ( s>=0 ) return s;
						break;

					case 23 : 
						int LA149_24 = input.LA(1);
						 
						int index149_24 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_24);
						if ( s>=0 ) return s;
						break;

					case 24 : 
						int LA149_25 = input.LA(1);
						 
						int index149_25 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_25);
						if ( s>=0 ) return s;
						break;

					case 25 : 
						int LA149_26 = input.LA(1);
						 
						int index149_26 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_26);
						if ( s>=0 ) return s;
						break;

					case 26 : 
						int LA149_27 = input.LA(1);
						 
						int index149_27 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_27);
						if ( s>=0 ) return s;
						break;

					case 27 : 
						int LA149_28 = input.LA(1);
						 
						int index149_28 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_28);
						if ( s>=0 ) return s;
						break;

					case 28 : 
						int LA149_29 = input.LA(1);
						 
						int index149_29 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_29);
						if ( s>=0 ) return s;
						break;

					case 29 : 
						int LA149_30 = input.LA(1);
						 
						int index149_30 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_30);
						if ( s>=0 ) return s;
						break;

					case 30 : 
						int LA149_31 = input.LA(1);
						 
						int index149_31 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_31);
						if ( s>=0 ) return s;
						break;

					case 31 : 
						int LA149_32 = input.LA(1);
						 
						int index149_32 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_32);
						if ( s>=0 ) return s;
						break;

					case 32 : 
						int LA149_33 = input.LA(1);
						 
						int index149_33 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_33);
						if ( s>=0 ) return s;
						break;

					case 33 : 
						int LA149_34 = input.LA(1);
						 
						int index149_34 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_34);
						if ( s>=0 ) return s;
						break;

					case 34 : 
						int LA149_35 = input.LA(1);
						 
						int index149_35 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_35);
						if ( s>=0 ) return s;
						break;

					case 35 : 
						int LA149_36 = input.LA(1);
						 
						int index149_36 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 86;}
						else if ( (synpred32_CivlCParser()) ) {s = 87;}
						else if ( (true) ) {s = 37;}
						 
						input.seek(index149_36);
						if ( s>=0 ) return s;
						break;
			}
			if (state.backtracking>0) {state.failed=true; return -1;}
			NoViableAltException nvae =
				new NoViableAltException(getDescription(), 149, _s, input);
			error(nvae);
			throw nvae;
		}
	}

	public static final BitSet FOLLOW_quantifier_in_quantifiedExpression1161 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000A00L});
	public static final BitSet FOLLOW_intervalSeq_in_quantifiedExpression1163 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_quantifiedExpression1165 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000019A08180L});
	public static final BitSet FOLLOW_boundVariableDeclarationList_in_quantifiedExpression1167 = new BitSet(new long[]{0x0000000000001000L,0x0000002000000000L});
	public static final BitSet FOLLOW_BITOR_in_quantifiedExpression1179 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_conditionalExpression_in_quantifiedExpression1196 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_quantifiedExpression_in_quantifiedExpression1202 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_quantifiedExpression1217 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_expression_in_quantifiedExpression1233 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_quantifiedExpression1291 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_expression_in_quantifiedExpression1307 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_enumerationConstant_in_constant1375 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INTEGER_CONSTANT_in_constant1380 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FLOATING_CONSTANT_in_constant1385 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CHARACTER_CONSTANT_in_constant1390 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SELF_in_constant1395 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PROCNULL_in_constant1403 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STATE_NULL_in_constant1411 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RESULT_in_constant1416 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_HERE_in_constant1421 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ELLIPSIS_in_constant1429 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENTIFIER_in_enumerationConstant1444 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_constant_in_primaryExpression1469 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENTIFIER_in_primaryExpression1474 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STRING_LITERAL_in_primaryExpression1479 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_primaryExpression1487 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_compoundStatement_in_primaryExpression1489 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_primaryExpression1491 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_primaryExpression1516 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_expression_in_primaryExpression1518 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_primaryExpression1520 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_genericSelection_in_primaryExpression1545 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_derivativeExpression_in_primaryExpression1550 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_GENERIC_in_genericSelection1563 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_genericSelection1565 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_genericSelection1567 = new BitSet(new long[]{0x0000000000400000L});
	public static final BitSet FOLLOW_COMMA_in_genericSelection1569 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105826108L,0x0000000019A08180L});
	public static final BitSet FOLLOW_genericAssocList_in_genericSelection1571 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_genericSelection1573 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DERIV_in_derivativeExpression1604 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000800L});
	public static final BitSet FOLLOW_LSQUARE_in_derivativeExpression1606 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_derivativeExpression1608 = new BitSet(new long[]{0x0000000000400000L});
	public static final BitSet FOLLOW_COMMA_in_derivativeExpression1610 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_partialList_in_derivativeExpression1612 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_derivativeExpression1614 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_derivativeExpression1622 = new BitSet(new long[]{0x0200080400100010L,0x100B4020A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_argumentExpressionList_in_derivativeExpression1624 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_derivativeExpression1626 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_partial_in_partialList1670 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_COMMA_in_partialList1673 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_partial_in_partialList1675 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_LCURLY_in_partial1699 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_partial1701 = new BitSet(new long[]{0x0000000000400000L});
	public static final BitSet FOLLOW_COMMA_in_partial1703 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_INTEGER_CONSTANT_in_partial1705 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_partial1707 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_genericAssociation_in_genericAssocList1738 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_COMMA_in_genericAssocList1741 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105826108L,0x0000000019A08180L});
	public static final BitSet FOLLOW_genericAssociation_in_genericAssocList1743 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_typeName_in_genericAssociation1775 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_COLON_in_genericAssociation1777 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_genericAssociation1779 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DEFAULT_in_genericAssociation1802 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_COLON_in_genericAssociation1804 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_genericAssociation1806 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_postfixExpressionRoot_in_postfixExpression1838 = new BitSet(new long[]{0x0000000010000102L,0x0000000080010A80L});
	public static final BitSet FOLLOW_LSQUARE_in_postfixExpression1870 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_expression_in_postfixExpression1872 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_postfixExpression1874 = new BitSet(new long[]{0x0000000010000102L,0x0000000080010A80L});
	public static final BitSet FOLLOW_LPAREN_in_postfixExpression1979 = new BitSet(new long[]{0x0200080400100010L,0x100B4020A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_argumentExpressionList_in_postfixExpression1981 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_postfixExpression1983 = new BitSet(new long[]{0x0000000010000102L,0x0000000080010A80L});
	public static final BitSet FOLLOW_LEXCON_in_postfixExpression2055 = new BitSet(new long[]{0x0200080400100010L,0x100B4010A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_argumentExpressionList_in_postfixExpression2059 = new BitSet(new long[]{0x0000000000000000L,0x0000001000000000L});
	public static final BitSet FOLLOW_REXCON_in_postfixExpression2061 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_postfixExpression2075 = new BitSet(new long[]{0x0200080400100010L,0x100B4020A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_argumentExpressionList_in_postfixExpression2079 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_postfixExpression2081 = new BitSet(new long[]{0x0000000010000102L,0x0000000080010A80L});
	public static final BitSet FOLLOW_DOT_in_postfixExpression2126 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_postfixExpression2128 = new BitSet(new long[]{0x0000000010000102L,0x0000000080010A80L});
	public static final BitSet FOLLOW_ARROW_in_postfixExpression2163 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_postfixExpression2165 = new BitSet(new long[]{0x0000000010000102L,0x0000000080010A80L});
	public static final BitSet FOLLOW_PLUSPLUS_in_postfixExpression2202 = new BitSet(new long[]{0x0000000010000102L,0x0000000080010A80L});
	public static final BitSet FOLLOW_MINUSMINUS_in_postfixExpression2260 = new BitSet(new long[]{0x0000000010000102L,0x0000000080010A80L});
	public static final BitSet FOLLOW_LPAREN_in_postfixExpressionRoot2347 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000019A08180L});
	public static final BitSet FOLLOW_typeName_in_postfixExpressionRoot2349 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_postfixExpressionRoot2351 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_postfixExpressionRoot2353 = new BitSet(new long[]{0x0200080410100010L,0x100B4000A0210A48L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_initializerList_in_postfixExpressionRoot2355 = new BitSet(new long[]{0x0000000000400000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_postfixExpressionRoot2361 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_postfixExpressionRoot2367 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_postfixExpressionRoot2369 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_primaryExpression_in_postfixExpressionRoot2400 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_assignmentExpression_in_argumentExpressionList2416 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_argumentExpressionList2422 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_COMMA_in_argumentExpressionList2434 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_argumentExpressionList2439 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_argumentExpressionList2445 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_postfixExpression_in_unaryExpression2504 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PLUSPLUS_in_unaryExpression2511 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_unaryExpression_in_unaryExpression2513 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_MINUSMINUS_in_unaryExpression2555 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_unaryExpression_in_unaryExpression2557 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_unaryOperator_in_unaryExpression2597 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_castExpression_in_unaryExpression2602 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_unaryExpression2608 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SIZEOF_in_unaryExpression2646 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_unaryExpression2648 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000019A08180L});
	public static final BitSet FOLLOW_typeName_in_unaryExpression2650 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_unaryExpression2652 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SIZEOF_in_unaryExpression2675 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_unaryExpression_in_unaryExpression2677 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SCOPEOF_in_unaryExpression2700 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_unaryExpression_in_unaryExpression2702 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ALIGNOF_in_unaryExpression2723 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_unaryExpression2725 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000019A08180L});
	public static final BitSet FOLLOW_typeName_in_unaryExpression2727 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_unaryExpression2729 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_VALUE_AT_in_unaryExpression2750 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_unaryExpression2752 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_unaryExpression2764 = new BitSet(new long[]{0x0000000000400000L});
	public static final BitSet FOLLOW_COMMA_in_unaryExpression2766 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_unaryExpression2778 = new BitSet(new long[]{0x0000000000400000L});
	public static final BitSet FOLLOW_COMMA_in_unaryExpression2780 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_unaryExpression2793 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_quantifiedExpression_in_unaryExpression2799 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_unaryExpression2802 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_spawnExpression_in_unaryExpression2827 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_callsExpression_in_unaryExpression2835 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_sumExpression_in_unaryExpression2840 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SPAWN_in_spawnExpression2853 = new BitSet(new long[]{0x0200080400100000L,0x0001000000000208L,0x0100008800080000L,0x0000000000001011L});
	public static final BitSet FOLLOW_postfixExpressionRoot_in_spawnExpression2855 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_spawnExpression2857 = new BitSet(new long[]{0x0200080400100010L,0x100B4020A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_argumentExpressionList_in_spawnExpression2859 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_spawnExpression2861 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CALLS_in_callsExpression2910 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_callsExpression2912 = new BitSet(new long[]{0x0200080400100000L,0x0001000000000208L,0x0100008800080000L,0x0000000000001011L});
	public static final BitSet FOLLOW_postfixExpressionRoot_in_callsExpression2914 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_callsExpression2916 = new BitSet(new long[]{0x0200080400100010L,0x100B4020A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_argumentExpressionList_in_callsExpression2926 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_callsExpression2928 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_callsExpression2930 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SUM_in_sumExpression2988 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_sumExpression2990 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000019A08180L});
	public static final BitSet FOLLOW_boundVariableDeclarationList_in_sumExpression2992 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_sumExpression2994 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_sumExpression3004 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_sumExpression3010 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_castExpression3108 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000019A08180L});
	public static final BitSet FOLLOW_typeName_in_castExpression3110 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_castExpression3112 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_castExpression_in_castExpression3114 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_unaryExpression_in_castExpression3140 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_castExpression_in_remoteExpression3154 = new BitSet(new long[]{0x0000000000000402L});
	public static final BitSet FOLLOW_AT_in_remoteExpression3176 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_castExpression_in_remoteExpression3180 = new BitSet(new long[]{0x0000000000000402L});
	public static final BitSet FOLLOW_remoteExpression_in_multiplicativeExpression3235 = new BitSet(new long[]{0x0000000004000002L,0x0000400000020000L});
	public static final BitSet FOLLOW_STAR_in_multiplicativeExpression3257 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_remoteExpression_in_multiplicativeExpression3261 = new BitSet(new long[]{0x0000000004000002L,0x0000400000020000L});
	public static final BitSet FOLLOW_DIV_in_multiplicativeExpression3308 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_remoteExpression_in_multiplicativeExpression3312 = new BitSet(new long[]{0x0000000004000002L,0x0000400000020000L});
	public static final BitSet FOLLOW_MOD_in_multiplicativeExpression3359 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_remoteExpression_in_multiplicativeExpression3363 = new BitSet(new long[]{0x0000000004000002L,0x0000400000020000L});
	public static final BitSet FOLLOW_multiplicativeExpression_in_additiveExpression3418 = new BitSet(new long[]{0x0000000000000002L,0x0002000020000000L});
	public static final BitSet FOLLOW_PLUS_in_additiveExpression3440 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_multiplicativeExpression_in_additiveExpression3444 = new BitSet(new long[]{0x0000000000000002L,0x0002000020000000L});
	public static final BitSet FOLLOW_SUB_in_additiveExpression3489 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_multiplicativeExpression_in_additiveExpression3493 = new BitSet(new long[]{0x0000000000000002L,0x0002000020000000L});
	public static final BitSet FOLLOW_additiveExpression_in_rangeExpression3547 = new BitSet(new long[]{0x0000000020000002L});
	public static final BitSet FOLLOW_DOTDOT_in_rangeExpression3564 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_rangeSuffix_in_rangeExpression3568 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_additiveExpression_in_rangeSuffix3624 = new BitSet(new long[]{0x0001000000000002L});
	public static final BitSet FOLLOW_HASH_in_rangeSuffix3641 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_additiveExpression_in_rangeSuffix3645 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_rangeExpression_in_shiftExpression3695 = new BitSet(new long[]{0x0000000000000002L,0x0000140000000000L});
	public static final BitSet FOLLOW_SHIFTLEFT_in_shiftExpression3717 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_rangeExpression_in_shiftExpression3721 = new BitSet(new long[]{0x0000000000000002L,0x0000140000000000L});
	public static final BitSet FOLLOW_SHIFTRIGHT_in_shiftExpression3766 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_rangeExpression_in_shiftExpression3770 = new BitSet(new long[]{0x0000000000000002L,0x0000140000000000L});
	public static final BitSet FOLLOW_shiftExpression_in_relationalExpression3824 = new BitSet(new long[]{0x0000C00000000002L,0x0000000000003000L});
	public static final BitSet FOLLOW_relationalOperator_in_relationalExpression3847 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_shiftExpression_in_relationalExpression3864 = new BitSet(new long[]{0x0000C00000000002L,0x0000000000003000L});
	public static final BitSet FOLLOW_relationalExpression_in_equalityExpression3962 = new BitSet(new long[]{0x0000002000000002L,0x0000000000080000L});
	public static final BitSet FOLLOW_equalityOperator_in_equalityExpression3984 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_relationalExpression_in_equalityExpression4001 = new BitSet(new long[]{0x0000002000000002L,0x0000000000080000L});
	public static final BitSet FOLLOW_quantifiedExpression_in_equalityExpression4007 = new BitSet(new long[]{0x0000002000000002L,0x0000000000080000L});
	public static final BitSet FOLLOW_equalityExpression_in_andExpression4097 = new BitSet(new long[]{0x0000000000000012L});
	public static final BitSet FOLLOW_AMPERSAND_in_andExpression4120 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_equalityExpression_in_andExpression4124 = new BitSet(new long[]{0x0000000000000012L});
	public static final BitSet FOLLOW_andExpression_in_exclusiveOrExpression4180 = new BitSet(new long[]{0x0000000000004002L});
	public static final BitSet FOLLOW_BITXOR_in_exclusiveOrExpression4203 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_andExpression_in_exclusiveOrExpression4207 = new BitSet(new long[]{0x0000000000004002L});
	public static final BitSet FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression4263 = new BitSet(new long[]{0x0000000000001002L});
	public static final BitSet FOLLOW_BITOR_in_inclusiveOrExpression4286 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression4290 = new BitSet(new long[]{0x0000000000001002L});
	public static final BitSet FOLLOW_inclusiveOrExpression_in_logicalAndExpression4346 = new BitSet(new long[]{0x0000000000000022L});
	public static final BitSet FOLLOW_AND_in_logicalAndExpression4369 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_inclusiveOrExpression_in_logicalAndExpression4374 = new BitSet(new long[]{0x0000000000000022L});
	public static final BitSet FOLLOW_quantifiedExpression_in_logicalAndExpression4380 = new BitSet(new long[]{0x0000000000000022L});
	public static final BitSet FOLLOW_logicalAndExpression_in_logicalOrExpression4437 = new BitSet(new long[]{0x0000000000000002L,0x0000000001000000L});
	public static final BitSet FOLLOW_OR_in_logicalOrExpression4460 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_logicalAndExpression_in_logicalOrExpression4465 = new BitSet(new long[]{0x0000000000000002L,0x0000000001000000L});
	public static final BitSet FOLLOW_quantifiedExpression_in_logicalOrExpression4471 = new BitSet(new long[]{0x0000000000000002L,0x0000000001000000L});
	public static final BitSet FOLLOW_logicalOrExpression_in_logicalImpliesExpression4530 = new BitSet(new long[]{0x2000000000000002L});
	public static final BitSet FOLLOW_IMPLIES_in_logicalImpliesExpression4554 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_logicalImpliesExpression_in_logicalImpliesExpression4559 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_logicalImpliesExpression4565 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_logicalImpliesExpression_in_conditionalExpression4623 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
	public static final BitSet FOLLOW_QMARK_in_conditionalExpression4640 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_expression_in_conditionalExpression4642 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_COLON_in_conditionalExpression4644 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_conditionalExpression_in_conditionalExpression4661 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_conditionalExpression4667 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LSQUARE_in_interval4812 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_conditionalExpression_in_interval4814 = new BitSet(new long[]{0x0000000000400000L});
	public static final BitSet FOLLOW_COMMA_in_interval4816 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_conditionalExpression_in_interval4818 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_interval4820 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_interval_in_intervalSeq4860 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000800L});
	public static final BitSet FOLLOW_interval_in_intervalSeq4865 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000800L});
	public static final BitSet FOLLOW_LPAREN_in_arrayLambdaExpression4949 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000019A08180L});
	public static final BitSet FOLLOW_typeName_in_arrayLambdaExpression4951 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_arrayLambdaExpression4953 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000200000000000L});
	public static final BitSet FOLLOW_LAMBDA_in_arrayLambdaExpression4955 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_arrayLambdaExpression4957 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000019A08180L});
	public static final BitSet FOLLOW_boundVariableDeclarationList_in_arrayLambdaExpression4971 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_BITOR_in_arrayLambdaExpression4973 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_conditionalExpression_in_arrayLambdaExpression4990 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_quantifiedExpression_in_arrayLambdaExpression4996 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_arrayLambdaExpression5011 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_arrayLambdaExpression5028 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_arrayLambdaExpression5034 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_arrayLambdaExpression5068 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000019A08180L});
	public static final BitSet FOLLOW_typeName_in_arrayLambdaExpression5070 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_arrayLambdaExpression5072 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000200000000000L});
	public static final BitSet FOLLOW_LAMBDA_in_arrayLambdaExpression5074 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_arrayLambdaExpression5076 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000019A08180L});
	public static final BitSet FOLLOW_boundVariableDeclarationList_in_arrayLambdaExpression5086 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_arrayLambdaExpression5088 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_arrayLambdaExpression5101 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_arrayLambdaExpression5107 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeName_in_boundVariableDeclarationSubList5140 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_boundVariableDeclarationSubList5142 = new BitSet(new long[]{0x0000000000600002L});
	public static final BitSet FOLLOW_COMMA_in_boundVariableDeclarationSubList5145 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_boundVariableDeclarationSubList5147 = new BitSet(new long[]{0x0000000000600002L});
	public static final BitSet FOLLOW_COLON_in_boundVariableDeclarationSubList5152 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_rangeExpression_in_boundVariableDeclarationSubList5154 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_boundVariableDeclarationSubList_in_boundVariableDeclarationList5205 = new BitSet(new long[]{0x0000000000000002L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_boundVariableDeclarationList5208 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000019A08180L});
	public static final BitSet FOLLOW_boundVariableDeclarationSubList_in_boundVariableDeclarationList5210 = new BitSet(new long[]{0x0000000000000002L,0x0000020000000000L});
	public static final BitSet FOLLOW_arrayLambdaExpression_in_assignmentExpression5249 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_unaryExpression_in_assignmentExpression5271 = new BitSet(new long[]{0x000000000800AA00L,0x0004A80040040000L});
	public static final BitSet FOLLOW_assignmentOperator_in_assignmentExpression5283 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_assignmentExpression5296 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_assignmentExpression5302 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_conditionalExpression_in_assignmentExpression5335 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_assignmentExpression_in_commaExpression5404 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_COMMA_in_commaExpression5422 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_commaExpression5426 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_expression5471 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_commaExpression_in_expression5475 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_conditionalExpression_in_constantExpression5488 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarationSpecifiers_in_declaration5517 = new BitSet(new long[]{0x0200000000000000L,0x0000420000000200L});
	public static final BitSet FOLLOW_initDeclaratorList_in_declaration5531 = new BitSet(new long[]{0x0000000000000000L,0x4000020000000000L,0x4800004002040000L});
	public static final BitSet FOLLOW_contract_in_declaration5533 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_declaration5535 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SEMI_in_declaration5561 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_staticAssertDeclaration_in_declaration5589 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarationSpecifierList_in_declarationSpecifiers5603 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarationSpecifier_in_declarationSpecifierList5628 = new BitSet(new long[]{0x0200000000000002L,0x8C00000000000000L,0xB605CE1165B06109L,0x0000000019BAA9C0L});
	public static final BitSet FOLLOW_declarationSpecifier_in_declarationSpecifierList5640 = new BitSet(new long[]{0x0200000000000002L,0x8C00000000000000L,0xB605CE1165B06109L,0x0000000019BAA9C0L});
	public static final BitSet FOLLOW_storageClassSpecifier_in_declarationSpecifier5654 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeSpecifierOrQualifier_in_declarationSpecifier5659 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_functionSpecifier_in_declarationSpecifier5664 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_alignmentSpecifier_in_declarationSpecifier5669 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeSpecifier_in_typeSpecifierOrQualifier5687 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeQualifier_in_typeSpecifierOrQualifier5697 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_initDeclarator_in_initDeclaratorList5712 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_COMMA_in_initDeclaratorList5715 = new BitSet(new long[]{0x0200000000000000L,0x0000400000000200L});
	public static final BitSet FOLLOW_initDeclarator_in_initDeclaratorList5719 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_declarator_in_initDeclarator5749 = new BitSet(new long[]{0x0000000000000202L});
	public static final BitSet FOLLOW_ASSIGN_in_initDeclarator5774 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210248L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_initializer_in_initDeclarator5778 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_TYPEDEF_in_storageClassSpecifier5809 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_set_in_storageClassSpecifier5816 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_VOID_in_typeSpecifier5851 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CHAR_in_typeSpecifier5855 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SHORT_in_typeSpecifier5859 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INT_in_typeSpecifier5863 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LONG_in_typeSpecifier5867 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FLOAT_in_typeSpecifier5871 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DOUBLE_in_typeSpecifier5875 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SIGNED_in_typeSpecifier5880 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_UNSIGNED_in_typeSpecifier5884 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_BOOL_in_typeSpecifier5888 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COMPLEX_in_typeSpecifier5892 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_REAL_in_typeSpecifier5896 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RANGE_in_typeSpecifier5900 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_atomicTypeSpecifier_in_typeSpecifier5905 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_structOrUnionSpecifier_in_typeSpecifier5910 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_enumSpecifier_in_typeSpecifier5915 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typedefName_in_typeSpecifier5920 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_domainSpecifier_in_typeSpecifier5925 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeofSpecifier_in_typeSpecifier5933 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_memSpecifier_in_typeSpecifier5941 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_TYPEOF_in_typeofSpecifier5957 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_typeofSpecifier5959 = new BitSet(new long[]{0x0200080400100010L,0x900B4000A0210208L,0x9504CC890588612AL,0x000000001DA09799L,0x0000001000000000L});
	public static final BitSet FOLLOW_commaExpression_in_typeofSpecifier5971 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_typeofSpecifier5973 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeName_in_typeofSpecifier6007 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_typeofSpecifier6009 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_structOrUnion_in_structOrUnionSpecifier6057 = new BitSet(new long[]{0x0200000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_IDENTIFIER_in_structOrUnionSpecifier6066 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_structOrUnionSpecifier6068 = new BitSet(new long[]{0x0200000000000000L,0x8000000800000000L,0x9404CC0105806108L,0x0000000019A0C180L});
	public static final BitSet FOLLOW_structDeclarationList_in_structOrUnionSpecifier6070 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_structOrUnionSpecifier6072 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LCURLY_in_structOrUnionSpecifier6100 = new BitSet(new long[]{0x0200000000000000L,0x8000000800000000L,0x9404CC0105806108L,0x0000000019A0C180L});
	public static final BitSet FOLLOW_structDeclarationList_in_structOrUnionSpecifier6102 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_structOrUnionSpecifier6104 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENTIFIER_in_structOrUnionSpecifier6132 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_structDeclaration_in_structDeclarationList6186 = new BitSet(new long[]{0x0200000000000002L,0x8000000000000000L,0x9404CC0105806108L,0x0000000019A0C180L});
	public static final BitSet FOLLOW_specifierQualifierList_in_structDeclaration6227 = new BitSet(new long[]{0x0200000000200000L,0x0000420000000200L});
	public static final BitSet FOLLOW_structDeclaratorList_in_structDeclaration6256 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_structDeclaration6291 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_staticAssertDeclaration_in_structDeclaration6299 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeSpecifierOrQualifier_in_specifierQualifierList6318 = new BitSet(new long[]{0x0200000000000002L,0x8000000000000000L,0x9404CC0105806108L,0x0000000019A08180L});
	public static final BitSet FOLLOW_structDeclarator_in_structDeclaratorList6355 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_COMMA_in_structDeclaratorList6358 = new BitSet(new long[]{0x0200000000200000L,0x0000400000000200L});
	public static final BitSet FOLLOW_structDeclarator_in_structDeclaratorList6362 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_declarator_in_structDeclarator6399 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_COLON_in_structDeclarator6428 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_constantExpression_in_structDeclarator6430 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COLON_in_structDeclarator6465 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_constantExpression_in_structDeclarator6467 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ENUM_in_enumSpecifier6502 = new BitSet(new long[]{0x0200000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_IDENTIFIER_in_enumSpecifier6514 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENTIFIER_in_enumSpecifier6546 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_enumSpecifier6548 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_enumeratorList_in_enumSpecifier6550 = new BitSet(new long[]{0x0000000000400000L,0x0000000800000000L});
	public static final BitSet FOLLOW_COMMA_in_enumSpecifier6552 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_enumSpecifier6555 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LCURLY_in_enumSpecifier6587 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_enumeratorList_in_enumSpecifier6589 = new BitSet(new long[]{0x0000000000400000L,0x0000000800000000L});
	public static final BitSet FOLLOW_COMMA_in_enumSpecifier6591 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_enumSpecifier6594 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_enumerator_in_enumeratorList6643 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_COMMA_in_enumeratorList6646 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_enumerator_in_enumeratorList6648 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_IDENTIFIER_in_enumerator6681 = new BitSet(new long[]{0x0000000000000202L});
	public static final BitSet FOLLOW_ASSIGN_in_enumerator6722 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_constantExpression_in_enumerator6724 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ATOMIC_in_atomicTypeSpecifier6770 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_atomicTypeSpecifier6772 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000019A08180L});
	public static final BitSet FOLLOW_typeName_in_atomicTypeSpecifier6774 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_atomicTypeSpecifier6776 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INLINE_in_functionSpecifier6848 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NORETURN_in_functionSpecifier6852 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_abstractSpecifier_in_functionSpecifier6860 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PURE_in_functionSpecifier6868 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STATE_F_in_functionSpecifier6882 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SYSTEM_in_functionSpecifier6905 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000800L});
	public static final BitSet FOLLOW_libraryName_in_functionSpecifier6907 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SYSTEM_in_functionSpecifier6924 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FATOMIC_in_functionSpecifier6941 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DEVICE_in_functionSpecifier6955 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_GLOBAL_in_functionSpecifier6963 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_differentiableSpecifier_in_functionSpecifier6971 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ABSTRACT_in_abstractSpecifier6988 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000200L,0x0000000000008000L});
	public static final BitSet FOLLOW_CONTIN_in_abstractSpecifier7016 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_abstractSpecifier7018 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_INTEGER_CONSTANT_in_abstractSpecifier7020 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_abstractSpecifier7022 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_abstractSpecifier7066 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_STRING_LITERAL_in_abstractSpecifier7068 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_abstractSpecifier7070 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DIFFERENTIABLE_in_differentiableSpecifier7126 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_differentiableSpecifier7128 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_INTEGER_CONSTANT_in_differentiableSpecifier7130 = new BitSet(new long[]{0x0000000000400000L});
	public static final BitSet FOLLOW_COMMA_in_differentiableSpecifier7132 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000800L});
	public static final BitSet FOLLOW_intervalSeq_in_differentiableSpecifier7134 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_differentiableSpecifier7136 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LSQUARE_in_libraryName7160 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_libraryName7164 = new BitSet(new long[]{0x0200000000000000L,0x0002008000000000L});
	public static final BitSet FOLLOW_SUB_in_libraryName7169 = new BitSet(new long[]{0x0200000000000000L,0x0002008000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_libraryName7173 = new BitSet(new long[]{0x0200000000000000L,0x0002008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_libraryName7177 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ALIGNAS_in_alignmentSpecifier7210 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_alignmentSpecifier7212 = new BitSet(new long[]{0x0200080400100010L,0x900B4000A0210208L,0x9504CC890588612AL,0x000000001DA09799L,0x0000001000000000L});
	public static final BitSet FOLLOW_typeName_in_alignmentSpecifier7224 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_alignmentSpecifier7226 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_constantExpression_in_alignmentSpecifier7258 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_alignmentSpecifier7260 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_directDeclarator_in_declarator7308 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pointer_in_declarator7327 = new BitSet(new long[]{0x0200000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_directDeclarator_in_declarator7331 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_directDeclaratorPrefix_in_directDeclarator7360 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000A00L});
	public static final BitSet FOLLOW_directDeclaratorSuffix_in_directDeclarator7383 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000A00L});
	public static final BitSet FOLLOW_IDENTIFIER_in_directDeclaratorPrefix7415 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_directDeclaratorPrefix7424 = new BitSet(new long[]{0x0200000000000000L,0x0000400000000200L});
	public static final BitSet FOLLOW_declarator_in_directDeclaratorPrefix7427 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_directDeclaratorPrefix7429 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_directDeclaratorArraySuffix_in_directDeclaratorSuffix7442 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_directDeclaratorFunctionSuffix_in_directDeclaratorSuffix7447 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LSQUARE_in_directDeclaratorArraySuffix7460 = new BitSet(new long[]{0x0200080400100010L,0x900B4080A0210208L,0x8104048800084022L,0x0000000014003619L,0x0000001000000000L});
	public static final BitSet FOLLOW_typeQualifierList_opt_in_directDeclaratorArraySuffix7467 = new BitSet(new long[]{0x0200080400100010L,0x100B4080A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_assignmentExpression_opt_in_directDeclaratorArraySuffix7469 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_directDeclaratorArraySuffix7471 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STATIC_in_directDeclaratorArraySuffix7509 = new BitSet(new long[]{0x0200080400100010L,0x900B4000A0210208L,0x8104048800084022L,0x0000000014001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_typeQualifierList_opt_in_directDeclaratorArraySuffix7511 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_directDeclaratorArraySuffix7513 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_directDeclaratorArraySuffix7515 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeQualifierList_in_directDeclaratorArraySuffix7555 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000002000L});
	public static final BitSet FOLLOW_STATIC_in_directDeclaratorArraySuffix7557 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_directDeclaratorArraySuffix7559 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_directDeclaratorArraySuffix7561 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeQualifierList_opt_in_directDeclaratorArraySuffix7601 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
	public static final BitSet FOLLOW_STAR_in_directDeclaratorArraySuffix7603 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_directDeclaratorArraySuffix7605 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_directDeclaratorFunctionSuffix7664 = new BitSet(new long[]{0x0200000000000000L,0x8C00002000000000L,0xB605CE1165B06109L,0x0000000019BAA9C0L});
	public static final BitSet FOLLOW_parameterTypeList_in_directDeclaratorFunctionSuffix7671 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_directDeclaratorFunctionSuffix7673 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_identifierList_in_directDeclaratorFunctionSuffix7698 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_directDeclaratorFunctionSuffix7700 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_directDeclaratorFunctionSuffix7724 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeQualifier_in_typeQualifierList_opt7754 = new BitSet(new long[]{0x0000000000000002L,0x8000000000000000L,0x8004040000004000L,0x0000000010000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_assignmentExpression_opt7785 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pointer_part_in_pointer7801 = new BitSet(new long[]{0x0000000000000002L,0x0000400000000000L});
	public static final BitSet FOLLOW_STAR_in_pointer_part7827 = new BitSet(new long[]{0x0000000000000000L,0x8000000000000000L,0x8004040000004000L,0x0000000010000000L});
	public static final BitSet FOLLOW_typeQualifierList_opt_in_pointer_part7829 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeQualifier_in_typeQualifierList7853 = new BitSet(new long[]{0x0000000000000002L,0x8000000000000000L,0x8004040000004000L,0x0000000010000000L});
	public static final BitSet FOLLOW_parameterTypeListWithoutScope_in_parameterTypeList7882 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_parameterTypeListWithScope_in_parameterTypeList7889 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_parameterTypeListWithoutScope_in_parameterTypeListWithScope7910 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_parameterList_in_parameterTypeListWithoutScope7924 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_COMMA_in_parameterTypeListWithoutScope7952 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_ELLIPSIS_in_parameterTypeListWithoutScope7954 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_parameterDeclaration_in_parameterList7999 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_COMMA_in_parameterList8002 = new BitSet(new long[]{0x0200000000000000L,0x8C00000000000000L,0xB605CE1165B06109L,0x0000000019BAA9C0L});
	public static final BitSet FOLLOW_parameterDeclaration_in_parameterList8004 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_declarationSpecifiers_in_parameterDeclaration8050 = new BitSet(new long[]{0x0200000000000002L,0x0000400000000A00L});
	public static final BitSet FOLLOW_declaratorOrAbstractDeclarator_in_parameterDeclaration8082 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarator_in_declaratorOrAbstractDeclarator8147 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_abstractDeclarator_in_declaratorOrAbstractDeclarator8152 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENTIFIER_in_identifierList8169 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_COMMA_in_identifierList8173 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_identifierList8175 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_specifierQualifierList_in_typeName8206 = new BitSet(new long[]{0x0000000000000002L,0x0000400000000A00L});
	public static final BitSet FOLLOW_abstractDeclarator_in_typeName8234 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pointer_in_abstractDeclarator8279 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_directAbstractDeclarator_in_abstractDeclarator8303 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pointer_in_abstractDeclarator8327 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000A00L});
	public static final BitSet FOLLOW_directAbstractDeclarator_in_abstractDeclarator8329 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_directAbstractDeclarator8364 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000A00L});
	public static final BitSet FOLLOW_abstractDeclarator_in_directAbstractDeclarator8366 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_directAbstractDeclarator8368 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000A00L});
	public static final BitSet FOLLOW_directAbstractDeclaratorSuffix_in_directAbstractDeclarator8370 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000A00L});
	public static final BitSet FOLLOW_directAbstractDeclaratorSuffix_in_directAbstractDeclarator8407 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000A00L});
	public static final BitSet FOLLOW_IDENTIFIER_in_typedefName8447 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LSQUARE_in_directAbstractDeclaratorSuffix8480 = new BitSet(new long[]{0x0200080400100010L,0x900B4080A0210208L,0x8104048800084022L,0x0000000014003619L,0x0000001000000000L});
	public static final BitSet FOLLOW_typeQualifierList_opt_in_directAbstractDeclaratorSuffix8490 = new BitSet(new long[]{0x0200080400100010L,0x100B4080A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_assignmentExpression_opt_in_directAbstractDeclaratorSuffix8492 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_directAbstractDeclaratorSuffix8494 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STATIC_in_directAbstractDeclaratorSuffix8539 = new BitSet(new long[]{0x0200080400100010L,0x900B4000A0210208L,0x8104048800084022L,0x0000000014001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_typeQualifierList_opt_in_directAbstractDeclaratorSuffix8541 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_directAbstractDeclaratorSuffix8543 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_directAbstractDeclaratorSuffix8545 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeQualifierList_in_directAbstractDeclaratorSuffix8590 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000002000L});
	public static final BitSet FOLLOW_STATIC_in_directAbstractDeclaratorSuffix8592 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_directAbstractDeclaratorSuffix8594 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_directAbstractDeclaratorSuffix8596 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STAR_in_directAbstractDeclaratorSuffix8628 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_directAbstractDeclaratorSuffix8630 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_directAbstractDeclaratorSuffix8668 = new BitSet(new long[]{0x0200000000000000L,0x8C00002000000000L,0xB605CE1165B06109L,0x0000000019BAA9C0L});
	public static final BitSet FOLLOW_parameterTypeList_in_directAbstractDeclaratorSuffix8678 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_directAbstractDeclaratorSuffix8680 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_directAbstractDeclaratorSuffix8710 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_assignmentExpression_in_initializer8757 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LCURLY_in_initializer8773 = new BitSet(new long[]{0x0200080410100010L,0x100B4000A0210A48L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_initializerList_in_initializer8775 = new BitSet(new long[]{0x0000000000400000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_initializer8789 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_initializer8803 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_initializer8805 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_designatedInitializer_in_initializerList8844 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_COMMA_in_initializerList8847 = new BitSet(new long[]{0x0200080410100010L,0x100B4000A0210A48L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_designatedInitializer_in_initializerList8849 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_initializer_in_designatedInitializer8880 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_designation_in_designatedInitializer8898 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210248L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_initializer_in_designatedInitializer8900 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_designatorList_in_designation8929 = new BitSet(new long[]{0x0000000000000200L});
	public static final BitSet FOLLOW_ASSIGN_in_designation8931 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_designator_in_designatorList8958 = new BitSet(new long[]{0x0000000010000002L,0x0000000000000800L});
	public static final BitSet FOLLOW_LSQUARE_in_designator8978 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_constantExpression_in_designator8980 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_designator8982 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DOT_in_designator9004 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_designator9006 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STATICASSERT_in_staticAssertDeclaration9039 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_staticAssertDeclaration9041 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_constantExpression_in_staticAssertDeclaration9043 = new BitSet(new long[]{0x0000000000400000L});
	public static final BitSet FOLLOW_COMMA_in_staticAssertDeclaration9045 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_STRING_LITERAL_in_staticAssertDeclaration9047 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_staticAssertDeclaration9055 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_staticAssertDeclaration9057 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DOMAIN_in_domainSpecifier9089 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_domainSpecifier9107 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_INTEGER_CONSTANT_in_domainSpecifier9109 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_domainSpecifier9111 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_MEM_TYPE_in_memSpecifier9142 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_labeledStatement_in_statement9166 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_compoundStatement_in_statement9182 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expressionStatement_in_statement9198 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_selectionStatement_in_statement9214 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_iterationStatement_in_statement9230 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_jumpStatement_in_statement9246 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_whenStatement_in_statement9262 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_chooseStatement_in_statement9278 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_atomicStatement_in_statement9294 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_runStatement_in_statement9310 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_withStatement_in_statement9326 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_updateStatement_in_statement9342 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_asmStatement_in_statement9358 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_statement_in_statementWithScope9390 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pragma_in_statementWithScope9395 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019000AE084B0E72L,0x00000000E641161FL,0x0000001000000000L});
	public static final BitSet FOLLOW_statement_in_statementWithScope9398 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENTIFIER_in_labeledStatement9437 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_COLON_in_labeledStatement9439 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x011000AE084B0E72L,0x00000000E641161FL,0x0000001000000000L});
	public static final BitSet FOLLOW_statement_in_labeledStatement9441 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CASE_in_labeledStatement9465 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_constantExpression_in_labeledStatement9467 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_COLON_in_labeledStatement9469 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x011000AE084B0E72L,0x00000000E641161FL,0x0000001000000000L});
	public static final BitSet FOLLOW_statement_in_labeledStatement9471 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DEFAULT_in_labeledStatement9497 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_COLON_in_labeledStatement9499 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x011000AE084B0E72L,0x00000000E641161FL,0x0000001000000000L});
	public static final BitSet FOLLOW_statement_in_labeledStatement9501 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LCURLY_in_compoundStatement9551 = new BitSet(new long[]{0x0600080400100090L,0xBC0B4208A0210249L,0xB795CEBF6DFB6F7BL,0x00000000FFFBFFDFL,0x0000001000000000L});
	public static final BitSet FOLLOW_RCURLY_in_compoundStatement9561 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_blockItemList_in_compoundStatement9591 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_compoundStatement9593 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_blockItem_in_blockItemList9640 = new BitSet(new long[]{0x0600080400100092L,0xBC0B4200A0210249L,0xB795CEBF6DFB6F7BL,0x00000000FFFBFFDFL,0x0000001000000000L});
	public static final BitSet FOLLOW_expression_in_expressionStatement9669 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_expressionStatement9671 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SEMI_in_expressionStatement9689 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IF_in_selectionStatement9728 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_selectionStatement9730 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_expression_in_selectionStatement9732 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_selectionStatement9734 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019000AE084B0E72L,0x00000000E641161FL,0x0000001000000000L});
	public static final BitSet FOLLOW_statementWithScope_in_selectionStatement9738 = new BitSet(new long[]{0x0000000800000002L});
	public static final BitSet FOLLOW_ELSE_in_selectionStatement9755 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019000AE084B0E72L,0x00000000E641161FL,0x0000001000000000L});
	public static final BitSet FOLLOW_statementWithScope_in_selectionStatement9759 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SWITCH_in_selectionStatement9824 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_selectionStatement9826 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_expression_in_selectionStatement9828 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_selectionStatement9830 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019000AE084B0E72L,0x00000000E641161FL,0x0000001000000000L});
	public static final BitSet FOLLOW_statementWithScope_in_selectionStatement9834 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_WHILE_in_iterationStatement9877 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_iterationStatement9879 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_expression_in_iterationStatement9881 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_iterationStatement9883 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019010AE084B0E72L,0x00000000E641161FL,0x0000001000000000L});
	public static final BitSet FOLLOW_invariant_opt_in_iterationStatement9885 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019000AE084B0E72L,0x00000000E641161FL,0x0000001000000000L});
	public static final BitSet FOLLOW_statementWithScope_in_iterationStatement9892 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DO_in_iterationStatement9913 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019000AE084B0E72L,0x00000000E641161FL,0x0000001000000000L});
	public static final BitSet FOLLOW_statementWithScope_in_iterationStatement9917 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000040000000L});
	public static final BitSet FOLLOW_WHILE_in_iterationStatement9919 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_iterationStatement9921 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_expression_in_iterationStatement9923 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_iterationStatement9925 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L,0x0000100000000000L});
	public static final BitSet FOLLOW_invariant_opt_in_iterationStatement9930 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_iterationStatement9932 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FOR_in_iterationStatement9953 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_iterationStatement9955 = new BitSet(new long[]{0x0200080400100010L,0x9C0B4200A0210208L,0xB705CE9D6DB8612BL,0x000000001DFAFFD9L,0x0000001000000000L});
	public static final BitSet FOLLOW_declaration_in_iterationStatement9969 = new BitSet(new long[]{0x0200080400100010L,0x100B4200A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_expression_opt_in_iterationStatement9973 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_iterationStatement9975 = new BitSet(new long[]{0x0200080400100010L,0x100B4020A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_expression_opt_in_iterationStatement9979 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_iterationStatement9986 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019010AE084B0E72L,0x00000000E641161FL,0x0000001000000000L});
	public static final BitSet FOLLOW_invariant_opt_in_iterationStatement9990 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019000AE084B0E72L,0x00000000E641161FL,0x0000001000000000L});
	public static final BitSet FOLLOW_statementWithScope_in_iterationStatement9994 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expression_opt_in_iterationStatement10029 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_iterationStatement10031 = new BitSet(new long[]{0x0200080400100010L,0x100B4200A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_expression_opt_in_iterationStatement10035 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_iterationStatement10037 = new BitSet(new long[]{0x0200080400100010L,0x100B4020A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_expression_opt_in_iterationStatement10046 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_iterationStatement10048 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019010AE084B0E72L,0x00000000E641161FL,0x0000001000000000L});
	public static final BitSet FOLLOW_invariant_opt_in_iterationStatement10052 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019000AE084B0E72L,0x00000000E641161FL,0x0000001000000000L});
	public static final BitSet FOLLOW_statementWithScope_in_iterationStatement10061 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CIVLFOR_in_iterationStatement10100 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_PARFOR_in_iterationStatement10106 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_iterationStatement10109 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000019A08180L});
	public static final BitSet FOLLOW_typeName_opt_in_iterationStatement10118 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_identifierList_in_iterationStatement10122 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_COLON_in_iterationStatement10124 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_expression_in_iterationStatement10128 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_iterationStatement10130 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019010AE084B0E72L,0x00000000E641161FL,0x0000001000000000L});
	public static final BitSet FOLLOW_invariant_opt_in_iterationStatement10139 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019000AE084B0E72L,0x00000000E641161FL,0x0000001000000000L});
	public static final BitSet FOLLOW_statementWithScope_in_iterationStatement10143 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expression_in_expression_opt10181 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INVARIANT_in_invariant_opt10206 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_invariant_opt10208 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_expression_in_invariant_opt10210 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_invariant_opt10212 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeName_in_typeName_opt10233 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_GOTO_in_jumpStatement10256 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_jumpStatement10258 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_jumpStatement10260 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CONTINUE_in_jumpStatement10278 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_jumpStatement10280 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_BREAK_in_jumpStatement10296 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_jumpStatement10298 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RETURN_in_jumpStatement10314 = new BitSet(new long[]{0x0200080400100010L,0x100B4200A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_expression_opt_in_jumpStatement10316 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_jumpStatement10318 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PPRAGMA_in_pragma10347 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_pragma10349 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
	public static final BitSet FOLLOW_NEWLINE_in_pragma10351 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PPRAGMA_in_pragma10381 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_pragma10383 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFEFFFFFL,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x00001FFFFFFFFFFFL});
	public static final BitSet FOLLOW_inlineList_in_pragma10385 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
	public static final BitSet FOLLOW_NEWLINE_in_pragma10387 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INLINE_ANNOTATION_START_in_annotation10443 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x00001FFFFFFFFFFFL});
	public static final BitSet FOLLOW_NEWLINE_in_annotation10452 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_inlineList_in_annotation10482 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
	public static final BitSet FOLLOW_NEWLINE_in_annotation10484 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ANNOTATION_START_in_annotation10521 = new BitSet(new long[]{0x0000000000000040L});
	public static final BitSet FOLLOW_ANNOTATION_END_in_annotation10523 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ANNOTATION_START_in_annotation10551 = new BitSet(new long[]{0xFFFFFFFFFFFFFFB0L,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x00001FFFFFFFFFFFL});
	public static final BitSet FOLLOW_annotationBody_in_annotation10553 = new BitSet(new long[]{0x0000000000000040L});
	public static final BitSet FOLLOW_ANNOTATION_END_in_annotation10555 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RUN_in_runStatement10609 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x011000AE084B0E72L,0x00000000E641161FL,0x0000001000000000L});
	public static final BitSet FOLLOW_statement_in_runStatement10611 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_WITH_in_withStatement10635 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_withStatement10637 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_withStatement10639 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_withStatement10641 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x011000AE084B0E72L,0x00000000E641161FL,0x0000001000000000L});
	public static final BitSet FOLLOW_statement_in_withStatement10643 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_UPDATE_in_updateStatement10670 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_updateStatement10672 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800080022L,0x0000000004001619L,0x0000001000000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_updateStatement10674 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_updateStatement10676 = new BitSet(new long[]{0x0200080400100000L,0x0001000000000208L,0x0100008800080000L,0x0000000000001011L});
	public static final BitSet FOLLOW_postfixExpressionRoot_in_updateStatement10681 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_updateStatement10683 = new BitSet(new long[]{0x0200080400100010L,0x100B4020A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_argumentExpressionList_in_updateStatement10685 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_updateStatement10687 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_updateStatement10689 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_set_in_balancedToken10740 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_balancedToken10752 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x00001FFFFFFFFFFFL});
	public static final BitSet FOLLOW_balancedToken_in_balancedToken10754 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x00001FFFFFFFFFFFL});
	public static final BitSet FOLLOW_RPAREN_in_balancedToken10757 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ASM_in_asmStatement10768 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L,0x0000002000000000L,0x0000000010000000L});
	public static final BitSet FOLLOW_VOLATILE_in_asmStatement10770 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L,0x0000002000000000L});
	public static final BitSet FOLLOW_GOTO_in_asmStatement10773 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_asmStatement10776 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x00001FFFFFFFFFFFL});
	public static final BitSet FOLLOW_balancedToken_in_asmStatement10781 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x00001FFFFFFFFFFFL});
	public static final BitSet FOLLOW_RPAREN_in_asmStatement10787 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_asmStatement10789 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_WHEN_in_whenStatement10824 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_whenStatement10826 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_expression_in_whenStatement10828 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_whenStatement10830 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x011000AE084B0E72L,0x00000000E641161FL,0x0000001000000000L});
	public static final BitSet FOLLOW_statement_in_whenStatement10832 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CHOOSE_in_chooseStatement10857 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_chooseStatement10859 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x011000AE084B0E72L,0x00000000E641161FL,0x0000001000000000L});
	public static final BitSet FOLLOW_statement_in_chooseStatement10861 = new BitSet(new long[]{0x0600080400100010L,0x300B4208A0210248L,0x011000AE084B0E72L,0x00000000E641161FL,0x0000001000000000L});
	public static final BitSet FOLLOW_RCURLY_in_chooseStatement10864 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CIVLATOMIC_in_atomicStatement10886 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019000AE084B0E72L,0x00000000E641161FL,0x0000001000000000L});
	public static final BitSet FOLLOW_statementWithScope_in_atomicStatement10890 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarator_in_functionDefinition10928 = new BitSet(new long[]{0x0200000000000000L,0xCC00000000000040L,0xFE05CE5167B46109L,0x0000000019BAE9C0L});
	public static final BitSet FOLLOW_contract_in_functionDefinition10933 = new BitSet(new long[]{0x0200000000000000L,0x8C00000000000040L,0xB605CE1165B06109L,0x0000000019BAE9C0L});
	public static final BitSet FOLLOW_declarationList_opt_in_functionDefinition10938 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_compoundStatement_in_functionDefinition10943 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarationSpecifiers_in_functionDefinition10988 = new BitSet(new long[]{0x0200000000000000L,0x0000400000000200L});
	public static final BitSet FOLLOW_declarator_in_functionDefinition10993 = new BitSet(new long[]{0x0200000000000000L,0xCC00000000000040L,0xFE05CE5167B46109L,0x0000000019BAE9C0L});
	public static final BitSet FOLLOW_contract_in_functionDefinition10998 = new BitSet(new long[]{0x0200000000000000L,0x8C00000000000040L,0xB605CE1165B06109L,0x0000000019BAE9C0L});
	public static final BitSet FOLLOW_declarationList_opt_in_functionDefinition11003 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_compoundStatement_in_functionDefinition11008 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declaration_in_declarationList_opt11057 = new BitSet(new long[]{0x0200000000000002L,0x8C00000000000000L,0xB605CE1165B06109L,0x0000000019BAE9C0L});
	public static final BitSet FOLLOW_separationLogicItem_in_contractItem11080 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_porItem_in_contractItem11088 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_REQUIRES_in_separationLogicItem11108 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_separationLogicItem11110 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_expression_in_separationLogicItem11112 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_separationLogicItem11114 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ENSURES_in_separationLogicItem11129 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_separationLogicItem11131 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_expression_in_separationLogicItem11133 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_separationLogicItem11135 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DEPENDS_in_porItem11168 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000840L});
	public static final BitSet FOLLOW_LSQUARE_in_porItem11171 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_expression_in_porItem11173 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_porItem11175 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_porItem11179 = new BitSet(new long[]{0x0200080400100010L,0x100B4008A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_argumentExpressionList_in_porItem11181 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_porItem11183 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_GUARD_in_porItem11208 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000840L});
	public static final BitSet FOLLOW_LSQUARE_in_porItem11211 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_expression_in_porItem11213 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_porItem11215 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_porItem11219 = new BitSet(new long[]{0x0200080400100010L,0x100B4008A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_argumentExpressionList_in_porItem11221 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_porItem11223 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ASSIGNS_in_porItem11248 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000840L});
	public static final BitSet FOLLOW_LSQUARE_in_porItem11251 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_expression_in_porItem11253 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_porItem11255 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_porItem11259 = new BitSet(new long[]{0x0200080400100010L,0x100B4008A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_argumentExpressionList_in_porItem11261 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_porItem11263 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_READS_in_porItem11288 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000840L});
	public static final BitSet FOLLOW_LSQUARE_in_porItem11291 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_expression_in_porItem11293 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_porItem11295 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_porItem11299 = new BitSet(new long[]{0x0200080400100010L,0x100B4008A0210208L,0x0100008C08080022L,0x0000000004401619L,0x0000001000000000L});
	public static final BitSet FOLLOW_argumentExpressionList_in_porItem11301 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_porItem11303 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_contractItem_in_contract11337 = new BitSet(new long[]{0x0000000000000002L,0x4000000000000000L,0x4800004002040000L});
	public static final BitSet FOLLOW_blockItem_in_blockItemWithScope11371 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_functionDefinition_in_blockItem11396 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_functionDefinition_in_blockItem11417 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declaration_in_blockItem11422 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pragma_in_blockItem11427 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_annotation_in_blockItem11432 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_statement_in_blockItem11437 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_blockItem_in_translationUnit11467 = new BitSet(new long[]{0x0600080400100090L,0xBC0B4200A0210249L,0xB795CEBF6DFB6F7BL,0x00000000FFFBFFDFL,0x0000001000000000L});
	public static final BitSet FOLLOW_EOF_in_translationUnit11470 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_synpred1_CivlCParser2329 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000019A08180L});
	public static final BitSet FOLLOW_typeName_in_synpred1_CivlCParser2331 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_synpred1_CivlCParser2333 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_synpred1_CivlCParser2335 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SIZEOF_in_synpred2_CivlCParser2638 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_synpred2_CivlCParser2640 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000019A08180L});
	public static final BitSet FOLLOW_typeName_in_synpred2_CivlCParser2642 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_synpred3_CivlCParser3087 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000019A08180L});
	public static final BitSet FOLLOW_typeName_in_synpred3_CivlCParser3089 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_synpred3_CivlCParser3091 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFBFL,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x00001FFFFFFFFFFFL});
	public static final BitSet FOLLOW_set_in_synpred3_CivlCParser3093 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_AT_in_synpred4_CivlCParser3172 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STAR_in_synpred5_CivlCParser3253 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DIV_in_synpred6_CivlCParser3304 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_MOD_in_synpred7_CivlCParser3355 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PLUS_in_synpred8_CivlCParser3436 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SUB_in_synpred9_CivlCParser3485 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DOTDOT_in_synpred10_CivlCParser3560 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_HASH_in_synpred11_CivlCParser3637 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SHIFTLEFT_in_synpred12_CivlCParser3713 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SHIFTRIGHT_in_synpred13_CivlCParser3762 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_relationalOperator_in_synpred14_CivlCParser3843 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_equalityOperator_in_synpred15_CivlCParser3981 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_AMPERSAND_in_synpred16_CivlCParser4116 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_BITXOR_in_synpred17_CivlCParser4199 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_BITOR_in_synpred18_CivlCParser4282 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_AND_in_synpred19_CivlCParser4365 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_OR_in_synpred20_CivlCParser4456 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IMPLIES_in_synpred21_CivlCParser4550 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_QMARK_in_synpred22_CivlCParser4636 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_synpred23_CivlCParser4904 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000019A08180L});
	public static final BitSet FOLLOW_typeName_in_synpred23_CivlCParser4906 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_synpred23_CivlCParser4908 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000200000000000L});
	public static final BitSet FOLLOW_LAMBDA_in_synpred23_CivlCParser4910 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_synpred23_CivlCParser4912 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000019A08180L});
	public static final BitSet FOLLOW_boundVariableDeclarationList_in_synpred23_CivlCParser4930 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_BITOR_in_synpred23_CivlCParser4932 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_arrayLambdaExpression_in_synpred24_CivlCParser5245 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_unaryExpression_in_synpred25_CivlCParser5255 = new BitSet(new long[]{0x000000000800AA00L,0x0004A80040040000L});
	public static final BitSet FOLLOW_assignmentOperator_in_synpred25_CivlCParser5257 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_synpred26_CivlCParser5418 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeSpecifier_in_synpred27_CivlCParser5683 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SYSTEM_in_synpred28_CivlCParser6898 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000800L});
	public static final BitSet FOLLOW_libraryName_in_synpred28_CivlCParser6900 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarator_in_synpred29_CivlCParser8143 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ELSE_in_synpred30_CivlCParser9751 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarator_in_synpred31_CivlCParser11383 = new BitSet(new long[]{0x0200000000000000L,0xCC00000000000040L,0xFE05CE5167B46109L,0x0000000019BAE9C0L});
	public static final BitSet FOLLOW_contract_in_synpred31_CivlCParser11385 = new BitSet(new long[]{0x0200000000000000L,0x8C00000000000040L,0xB605CE1165B06109L,0x0000000019BAE9C0L});
	public static final BitSet FOLLOW_declarationList_opt_in_synpred31_CivlCParser11387 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_synpred31_CivlCParser11389 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarationSpecifiers_in_synpred32_CivlCParser11402 = new BitSet(new long[]{0x0200000000000000L,0x0000400000000200L});
	public static final BitSet FOLLOW_declarator_in_synpred32_CivlCParser11404 = new BitSet(new long[]{0x0200000000000000L,0xCC00000000000040L,0xFE05CE5167B46109L,0x0000000019BAE9C0L});
	public static final BitSet FOLLOW_contract_in_synpred32_CivlCParser11406 = new BitSet(new long[]{0x0200000000000000L,0x8C00000000000040L,0xB605CE1165B06109L,0x0000000019BAE9C0L});
	public static final BitSet FOLLOW_declarationList_opt_in_synpred32_CivlCParser11408 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_synpred32_CivlCParser11410 = new BitSet(new long[]{0x0000000000000002L});
}