CivlCParser.java

// $ANTLR 3.5.2 CivlCParser.g 2026-08-23 21:45:06

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", 
		"STATIC", "STATICASSERT", "STRUCT", "SWITCH", "SYSTEM", "TEXT_BLOCK", 
		"THREADLOCAL", "TYPEDEF", "TYPEOF", "UNIFORM", "UNION", "UNSIGNED", "VOID", 
		"VOLATILE", "WHEN", "WHILE", "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", 
		"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", 
		"LIB_NAME", "OPERATOR", "PARAMETER_DECLARATION", "PARAMETER_LIST", "PARAMETER_TYPE_LIST", 
		"PARENTHESIZED_EXPRESSION", "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 STATIC=204;
	public static final int STATICASSERT=205;
	public static final int STRUCT=206;
	public static final int SWITCH=207;
	public static final int SYSTEM=208;
	public static final int TEXT_BLOCK=209;
	public static final int THREADLOCAL=210;
	public static final int TYPEDEF=211;
	public static final int TYPEOF=212;
	public static final int UNIFORM=213;
	public static final int UNION=214;
	public static final int UNSIGNED=215;
	public static final int VOID=216;
	public static final int VOLATILE=217;
	public static final int WHEN=218;
	public static final int WHILE=219;
	public static final int ABSENT=220;
	public static final int ABSTRACT_DECLARATOR=221;
	public static final int ANNOTATION=222;
	public static final int ARGUMENT_LIST=223;
	public static final int ARRAY_ELEMENT_DESIGNATOR=224;
	public static final int ARRAY_SUFFIX=225;
	public static final int BLOCK_ITEM_LIST=226;
	public static final int BOUND_VARIABLE_DECLARATION=227;
	public static final int BOUND_VARIABLE_DECLARATION_LIST=228;
	public static final int BOUND_VARIABLE_NAME_LIST=229;
	public static final int BOUND_VARIABLE_RANGE=230;
	public static final int BOUND_VARIABLE_RANGE_LIST=231;
	public static final int CALL=232;
	public static final int CASE_LABELED_STATEMENT=233;
	public static final int CAST=234;
	public static final int COMPOUND_LITERAL=235;
	public static final int COMPOUND_STATEMENT=236;
	public static final int CONTRACT=237;
	public static final int DECLARATION=238;
	public static final int DECLARATION_LIST=239;
	public static final int DECLARATION_SPECIFIERS=240;
	public static final int DECLARATOR=241;
	public static final int DEFAULT_LABELED_STATEMENT=242;
	public static final int DESIGNATED_INITIALIZER=243;
	public static final int DESIGNATION=244;
	public static final int DIRECT_ABSTRACT_DECLARATOR=245;
	public static final int DIRECT_DECLARATOR=246;
	public static final int ENUMERATION_CONSTANT=247;
	public static final int ENUMERATOR=248;
	public static final int ENUMERATOR_LIST=249;
	public static final int EXPRESSION_STATEMENT=250;
	public static final int FIELD_DESIGNATOR=251;
	public static final int FUNCTION_DEFINITION=252;
	public static final int FUNCTION_SUFFIX=253;
	public static final int GENERIC_ASSOCIATION=254;
	public static final int GENERIC_ASSOC_LIST=255;
	public static final int IDENTIFIER_LABELED_STATEMENT=256;
	public static final int IDENTIFIER_LIST=257;
	public static final int INDEX=258;
	public static final int INITIALIZER_LIST=259;
	public static final int INIT_DECLARATOR=260;
	public static final int INIT_DECLARATOR_LIST=261;
	public static final int LIB_NAME=262;
	public static final int OPERATOR=263;
	public static final int PARAMETER_DECLARATION=264;
	public static final int PARAMETER_LIST=265;
	public static final int PARAMETER_TYPE_LIST=266;
	public static final int PARENTHESIZED_EXPRESSION=267;
	public static final int POINTER=268;
	public static final int POST_DECREMENT=269;
	public static final int POST_INCREMENT=270;
	public static final int PRE_DECREMENT=271;
	public static final int PRE_INCREMENT=272;
	public static final int PROGRAM=273;
	public static final int QUANTIFIED=274;
	public static final int SCALAR_INITIALIZER=275;
	public static final int SPECIFIER_QUALIFIER_LIST=276;
	public static final int STATEMENT=277;
	public static final int STATEMENT_EXPRESSION=278;
	public static final int STRUCT_DECLARATION=279;
	public static final int STRUCT_DECLARATION_LIST=280;
	public static final int STRUCT_DECLARATOR=281;
	public static final int STRUCT_DECLARATOR_LIST=282;
	public static final int SUM=283;
	public static final int TOKEN_LIST=284;
	public static final int TRANSLATION_UNIT=285;
	public static final int TYPE=286;
	public static final int TYPEDEF_NAME=287;
	public static final int TYPEOF_EXPRESSION=288;
	public static final int TYPEOF_TYPE=289;
	public static final int TYPE_NAME=290;
	public static final int TYPE_QUALIFIER_LIST=291;

	// 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:212:1: quantifier : ( FORALL | EXISTS );
	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:213:2: ( FORALL | EXISTS )
			// CivlCParser.g:
			{
			root_0 = (Object)adaptor.nil();


			set1=input.LT(1);
			if ( input.LA(1)==EXISTS||input.LA(1)==FORALL ) {
				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:221:1: quantifiedExpression : quantifier LPAREN boundVariableDeclarationList ( BITOR (restrict= conditionalExpression |restrict= quantifiedExpression ) RPAREN body1= expression -> ^( QUANTIFIED quantifier boundVariableDeclarationList $body1 $restrict) | RPAREN body2= expression -> ^( QUANTIFIED quantifier boundVariableDeclarationList $body2 ABSENT ) ) ;
	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 LPAREN3=null;
		Token BITOR5=null;
		Token RPAREN6=null;
		Token RPAREN7=null;
		ParserRuleReturnScope restrict =null;
		ParserRuleReturnScope body1 =null;
		ParserRuleReturnScope body2 =null;
		ParserRuleReturnScope quantifier2 =null;
		ParserRuleReturnScope boundVariableDeclarationList4 =null;

		Object LPAREN3_tree=null;
		Object BITOR5_tree=null;
		Object RPAREN6_tree=null;
		Object RPAREN7_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_quantifier=new RewriteRuleSubtreeStream(adaptor,"rule quantifier");
		RewriteRuleSubtreeStream stream_quantifiedExpression=new RewriteRuleSubtreeStream(adaptor,"rule quantifiedExpression");

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

			pushFollow(FOLLOW_boundVariableDeclarationList_in_quantifiedExpression1076);
			boundVariableDeclarationList4=boundVariableDeclarationList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_boundVariableDeclarationList.add(boundVariableDeclarationList4.getTree());
			// CivlCParser.g:223:9: ( BITOR (restrict= conditionalExpression |restrict= quantifiedExpression ) RPAREN body1= expression -> ^( QUANTIFIED quantifier boundVariableDeclarationList $body1 $restrict) | RPAREN body2= expression -> ^( QUANTIFIED quantifier boundVariableDeclarationList $body2 ABSENT ) )
			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:223:11: BITOR (restrict= conditionalExpression |restrict= quantifiedExpression ) RPAREN body1= expression
					{
					BITOR5=(Token)match(input,BITOR,FOLLOW_BITOR_in_quantifiedExpression1088); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_BITOR.add(BITOR5);

					// CivlCParser.g:224: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==GENERIC||LA1_0==HERE||LA1_0==PROCNULL||LA1_0==RESULT||(LA1_0 >= SCOPEOF && LA1_0 <= SELF)||(LA1_0 >= SIZEOF && LA1_0 <= SPAWN)||LA1_0==SUM) ) {
						alt1=1;
					}
					else if ( (LA1_0==EXISTS||LA1_0==FORALL) ) {
						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:224:14: restrict= conditionalExpression
							{
							pushFollow(FOLLOW_conditionalExpression_in_quantifiedExpression1105);
							restrict=conditionalExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_conditionalExpression.add(restrict.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:224:47: restrict= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_quantifiedExpression1111);
							restrict=quantifiedExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_quantifiedExpression.add(restrict.getTree());
							}
							break;

					}

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

					pushFollow(FOLLOW_expression_in_quantifiedExpression1142);
					body1=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(body1.getTree());
					// AST REWRITE
					// elements: body1, boundVariableDeclarationList, restrict, quantifier
					// 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();
					// 227:13: -> ^( QUANTIFIED quantifier boundVariableDeclarationList $body1 $restrict)
					{
						// CivlCParser.g:227:16: ^( QUANTIFIED quantifier boundVariableDeclarationList $body1 $restrict)
						{
						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_0, root_1);
						}

					}


					retval.tree = root_0;
					}

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

					pushFollow(FOLLOW_expression_in_quantifiedExpression1214);
					body2=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(body2.getTree());
					// AST REWRITE
					// elements: quantifier, body2, 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();
					// 231:13: -> ^( QUANTIFIED quantifier boundVariableDeclarationList $body2 ABSENT )
					{
						// CivlCParser.g:231:16: ^( QUANTIFIED quantifier boundVariableDeclarationList $body2 ABSENT )
						{
						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_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:241:1: constant : ( enumerationConstant | INTEGER_CONSTANT | FLOATING_CONSTANT | CHARACTER_CONSTANT | SELF | PROCNULL | 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_CONSTANT9=null;
		Token FLOATING_CONSTANT10=null;
		Token CHARACTER_CONSTANT11=null;
		Token SELF12=null;
		Token PROCNULL13=null;
		Token RESULT14=null;
		Token HERE15=null;
		Token ELLIPSIS16=null;
		ParserRuleReturnScope enumerationConstant8 =null;

		Object INTEGER_CONSTANT9_tree=null;
		Object FLOATING_CONSTANT10_tree=null;
		Object CHARACTER_CONSTANT11_tree=null;
		Object SELF12_tree=null;
		Object PROCNULL13_tree=null;
		Object RESULT14_tree=null;
		Object HERE15_tree=null;
		Object ELLIPSIS16_tree=null;

		try {
			// CivlCParser.g:242:2: ( enumerationConstant | INTEGER_CONSTANT | FLOATING_CONSTANT | CHARACTER_CONSTANT | SELF | PROCNULL | RESULT | HERE | ELLIPSIS )
			int alt3=9;
			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 RESULT:
				{
				alt3=7;
				}
				break;
			case HERE:
				{
				alt3=8;
				}
				break;
			case ELLIPSIS:
				{
				alt3=9;
				}
				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:242:4: enumerationConstant
					{
					root_0 = (Object)adaptor.nil();


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


					ELLIPSIS16=(Token)match(input,ELLIPSIS,FOLLOW_ELLIPSIS_in_constant1326); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					ELLIPSIS16_tree = (Object)adaptor.create(ELLIPSIS16);
					adaptor.addChild(root_0, ELLIPSIS16_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:255: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 IDENTIFIER17=null;

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

		try {
			// CivlCParser.g:256:2: ({...}? IDENTIFIER -> ^( ENUMERATION_CONSTANT IDENTIFIER ) )
			// CivlCParser.g:256: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())");
			}
			IDENTIFIER17=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_enumerationConstant1341); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER17);

			// 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();
			// 257:4: -> ^( ENUMERATION_CONSTANT IDENTIFIER )
			{
				// CivlCParser.g:257: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:261:1: primaryExpression : ( constant | IDENTIFIER | STRING_LITERAL | LPAREN compoundStatement RPAREN -> ^( STATEMENT_EXPRESSION LPAREN compoundStatement RPAREN ) | LPAREN expression RPAREN -> ^( PARENTHESIZED_EXPRESSION LPAREN expression RPAREN ) | genericSelection );
	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 IDENTIFIER19=null;
		Token STRING_LITERAL20=null;
		Token LPAREN21=null;
		Token RPAREN23=null;
		Token LPAREN24=null;
		Token RPAREN26=null;
		ParserRuleReturnScope constant18 =null;
		ParserRuleReturnScope compoundStatement22 =null;
		ParserRuleReturnScope expression25 =null;
		ParserRuleReturnScope genericSelection27 =null;

		Object IDENTIFIER19_tree=null;
		Object STRING_LITERAL20_tree=null;
		Object LPAREN21_tree=null;
		Object RPAREN23_tree=null;
		Object LPAREN24_tree=null;
		Object RPAREN26_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:262:2: ( constant | IDENTIFIER | STRING_LITERAL | LPAREN compoundStatement RPAREN -> ^( STATEMENT_EXPRESSION LPAREN compoundStatement RPAREN ) | LPAREN expression RPAREN -> ^( PARENTHESIZED_EXPRESSION LPAREN expression RPAREN ) | genericSelection )
			int alt4=6;
			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:
				{
				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==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==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;
			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:262:4: constant
					{
					root_0 = (Object)adaptor.nil();


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

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


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

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


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

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

					pushFollow(FOLLOW_compoundStatement_in_primaryExpression1386);
					compoundStatement22=compoundStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_compoundStatement.add(compoundStatement22.getTree());
					RPAREN23=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_primaryExpression1388); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN23);

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

					pushFollow(FOLLOW_expression_in_primaryExpression1415);
					expression25=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression25.getTree());
					RPAREN26=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_primaryExpression1417); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN26);

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


					pushFollow(FOLLOW_genericSelection_in_primaryExpression1442);
					genericSelection27=genericSelection();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, genericSelection27.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:273: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 GENERIC28=null;
		Token LPAREN29=null;
		Token COMMA31=null;
		Token RPAREN33=null;
		ParserRuleReturnScope assignmentExpression30 =null;
		ParserRuleReturnScope genericAssocList32 =null;

		Object GENERIC28_tree=null;
		Object LPAREN29_tree=null;
		Object COMMA31_tree=null;
		Object RPAREN33_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:274:2: ( GENERIC LPAREN assignmentExpression COMMA genericAssocList RPAREN -> ^( GENERIC assignmentExpression genericAssocList ) )
			// CivlCParser.g:274:4: GENERIC LPAREN assignmentExpression COMMA genericAssocList RPAREN
			{
			GENERIC28=(Token)match(input,GENERIC,FOLLOW_GENERIC_in_genericSelection1455); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_GENERIC.add(GENERIC28);

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

			pushFollow(FOLLOW_assignmentExpression_in_genericSelection1459);
			assignmentExpression30=assignmentExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression30.getTree());
			COMMA31=(Token)match(input,COMMA,FOLLOW_COMMA_in_genericSelection1461); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_COMMA.add(COMMA31);

			pushFollow(FOLLOW_genericAssocList_in_genericSelection1463);
			genericAssocList32=genericAssocList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_genericAssocList.add(genericAssocList32.getTree());
			RPAREN33=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_genericSelection1465); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN33);

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

			root_0 = (Object)adaptor.nil();
			// 275:9: -> ^( GENERIC assignmentExpression genericAssocList )
			{
				// CivlCParser.g:275: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 genericAssocList_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "genericAssocList"
	// CivlCParser.g:279: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 COMMA35=null;
		ParserRuleReturnScope genericAssociation34 =null;
		ParserRuleReturnScope genericAssociation36 =null;

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

		try {
			// CivlCParser.g:280:2: ( genericAssociation ( COMMA genericAssociation )* -> ^( GENERIC_ASSOC_LIST ( genericAssociation )+ ) )
			// CivlCParser.g:280:4: genericAssociation ( COMMA genericAssociation )*
			{
			pushFollow(FOLLOW_genericAssociation_in_genericAssocList1496);
			genericAssociation34=genericAssociation();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_genericAssociation.add(genericAssociation34.getTree());
			// CivlCParser.g:280:23: ( COMMA genericAssociation )*
			loop5:
			while (true) {
				int alt5=2;
				int LA5_0 = input.LA(1);
				if ( (LA5_0==COMMA) ) {
					alt5=1;
				}

				switch (alt5) {
				case 1 :
					// CivlCParser.g:280:24: COMMA genericAssociation
					{
					COMMA35=(Token)match(input,COMMA,FOLLOW_COMMA_in_genericAssocList1499); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA35);

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

				default :
					break loop5;
				}
			}

			// 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();
			// 281:9: -> ^( GENERIC_ASSOC_LIST ( genericAssociation )+ )
			{
				// CivlCParser.g:281: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:285: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 COLON38=null;
		Token DEFAULT40=null;
		Token COLON41=null;
		ParserRuleReturnScope typeName37 =null;
		ParserRuleReturnScope assignmentExpression39 =null;
		ParserRuleReturnScope assignmentExpression42 =null;

		Object COLON38_tree=null;
		Object DEFAULT40_tree=null;
		Object COLON41_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:286:2: ( typeName COLON assignmentExpression -> ^( GENERIC_ASSOCIATION typeName assignmentExpression ) | DEFAULT COLON assignmentExpression -> ^( GENERIC_ASSOCIATION DEFAULT assignmentExpression ) )
			int alt6=2;
			int LA6_0 = input.LA(1);
			if ( (LA6_0==IDENTIFIER||LA6_0==ATOMIC||LA6_0==BOOL||LA6_0==CHAR||(LA6_0 >= COMPLEX && LA6_0 <= CONST)||(LA6_0 >= DOMAIN && LA6_0 <= DOUBLE)||LA6_0==ENUM||LA6_0==FLOAT||(LA6_0 >= INPUT && LA6_0 <= INT)||(LA6_0 >= LONG && LA6_0 <= MEM_TYPE)||LA6_0==OUTPUT||LA6_0==RANGE||LA6_0==REAL||LA6_0==RESTRICT||(LA6_0 >= SHORT && LA6_0 <= SIGNED)||LA6_0==STRUCT||LA6_0==TYPEOF||(LA6_0 >= UNION && LA6_0 <= VOLATILE)) ) {
				alt6=1;
			}
			else if ( (LA6_0==DEFAULT) ) {
				alt6=2;
			}

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

			switch (alt6) {
				case 1 :
					// CivlCParser.g:286:4: typeName COLON assignmentExpression
					{
					pushFollow(FOLLOW_typeName_in_genericAssociation1533);
					typeName37=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName.add(typeName37.getTree());
					COLON38=(Token)match(input,COLON,FOLLOW_COLON_in_genericAssociation1535); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COLON.add(COLON38);

					pushFollow(FOLLOW_assignmentExpression_in_genericAssociation1537);
					assignmentExpression39=assignmentExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression39.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();
					// 287:9: -> ^( GENERIC_ASSOCIATION typeName assignmentExpression )
					{
						// CivlCParser.g:287: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:288:4: DEFAULT COLON assignmentExpression
					{
					DEFAULT40=(Token)match(input,DEFAULT,FOLLOW_DEFAULT_in_genericAssociation1560); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_DEFAULT.add(DEFAULT40);

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

					pushFollow(FOLLOW_assignmentExpression_in_genericAssociation1564);
					assignmentExpression42=assignmentExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression42.getTree());
					// AST REWRITE
					// elements: assignmentExpression, 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();
					// 289:9: -> ^( GENERIC_ASSOCIATION DEFAULT assignmentExpression )
					{
						// CivlCParser.g:289: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:293: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 RSQUARE45=null;
		Token LPAREN46=null;
		Token RPAREN48=null;
		Token LEXCON49=null;
		Token REXCON50=null;
		Token LPAREN51=null;
		Token RPAREN52=null;
		Token DOT53=null;
		Token IDENTIFIER54=null;
		Token ARROW55=null;
		Token IDENTIFIER56=null;
		ParserRuleReturnScope args1 =null;
		ParserRuleReturnScope args2 =null;
		ParserRuleReturnScope postfixExpressionRoot43 =null;
		ParserRuleReturnScope expression44 =null;
		ParserRuleReturnScope argumentExpressionList47 =null;

		Object l_tree=null;
		Object p_tree=null;
		Object m_tree=null;
		Object RSQUARE45_tree=null;
		Object LPAREN46_tree=null;
		Object RPAREN48_tree=null;
		Object LEXCON49_tree=null;
		Object REXCON50_tree=null;
		Object LPAREN51_tree=null;
		Object RPAREN52_tree=null;
		Object DOT53_tree=null;
		Object IDENTIFIER54_tree=null;
		Object ARROW55_tree=null;
		Object IDENTIFIER56_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:294: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:294: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:294:4: ( postfixExpressionRoot -> postfixExpressionRoot )
			// CivlCParser.g:294:5: postfixExpressionRoot
			{
			pushFollow(FOLLOW_postfixExpressionRoot_in_postfixExpression1596);
			postfixExpressionRoot43=postfixExpressionRoot();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_postfixExpressionRoot.add(postfixExpressionRoot43.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();
			// 294:27: -> postfixExpressionRoot
			{
				adaptor.addChild(root_0, stream_postfixExpressionRoot.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:295: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) ) )*
			loop7:
			while (true) {
				int alt7=8;
				switch ( input.LA(1) ) {
				case LSQUARE:
					{
					alt7=1;
					}
					break;
				case LPAREN:
					{
					alt7=2;
					}
					break;
				case LEXCON:
					{
					alt7=3;
					}
					break;
				case DOT:
					{
					alt7=4;
					}
					break;
				case ARROW:
					{
					alt7=5;
					}
					break;
				case PLUSPLUS:
					{
					alt7=6;
					}
					break;
				case MINUSMINUS:
					{
					alt7=7;
					}
					break;
				}
				switch (alt7) {
				case 1 :
					// CivlCParser.g:296:13: l= LSQUARE expression RSQUARE
					{
					l=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_postfixExpression1628); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LSQUARE.add(l);

					pushFollow(FOLLOW_expression_in_postfixExpression1630);
					expression44=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression44.getTree());
					RSQUARE45=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_postfixExpression1632); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE45);

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

					pushFollow(FOLLOW_argumentExpressionList_in_postfixExpression1739);
					argumentExpressionList47=argumentExpressionList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_argumentExpressionList.add(argumentExpressionList47.getTree());
					RPAREN48=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_postfixExpression1741); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN48);

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

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

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

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

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

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

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

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

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

					root_0 = (Object)adaptor.nil();
					// 312:13: -> ^( ARROW $postfixExpression IDENTIFIER )
					{
						// CivlCParser.g:312: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:313:11: p= PLUSPLUS
					{
					p=(Token)match(input,PLUSPLUS,FOLLOW_PLUSPLUS_in_postfixExpression1960); 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();
					// 314:13: -> ^( OPERATOR POST_INCREMENT[$p] ^( ARGUMENT_LIST $postfixExpression) )
					{
						// CivlCParser.g:314: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:315: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:316:11: m= MINUSMINUS
					{
					m=(Token)match(input,MINUSMINUS,FOLLOW_MINUSMINUS_in_postfixExpression2018); 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();
					// 317:13: -> ^( OPERATOR POST_DECREMENT[$m] ^( ARGUMENT_LIST $postfixExpression) )
					{
						// CivlCParser.g:317: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:318: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 loop7;
				}
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException 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:335: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 LPAREN57=null;
		Token RPAREN59=null;
		Token LCURLY60=null;
		Token RCURLY62=null;
		Token COMMA63=null;
		Token RCURLY64=null;
		ParserRuleReturnScope typeName58 =null;
		ParserRuleReturnScope initializerList61 =null;
		ParserRuleReturnScope primaryExpression65 =null;

		Object LPAREN57_tree=null;
		Object RPAREN59_tree=null;
		Object LCURLY60_tree=null;
		Object RCURLY62_tree=null;
		Object COMMA63_tree=null;
		Object RCURLY64_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:336:2: ( ( LPAREN typeName RPAREN LCURLY )=> LPAREN typeName RPAREN LCURLY initializerList ( RCURLY | COMMA RCURLY ) -> ^( COMPOUND_LITERAL LPAREN typeName initializerList RCURLY ) | primaryExpression )
			int alt9=2;
			int LA9_0 = input.LA(1);
			if ( (LA9_0==LPAREN) ) {
				int LA9_1 = input.LA(2);
				if ( (synpred1_CivlCParser()) ) {
					alt9=1;
				}
				else if ( (true) ) {
					alt9=2;
				}

			}
			else if ( (LA9_0==CHARACTER_CONSTANT||LA9_0==ELLIPSIS||LA9_0==FLOATING_CONSTANT||LA9_0==IDENTIFIER||LA9_0==INTEGER_CONSTANT||LA9_0==STRING_LITERAL||LA9_0==GENERIC||LA9_0==HERE||LA9_0==PROCNULL||LA9_0==RESULT||LA9_0==SELF) ) {
				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:336:4: ( LPAREN typeName RPAREN LCURLY )=> LPAREN typeName RPAREN LCURLY initializerList ( RCURLY | COMMA RCURLY )
					{
					LPAREN57=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_postfixExpressionRoot2105); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN57);

					pushFollow(FOLLOW_typeName_in_postfixExpressionRoot2107);
					typeName58=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName.add(typeName58.getTree());
					RPAREN59=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_postfixExpressionRoot2109); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN59);

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

					pushFollow(FOLLOW_initializerList_in_postfixExpressionRoot2113);
					initializerList61=initializerList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_initializerList.add(initializerList61.getTree());
					// CivlCParser.g:338:3: ( RCURLY | COMMA RCURLY )
					int alt8=2;
					int LA8_0 = input.LA(1);
					if ( (LA8_0==RCURLY) ) {
						alt8=1;
					}
					else if ( (LA8_0==COMMA) ) {
						alt8=2;
					}

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

					switch (alt8) {
						case 1 :
							// CivlCParser.g:338:5: RCURLY
							{
							RCURLY62=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_postfixExpressionRoot2119); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY62);

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

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

							}
							break;

					}

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


					pushFollow(FOLLOW_primaryExpression_in_postfixExpressionRoot2158);
					primaryExpression65=primaryExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, primaryExpression65.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:346: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 COMMA66=null;
		List<Object> list_a=null;
		RuleReturnScope a = null;
		Object COMMA66_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:347:2: ( (a+= assignmentExpression |a+= quantifiedExpression ) ( COMMA (a+= assignmentExpression |a+= quantifiedExpression ) )* -> ^( ARGUMENT_LIST ( $a)+ ) | -> ^( ARGUMENT_LIST ) )
			int alt13=2;
			int LA13_0 = input.LA(1);
			if ( (LA13_0==AMPERSAND||LA13_0==CHARACTER_CONSTANT||LA13_0==ELLIPSIS||LA13_0==FLOATING_CONSTANT||LA13_0==IDENTIFIER||LA13_0==INTEGER_CONSTANT||LA13_0==LPAREN||LA13_0==MINUSMINUS||LA13_0==NOT||LA13_0==PLUS||LA13_0==PLUSPLUS||LA13_0==STAR||(LA13_0 >= STRING_LITERAL && LA13_0 <= SUB)||LA13_0==TILDE||LA13_0==ALIGNOF||LA13_0==BIG_O||LA13_0==CALLS||LA13_0==EXISTS||(LA13_0 >= FORALL && LA13_0 <= GENERIC)||LA13_0==HERE||LA13_0==PROCNULL||LA13_0==RESULT||(LA13_0 >= SCOPEOF && LA13_0 <= SELF)||(LA13_0 >= SIZEOF && LA13_0 <= SPAWN)||LA13_0==SUM) ) {
				alt13=1;
			}
			else if ( ((LA13_0 >= RCURLY && LA13_0 <= RPAREN)) ) {
				alt13=2;
			}

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

			switch (alt13) {
				case 1 :
					// CivlCParser.g:347:4: (a+= assignmentExpression |a+= quantifiedExpression ) ( COMMA (a+= assignmentExpression |a+= quantifiedExpression ) )*
					{
					// CivlCParser.g:347:4: (a+= assignmentExpression |a+= quantifiedExpression )
					int alt10=2;
					int LA10_0 = input.LA(1);
					if ( (LA10_0==AMPERSAND||LA10_0==CHARACTER_CONSTANT||LA10_0==ELLIPSIS||LA10_0==FLOATING_CONSTANT||LA10_0==IDENTIFIER||LA10_0==INTEGER_CONSTANT||LA10_0==LPAREN||LA10_0==MINUSMINUS||LA10_0==NOT||LA10_0==PLUS||LA10_0==PLUSPLUS||LA10_0==STAR||(LA10_0 >= STRING_LITERAL && LA10_0 <= SUB)||LA10_0==TILDE||LA10_0==ALIGNOF||LA10_0==BIG_O||LA10_0==CALLS||LA10_0==GENERIC||LA10_0==HERE||LA10_0==PROCNULL||LA10_0==RESULT||(LA10_0 >= SCOPEOF && LA10_0 <= SELF)||(LA10_0 >= SIZEOF && LA10_0 <= SPAWN)||LA10_0==SUM) ) {
						alt10=1;
					}
					else if ( (LA10_0==EXISTS||LA10_0==FORALL) ) {
						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:347:5: a+= assignmentExpression
							{
							pushFollow(FOLLOW_assignmentExpression_in_argumentExpressionList2174);
							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:347:31: a+= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_argumentExpressionList2180);
							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:348:9: ( COMMA (a+= assignmentExpression |a+= quantifiedExpression ) )*
					loop12:
					while (true) {
						int alt12=2;
						int LA12_0 = input.LA(1);
						if ( (LA12_0==COMMA) ) {
							alt12=1;
						}

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

							// CivlCParser.g:348:16: (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==GENERIC||LA11_0==HERE||LA11_0==PROCNULL||LA11_0==RESULT||(LA11_0 >= SCOPEOF && LA11_0 <= SELF)||(LA11_0 >= SIZEOF && LA11_0 <= SPAWN)||LA11_0==SUM) ) {
								alt11=1;
							}
							else if ( (LA11_0==EXISTS||LA11_0==FORALL) ) {
								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:348:17: a+= assignmentExpression
									{
									pushFollow(FOLLOW_assignmentExpression_in_argumentExpressionList2197);
									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:348:43: a+= quantifiedExpression
									{
									pushFollow(FOLLOW_quantifiedExpression_in_argumentExpressionList2203);
									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 loop12;
						}
					}

					// 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();
					// 349:9: -> ^( ARGUMENT_LIST ( $a)+ )
					{
						// CivlCParser.g:349: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:350: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();
					// 350:7: -> ^( ARGUMENT_LIST )
					{
						// CivlCParser.g:350: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:354: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 ) | 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 SIZEOF71=null;
		Token LPAREN72=null;
		Token RPAREN74=null;
		Token SIZEOF75=null;
		Token SCOPEOF77=null;
		Token ALIGNOF79=null;
		Token LPAREN80=null;
		Token RPAREN82=null;
		ParserRuleReturnScope a =null;
		ParserRuleReturnScope postfixExpression67 =null;
		ParserRuleReturnScope unaryExpression68 =null;
		ParserRuleReturnScope unaryExpression69 =null;
		ParserRuleReturnScope unaryOperator70 =null;
		ParserRuleReturnScope typeName73 =null;
		ParserRuleReturnScope unaryExpression76 =null;
		ParserRuleReturnScope unaryExpression78 =null;
		ParserRuleReturnScope typeName81 =null;
		ParserRuleReturnScope spawnExpression83 =null;
		ParserRuleReturnScope callsExpression84 =null;
		ParserRuleReturnScope sumExpression85 =null;

		Object p_tree=null;
		Object m_tree=null;
		Object SIZEOF71_tree=null;
		Object LPAREN72_tree=null;
		Object RPAREN74_tree=null;
		Object SIZEOF75_tree=null;
		Object SCOPEOF77_tree=null;
		Object ALIGNOF79_tree=null;
		Object LPAREN80_tree=null;
		Object RPAREN82_tree=null;
		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_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_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:360: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 ) | spawnExpression | callsExpression | sumExpression )
			int alt15=11;
			switch ( input.LA(1) ) {
			case CHARACTER_CONSTANT:
			case ELLIPSIS:
			case FLOATING_CONSTANT:
			case IDENTIFIER:
			case INTEGER_CONSTANT:
			case LPAREN:
			case STRING_LITERAL:
			case GENERIC:
			case HERE:
			case PROCNULL:
			case RESULT:
			case SELF:
				{
				alt15=1;
				}
				break;
			case PLUSPLUS:
				{
				alt15=2;
				}
				break;
			case MINUSMINUS:
				{
				alt15=3;
				}
				break;
			case AMPERSAND:
			case NOT:
			case PLUS:
			case STAR:
			case SUB:
			case TILDE:
			case BIG_O:
				{
				alt15=4;
				}
				break;
			case SIZEOF:
				{
				int LA15_16 = input.LA(2);
				if ( (synpred2_CivlCParser()) ) {
					alt15=5;
				}
				else if ( (true) ) {
					alt15=6;
				}

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


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

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

					pushFollow(FOLLOW_unaryExpression_in_unaryExpression2271);
					unaryExpression68=unaryExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_unaryExpression.add(unaryExpression68.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();
					// 362:9: -> ^( OPERATOR PRE_INCREMENT[$p] ^( ARGUMENT_LIST unaryExpression ) )
					{
						// CivlCParser.g:362: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:363: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:364:4: m= MINUSMINUS unaryExpression
					{
					m=(Token)match(input,MINUSMINUS,FOLLOW_MINUSMINUS_in_unaryExpression2313); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_MINUSMINUS.add(m);

					pushFollow(FOLLOW_unaryExpression_in_unaryExpression2315);
					unaryExpression69=unaryExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_unaryExpression.add(unaryExpression69.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();
					// 365:9: -> ^( OPERATOR PRE_DECREMENT[$m] ^( ARGUMENT_LIST unaryExpression ) )
					{
						// CivlCParser.g:365: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:366: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:367:4: unaryOperator (a= castExpression |a= quantifiedExpression )
					{
					pushFollow(FOLLOW_unaryOperator_in_unaryExpression2355);
					unaryOperator70=unaryOperator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_unaryOperator.add(unaryOperator70.getTree());
					// CivlCParser.g:367:18: (a= castExpression |a= quantifiedExpression )
					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==GENERIC||LA14_0==HERE||LA14_0==PROCNULL||LA14_0==RESULT||(LA14_0 >= SCOPEOF && LA14_0 <= SELF)||(LA14_0 >= SIZEOF && LA14_0 <= SPAWN)||LA14_0==SUM) ) {
						alt14=1;
					}
					else if ( (LA14_0==EXISTS||LA14_0==FORALL) ) {
						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:367:19: a= castExpression
							{
							pushFollow(FOLLOW_castExpression_in_unaryExpression2360);
							a=castExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_castExpression.add(a.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:367:38: a= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_unaryExpression2366);
							a=quantifiedExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_quantifiedExpression.add(a.getTree());
							}
							break;

					}

					// AST REWRITE
					// elements: unaryOperator, a
					// 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();
					// 368:9: -> ^( OPERATOR unaryOperator ^( ARGUMENT_LIST $a) )
					{
						// CivlCParser.g:368: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:368: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:369:4: ( SIZEOF LPAREN typeName )=> SIZEOF LPAREN typeName RPAREN
					{
					SIZEOF71=(Token)match(input,SIZEOF,FOLLOW_SIZEOF_in_unaryExpression2404); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SIZEOF.add(SIZEOF71);

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

					pushFollow(FOLLOW_typeName_in_unaryExpression2408);
					typeName73=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName.add(typeName73.getTree());
					RPAREN74=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_unaryExpression2410); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN74);

					// AST REWRITE
					// elements: typeName, 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();
					// 370:9: -> ^( SIZEOF TYPE typeName )
					{
						// CivlCParser.g:370: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:371:4: SIZEOF unaryExpression
					{
					SIZEOF75=(Token)match(input,SIZEOF,FOLLOW_SIZEOF_in_unaryExpression2433); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SIZEOF.add(SIZEOF75);

					pushFollow(FOLLOW_unaryExpression_in_unaryExpression2435);
					unaryExpression76=unaryExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_unaryExpression.add(unaryExpression76.getTree());
					// AST REWRITE
					// elements: SIZEOF, 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();
					// 372:9: -> ^( SIZEOF EXPR unaryExpression )
					{
						// CivlCParser.g:372: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:373:4: SCOPEOF unaryExpression
					{
					SCOPEOF77=(Token)match(input,SCOPEOF,FOLLOW_SCOPEOF_in_unaryExpression2458); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SCOPEOF.add(SCOPEOF77);

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

					root_0 = (Object)adaptor.nil();
					// 374:9: -> ^( SCOPEOF unaryExpression )
					{
						// CivlCParser.g:374: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:375:4: ALIGNOF LPAREN typeName RPAREN
					{
					ALIGNOF79=(Token)match(input,ALIGNOF,FOLLOW_ALIGNOF_in_unaryExpression2481); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ALIGNOF.add(ALIGNOF79);

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

					pushFollow(FOLLOW_typeName_in_unaryExpression2485);
					typeName81=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName.add(typeName81.getTree());
					RPAREN82=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_unaryExpression2487); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN82);

					// 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();
					// 376:9: -> ^( ALIGNOF typeName )
					{
						// CivlCParser.g:376: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:377:4: spawnExpression
					{
					root_0 = (Object)adaptor.nil();


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

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


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

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


					pushFollow(FOLLOW_sumExpression_in_unaryExpression2521);
					sumExpression85=sumExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, sumExpression85.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:383: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 SPAWN86=null;
		Token LPAREN88=null;
		Token RPAREN90=null;
		ParserRuleReturnScope postfixExpressionRoot87 =null;
		ParserRuleReturnScope argumentExpressionList89 =null;

		Object SPAWN86_tree=null;
		Object LPAREN88_tree=null;
		Object RPAREN90_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:384:2: ( SPAWN postfixExpressionRoot LPAREN argumentExpressionList RPAREN -> ^( SPAWN LPAREN postfixExpressionRoot ABSENT argumentExpressionList RPAREN ) )
			// CivlCParser.g:384:4: SPAWN postfixExpressionRoot LPAREN argumentExpressionList RPAREN
			{
			SPAWN86=(Token)match(input,SPAWN,FOLLOW_SPAWN_in_spawnExpression2534); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_SPAWN.add(SPAWN86);

			pushFollow(FOLLOW_postfixExpressionRoot_in_spawnExpression2536);
			postfixExpressionRoot87=postfixExpressionRoot();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_postfixExpressionRoot.add(postfixExpressionRoot87.getTree());
			LPAREN88=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_spawnExpression2538); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN88);

			pushFollow(FOLLOW_argumentExpressionList_in_spawnExpression2540);
			argumentExpressionList89=argumentExpressionList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_argumentExpressionList.add(argumentExpressionList89.getTree());
			RPAREN90=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_spawnExpression2542); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN90);

			// AST REWRITE
			// elements: postfixExpressionRoot, RPAREN, LPAREN, SPAWN, 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();
			// 385:9: -> ^( SPAWN LPAREN postfixExpressionRoot ABSENT argumentExpressionList RPAREN )
			{
				// CivlCParser.g:385: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:390: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 CALLS91=null;
		Token LPAREN92=null;
		Token LPAREN94=null;
		Token RPAREN96=null;
		Token RPAREN97=null;
		ParserRuleReturnScope postfixExpressionRoot93 =null;
		ParserRuleReturnScope argumentExpressionList95 =null;

		Object CALLS91_tree=null;
		Object LPAREN92_tree=null;
		Object LPAREN94_tree=null;
		Object RPAREN96_tree=null;
		Object RPAREN97_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:391:2: ( CALLS LPAREN postfixExpressionRoot LPAREN argumentExpressionList RPAREN RPAREN -> ^( CALLS LPAREN postfixExpressionRoot ABSENT argumentExpressionList RPAREN ) )
			// CivlCParser.g:391:4: CALLS LPAREN postfixExpressionRoot LPAREN argumentExpressionList RPAREN RPAREN
			{
			CALLS91=(Token)match(input,CALLS,FOLLOW_CALLS_in_callsExpression2591); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_CALLS.add(CALLS91);

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

			pushFollow(FOLLOW_postfixExpressionRoot_in_callsExpression2595);
			postfixExpressionRoot93=postfixExpressionRoot();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_postfixExpressionRoot.add(postfixExpressionRoot93.getTree());
			LPAREN94=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_callsExpression2597); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN94);

			pushFollow(FOLLOW_argumentExpressionList_in_callsExpression2607);
			argumentExpressionList95=argumentExpressionList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_argumentExpressionList.add(argumentExpressionList95.getTree());
			RPAREN96=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_callsExpression2609); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN96);

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

			// AST REWRITE
			// elements: RPAREN, argumentExpressionList, postfixExpressionRoot, CALLS, 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();
			// 393:9: -> ^( CALLS LPAREN postfixExpressionRoot ABSENT argumentExpressionList RPAREN )
			{
				// CivlCParser.g:393: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:398: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 SUM98=null;
		Token LPAREN99=null;
		Token RPAREN101=null;
		ParserRuleReturnScope body =null;
		ParserRuleReturnScope boundVariableDeclarationList100 =null;

		Object SUM98_tree=null;
		Object LPAREN99_tree=null;
		Object RPAREN101_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:404:2: ( SUM LPAREN boundVariableDeclarationList RPAREN (body= assignmentExpression |body= quantifiedExpression ) -> ^( SUM boundVariableDeclarationList $body) )
			// CivlCParser.g:404:4: SUM LPAREN boundVariableDeclarationList RPAREN (body= assignmentExpression |body= quantifiedExpression )
			{
			SUM98=(Token)match(input,SUM,FOLLOW_SUM_in_sumExpression2669); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_SUM.add(SUM98);

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

			pushFollow(FOLLOW_boundVariableDeclarationList_in_sumExpression2673);
			boundVariableDeclarationList100=boundVariableDeclarationList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_boundVariableDeclarationList.add(boundVariableDeclarationList100.getTree());
			RPAREN101=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_sumExpression2675); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN101);

			// CivlCParser.g:405:6: (body= assignmentExpression |body= 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==GENERIC||LA16_0==HERE||LA16_0==PROCNULL||LA16_0==RESULT||(LA16_0 >= SCOPEOF && LA16_0 <= SELF)||(LA16_0 >= SIZEOF && LA16_0 <= SPAWN)||LA16_0==SUM) ) {
				alt16=1;
			}
			else if ( (LA16_0==EXISTS||LA16_0==FORALL) ) {
				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:405:7: body= assignmentExpression
					{
					pushFollow(FOLLOW_assignmentExpression_in_sumExpression2685);
					body=assignmentExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_assignmentExpression.add(body.getTree());
					}
					break;
				case 2 :
					// CivlCParser.g:405:35: body= quantifiedExpression
					{
					pushFollow(FOLLOW_quantifiedExpression_in_sumExpression2691);
					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();
			// 406:6: -> ^( SUM boundVariableDeclarationList $body)
			{
				// CivlCParser.g:406: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:411: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 set102=null;

		Object set102_tree=null;

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


			set102=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(set102));
				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:421: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 RPAREN104=null;
		ParserRuleReturnScope typeName103 =null;
		ParserRuleReturnScope castExpression105 =null;
		ParserRuleReturnScope unaryExpression106 =null;

		Object l_tree=null;
		Object RPAREN104_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:427:2: ( ( LPAREN typeName RPAREN ~ LCURLY )=>l= LPAREN typeName RPAREN castExpression -> ^( CAST typeName castExpression $l) | unaryExpression )
			int alt17=2;
			int LA17_0 = input.LA(1);
			if ( (LA17_0==LPAREN) ) {
				int LA17_1 = input.LA(2);
				if ( (synpred3_CivlCParser()) ) {
					alt17=1;
				}
				else if ( (true) ) {
					alt17=2;
				}

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

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

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

					pushFollow(FOLLOW_typeName_in_castExpression2791);
					typeName103=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName.add(typeName103.getTree());
					RPAREN104=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_castExpression2793); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN104);

					pushFollow(FOLLOW_castExpression_in_castExpression2795);
					castExpression105=castExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_castExpression.add(castExpression105.getTree());
					// AST REWRITE
					// elements: castExpression, typeName, l
					// 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();
					// 429:9: -> ^( CAST typeName castExpression $l)
					{
						// CivlCParser.g:429: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:430:4: unaryExpression
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_unaryExpression_in_castExpression2821);
					unaryExpression106=unaryExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, unaryExpression106.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 multiplicativeExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "multiplicativeExpression"
	// CivlCParser.g:434:1: multiplicativeExpression : ( castExpression -> castExpression ) ( ( STAR )=> STAR y= castExpression -> ^( OPERATOR STAR ^( ARGUMENT_LIST $multiplicativeExpression $y) ) | ( DIV )=> DIV y= castExpression -> ^( OPERATOR DIV ^( ARGUMENT_LIST $multiplicativeExpression $y) ) | ( MOD )=> MOD y= castExpression -> ^( 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 STAR108=null;
		Token DIV109=null;
		Token MOD110=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope castExpression107 =null;

		Object STAR108_tree=null;
		Object DIV109_tree=null;
		Object MOD110_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_castExpression=new RewriteRuleSubtreeStream(adaptor,"rule castExpression");

		try {
			// CivlCParser.g:435:2: ( ( castExpression -> castExpression ) ( ( STAR )=> STAR y= castExpression -> ^( OPERATOR STAR ^( ARGUMENT_LIST $multiplicativeExpression $y) ) | ( DIV )=> DIV y= castExpression -> ^( OPERATOR DIV ^( ARGUMENT_LIST $multiplicativeExpression $y) ) | ( MOD )=> MOD y= castExpression -> ^( OPERATOR MOD ^( ARGUMENT_LIST $multiplicativeExpression $y) ) )* )
			// CivlCParser.g:435:4: ( castExpression -> castExpression ) ( ( STAR )=> STAR y= castExpression -> ^( OPERATOR STAR ^( ARGUMENT_LIST $multiplicativeExpression $y) ) | ( DIV )=> DIV y= castExpression -> ^( OPERATOR DIV ^( ARGUMENT_LIST $multiplicativeExpression $y) ) | ( MOD )=> MOD y= castExpression -> ^( OPERATOR MOD ^( ARGUMENT_LIST $multiplicativeExpression $y) ) )*
			{
			// CivlCParser.g:435:4: ( castExpression -> castExpression )
			// CivlCParser.g:435:5: castExpression
			{
			pushFollow(FOLLOW_castExpression_in_multiplicativeExpression2835);
			castExpression107=castExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_castExpression.add(castExpression107.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();
			// 435:20: -> castExpression
			{
				adaptor.addChild(root_0, stream_castExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:436:9: ( ( STAR )=> STAR y= castExpression -> ^( OPERATOR STAR ^( ARGUMENT_LIST $multiplicativeExpression $y) ) | ( DIV )=> DIV y= castExpression -> ^( OPERATOR DIV ^( ARGUMENT_LIST $multiplicativeExpression $y) ) | ( MOD )=> MOD y= castExpression -> ^( OPERATOR MOD ^( ARGUMENT_LIST $multiplicativeExpression $y) ) )*
			loop18:
			while (true) {
				int alt18=4;
				switch ( input.LA(1) ) {
				case STAR:
					{
					int LA18_2 = input.LA(2);
					if ( (synpred4_CivlCParser()) ) {
						alt18=1;
					}

					}
					break;
				case DIV:
					{
					int LA18_3 = input.LA(2);
					if ( (synpred5_CivlCParser()) ) {
						alt18=2;
					}

					}
					break;
				case MOD:
					{
					int LA18_4 = input.LA(2);
					if ( (synpred6_CivlCParser()) ) {
						alt18=3;
					}

					}
					break;
				}
				switch (alt18) {
				case 1 :
					// CivlCParser.g:436:11: ( STAR )=> STAR y= castExpression
					{
					STAR108=(Token)match(input,STAR,FOLLOW_STAR_in_multiplicativeExpression2857); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_STAR.add(STAR108);

					pushFollow(FOLLOW_castExpression_in_multiplicativeExpression2861);
					y=castExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_castExpression.add(y.getTree());
					// AST REWRITE
					// elements: multiplicativeExpression, STAR, 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();
					// 437:13: -> ^( OPERATOR STAR ^( ARGUMENT_LIST $multiplicativeExpression $y) )
					{
						// CivlCParser.g:437: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:437: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:438:11: ( DIV )=> DIV y= castExpression
					{
					DIV109=(Token)match(input,DIV,FOLLOW_DIV_in_multiplicativeExpression2908); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_DIV.add(DIV109);

					pushFollow(FOLLOW_castExpression_in_multiplicativeExpression2912);
					y=castExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_castExpression.add(y.getTree());
					// AST REWRITE
					// elements: y, multiplicativeExpression, DIV
					// 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();
					// 439:13: -> ^( OPERATOR DIV ^( ARGUMENT_LIST $multiplicativeExpression $y) )
					{
						// CivlCParser.g:439: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:439: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:440:11: ( MOD )=> MOD y= castExpression
					{
					MOD110=(Token)match(input,MOD,FOLLOW_MOD_in_multiplicativeExpression2959); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_MOD.add(MOD110);

					pushFollow(FOLLOW_castExpression_in_multiplicativeExpression2963);
					y=castExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_castExpression.add(y.getTree());
					// AST REWRITE
					// elements: multiplicativeExpression, y, MOD
					// 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();
					// 441:13: -> ^( OPERATOR MOD ^( ARGUMENT_LIST $multiplicativeExpression $y) )
					{
						// CivlCParser.g:441: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:441: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 loop18;
				}
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException 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:446: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 PLUS112=null;
		Token SUB113=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope multiplicativeExpression111 =null;

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


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:448:9: ( ( PLUS )=> PLUS y= multiplicativeExpression -> ^( OPERATOR PLUS ^( ARGUMENT_LIST $additiveExpression $y) ) | ( SUB )=> SUB y= multiplicativeExpression -> ^( OPERATOR SUB ^( ARGUMENT_LIST $additiveExpression $y) ) )*
			loop19:
			while (true) {
				int alt19=3;
				int LA19_0 = input.LA(1);
				if ( (LA19_0==PLUS) ) {
					int LA19_2 = input.LA(2);
					if ( (synpred7_CivlCParser()) ) {
						alt19=1;
					}

				}
				else if ( (LA19_0==SUB) ) {
					int LA19_3 = input.LA(2);
					if ( (synpred8_CivlCParser()) ) {
						alt19=2;
					}

				}

				switch (alt19) {
				case 1 :
					// CivlCParser.g:448:11: ( PLUS )=> PLUS y= multiplicativeExpression
					{
					PLUS112=(Token)match(input,PLUS,FOLLOW_PLUS_in_additiveExpression3040); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_PLUS.add(PLUS112);

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

					pushFollow(FOLLOW_multiplicativeExpression_in_additiveExpression3093);
					y=multiplicativeExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_multiplicativeExpression.add(y.getTree());
					// AST REWRITE
					// elements: additiveExpression, y, SUB
					// 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();
					// 451:11: -> ^( OPERATOR SUB ^( ARGUMENT_LIST $additiveExpression $y) )
					{
						// CivlCParser.g:451: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:451: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 loop19;
				}
			}

			}

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

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


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


	// $ANTLR start "rangeExpression"
	// CivlCParser.g:457: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 DOTDOT114=null;
		ParserRuleReturnScope x =null;
		ParserRuleReturnScope s =null;

		Object DOTDOT114_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:458:2: (x= additiveExpression ( ( DOTDOT )=> DOTDOT s= rangeSuffix -> ^( DOTDOT $x $s) | -> $x) )
			// CivlCParser.g:458:4: x= additiveExpression ( ( DOTDOT )=> DOTDOT s= rangeSuffix -> ^( DOTDOT $x $s) | -> $x)
			{
			pushFollow(FOLLOW_additiveExpression_in_rangeExpression3147);
			x=additiveExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_additiveExpression.add(x.getTree());
			// CivlCParser.g:459:9: ( ( DOTDOT )=> DOTDOT s= rangeSuffix -> ^( DOTDOT $x $s) | -> $x)
			int alt20=2;
			int LA20_0 = input.LA(1);
			if ( (LA20_0==DOTDOT) ) {
				int LA20_1 = input.LA(2);
				if ( (synpred9_CivlCParser()) ) {
					alt20=1;
				}
				else if ( (true) ) {
					alt20=2;
				}

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

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

			switch (alt20) {
				case 1 :
					// CivlCParser.g:459:11: ( DOTDOT )=> DOTDOT s= rangeSuffix
					{
					DOTDOT114=(Token)match(input,DOTDOT,FOLLOW_DOTDOT_in_rangeExpression3164); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_DOTDOT.add(DOTDOT114);

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

					root_0 = (Object)adaptor.nil();
					// 459:43: -> ^( DOTDOT $x $s)
					{
						// CivlCParser.g:459: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:460: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();
					// 460: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:464: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 HASH115=null;
		ParserRuleReturnScope x =null;
		ParserRuleReturnScope y =null;

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

		try {
			// CivlCParser.g:465:5: (x= additiveExpression ( ( HASH )=> HASH y= additiveExpression -> $x $y| -> $x) )
			// CivlCParser.g:465:7: x= additiveExpression ( ( HASH )=> HASH y= additiveExpression -> $x $y| -> $x)
			{
			pushFollow(FOLLOW_additiveExpression_in_rangeSuffix3224);
			x=additiveExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_additiveExpression.add(x.getTree());
			// CivlCParser.g:466:9: ( ( HASH )=> HASH y= additiveExpression -> $x $y| -> $x)
			int alt21=2;
			int LA21_0 = input.LA(1);
			if ( (LA21_0==HASH) ) {
				int LA21_1 = input.LA(2);
				if ( (synpred10_CivlCParser()) ) {
					alt21=1;
				}
				else if ( (true) ) {
					alt21=2;
				}

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

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

			switch (alt21) {
				case 1 :
					// CivlCParser.g:466:11: ( HASH )=> HASH y= additiveExpression
					{
					HASH115=(Token)match(input,HASH,FOLLOW_HASH_in_rangeSuffix3241); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_HASH.add(HASH115);

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

					root_0 = (Object)adaptor.nil();
					// 466: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:467: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();
					// 467: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:472: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 SHIFTLEFT117=null;
		Token SHIFTRIGHT118=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope rangeExpression116 =null;

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


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:474:9: ( ( SHIFTLEFT )=> SHIFTLEFT y= rangeExpression -> ^( OPERATOR SHIFTLEFT ^( ARGUMENT_LIST $shiftExpression $y) ) | ( SHIFTRIGHT )=> SHIFTRIGHT y= rangeExpression -> ^( OPERATOR SHIFTRIGHT ^( ARGUMENT_LIST $shiftExpression $y) ) )*
			loop22:
			while (true) {
				int alt22=3;
				int LA22_0 = input.LA(1);
				if ( (LA22_0==SHIFTLEFT) ) {
					int LA22_2 = input.LA(2);
					if ( (synpred11_CivlCParser()) ) {
						alt22=1;
					}

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

				}

				switch (alt22) {
				case 1 :
					// CivlCParser.g:474:11: ( SHIFTLEFT )=> SHIFTLEFT y= rangeExpression
					{
					SHIFTLEFT117=(Token)match(input,SHIFTLEFT,FOLLOW_SHIFTLEFT_in_shiftExpression3317); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SHIFTLEFT.add(SHIFTLEFT117);

					pushFollow(FOLLOW_rangeExpression_in_shiftExpression3321);
					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();
					// 475:11: -> ^( OPERATOR SHIFTLEFT ^( ARGUMENT_LIST $shiftExpression $y) )
					{
						// CivlCParser.g:475: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:475: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:476:11: ( SHIFTRIGHT )=> SHIFTRIGHT y= rangeExpression
					{
					SHIFTRIGHT118=(Token)match(input,SHIFTRIGHT,FOLLOW_SHIFTRIGHT_in_shiftExpression3366); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SHIFTRIGHT.add(SHIFTRIGHT118);

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

					root_0 = (Object)adaptor.nil();
					// 477:11: -> ^( OPERATOR SHIFTRIGHT ^( ARGUMENT_LIST $shiftExpression $y) )
					{
						// CivlCParser.g:477: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:477: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 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 "shiftExpression"


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


	// $ANTLR start "relationalExpression"
	// CivlCParser.g:482: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 shiftExpression119 =null;
		ParserRuleReturnScope relationalOperator120 =null;

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

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


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:484:9: ( ( relationalOperator )=> relationalOperator (y= shiftExpression ) -> ^( OPERATOR relationalOperator ^( ARGUMENT_LIST $relationalExpression $y) ) )*
			loop23:
			while (true) {
				int alt23=2;
				int LA23_0 = input.LA(1);
				if ( ((LA23_0 >= GT && LA23_0 <= GTE)||(LA23_0 >= LT && LA23_0 <= LTE)) ) {
					int LA23_2 = input.LA(2);
					if ( (synpred13_CivlCParser()) ) {
						alt23=1;
					}

				}

				switch (alt23) {
				case 1 :
					// CivlCParser.g:484:11: ( relationalOperator )=> relationalOperator (y= shiftExpression )
					{
					pushFollow(FOLLOW_relationalOperator_in_relationalExpression3447);
					relationalOperator120=relationalOperator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_relationalOperator.add(relationalOperator120.getTree());
					// CivlCParser.g:485:13: (y= shiftExpression )
					// CivlCParser.g:485:14: y= shiftExpression
					{
					pushFollow(FOLLOW_shiftExpression_in_relationalExpression3464);
					y=shiftExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_shiftExpression.add(y.getTree());
					}

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

					root_0 = (Object)adaptor.nil();
					// 486:13: -> ^( OPERATOR relationalOperator ^( ARGUMENT_LIST $relationalExpression $y) )
					{
						// CivlCParser.g:486: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:487: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 loop23;
				}
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException 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:492: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 set121=null;

		Object set121_tree=null;

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


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


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:499:9: ( ( equalityOperator )=> equalityOperator (y= relationalExpression |y= quantifiedExpression ) -> ^( OPERATOR equalityOperator ^( ARGUMENT_LIST $equalityExpression $y) ) )*
			loop25:
			while (true) {
				int alt25=2;
				int LA25_0 = input.LA(1);
				if ( (LA25_0==EQUALS||LA25_0==NEQ) ) {
					int LA25_2 = input.LA(2);
					if ( (synpred14_CivlCParser()) ) {
						alt25=1;
					}

				}

				switch (alt25) {
				case 1 :
					// CivlCParser.g:499:11: ( equalityOperator )=> equalityOperator (y= relationalExpression |y= quantifiedExpression )
					{
					pushFollow(FOLLOW_equalityOperator_in_equalityExpression3584);
					equalityOperator123=equalityOperator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_equalityOperator.add(equalityOperator123.getTree());
					// CivlCParser.g:500:13: (y= relationalExpression |y= quantifiedExpression )
					int alt24=2;
					int LA24_0 = input.LA(1);
					if ( (LA24_0==AMPERSAND||LA24_0==CHARACTER_CONSTANT||LA24_0==ELLIPSIS||LA24_0==FLOATING_CONSTANT||LA24_0==IDENTIFIER||LA24_0==INTEGER_CONSTANT||LA24_0==LPAREN||LA24_0==MINUSMINUS||LA24_0==NOT||LA24_0==PLUS||LA24_0==PLUSPLUS||LA24_0==STAR||(LA24_0 >= STRING_LITERAL && LA24_0 <= SUB)||LA24_0==TILDE||LA24_0==ALIGNOF||LA24_0==BIG_O||LA24_0==CALLS||LA24_0==GENERIC||LA24_0==HERE||LA24_0==PROCNULL||LA24_0==RESULT||(LA24_0 >= SCOPEOF && LA24_0 <= SELF)||(LA24_0 >= SIZEOF && LA24_0 <= SPAWN)||LA24_0==SUM) ) {
						alt24=1;
					}
					else if ( (LA24_0==EXISTS||LA24_0==FORALL) ) {
						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:500:14: y= relationalExpression
							{
							pushFollow(FOLLOW_relationalExpression_in_equalityExpression3601);
							y=relationalExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_relationalExpression.add(y.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:500:39: y= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_equalityExpression3607);
							y=quantifiedExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_quantifiedExpression.add(y.getTree());
							}
							break;

					}

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


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


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

		Object set124_tree=null;

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


			set124=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(set124));
				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:512: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 AMPERSAND126=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope equalityExpression125 =null;

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

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


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:514:9: ( ( AMPERSAND )=> AMPERSAND y= equalityExpression -> ^( OPERATOR AMPERSAND ^( ARGUMENT_LIST $andExpression $y) ) )*
			loop26:
			while (true) {
				int alt26=2;
				int LA26_0 = input.LA(1);
				if ( (LA26_0==AMPERSAND) ) {
					int LA26_2 = input.LA(2);
					if ( (synpred15_CivlCParser()) ) {
						alt26=1;
					}

				}

				switch (alt26) {
				case 1 :
					// CivlCParser.g:514:11: ( AMPERSAND )=> AMPERSAND y= equalityExpression
					{
					AMPERSAND126=(Token)match(input,AMPERSAND,FOLLOW_AMPERSAND_in_andExpression3720); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_AMPERSAND.add(AMPERSAND126);

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

					root_0 = (Object)adaptor.nil();
					// 515:13: -> ^( OPERATOR AMPERSAND ^( ARGUMENT_LIST $andExpression $y) )
					{
						// CivlCParser.g:515: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:515: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 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 "andExpression"


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


	// $ANTLR start "exclusiveOrExpression"
	// CivlCParser.g:520: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 BITXOR128=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope andExpression127 =null;

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

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


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:522:9: ( ( BITXOR )=> BITXOR y= andExpression -> ^( OPERATOR BITXOR ^( ARGUMENT_LIST $exclusiveOrExpression $y) ) )*
			loop27:
			while (true) {
				int alt27=2;
				int LA27_0 = input.LA(1);
				if ( (LA27_0==BITXOR) ) {
					int LA27_2 = input.LA(2);
					if ( (synpred16_CivlCParser()) ) {
						alt27=1;
					}

				}

				switch (alt27) {
				case 1 :
					// CivlCParser.g:522:11: ( BITXOR )=> BITXOR y= andExpression
					{
					BITXOR128=(Token)match(input,BITXOR,FOLLOW_BITXOR_in_exclusiveOrExpression3803); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_BITXOR.add(BITXOR128);

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

			}

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

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


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


	// $ANTLR start "inclusiveOrExpression"
	// CivlCParser.g:528: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 BITOR130=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope exclusiveOrExpression129 =null;

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

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


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:530:9: ( ( BITOR )=> BITOR y= exclusiveOrExpression -> ^( OPERATOR BITOR ^( ARGUMENT_LIST $inclusiveOrExpression $y) ) )*
			loop28:
			while (true) {
				int alt28=2;
				int LA28_0 = input.LA(1);
				if ( (LA28_0==BITOR) ) {
					int LA28_2 = input.LA(2);
					if ( (synpred17_CivlCParser()) ) {
						alt28=1;
					}

				}

				switch (alt28) {
				case 1 :
					// CivlCParser.g:530:11: ( BITOR )=> BITOR y= exclusiveOrExpression
					{
					BITOR130=(Token)match(input,BITOR,FOLLOW_BITOR_in_inclusiveOrExpression3886); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_BITOR.add(BITOR130);

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


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


	// $ANTLR start "logicalAndExpression"
	// CivlCParser.g:536: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 AND132=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope inclusiveOrExpression131 =null;

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


			retval.tree = root_0;
			}

			}

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

				}

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

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

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

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

					}

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


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


	// $ANTLR start "logicalOrExpression"
	// CivlCParser.g:544: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 OR134=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope logicalAndExpression133 =null;

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


			retval.tree = root_0;
			}

			}

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

				}

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

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

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

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

					}

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

					root_0 = (Object)adaptor.nil();
					// 547:13: -> ^( OPERATOR OR ^( ARGUMENT_LIST $logicalOrExpression $y) )
					{
						// CivlCParser.g:547: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:547: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 loop32;
				}
			}

			}

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

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


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


	// $ANTLR start "logicalImpliesExpression"
	// CivlCParser.g:553: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 IMPLIES135=null;
		ParserRuleReturnScope x =null;
		ParserRuleReturnScope y =null;

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


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:555:9: ( ( IMPLIES )=> IMPLIES (y= logicalImpliesExpression |y= quantifiedExpression ) -> ^( OPERATOR IMPLIES ^( ARGUMENT_LIST $x $y) ) )?
			int alt34=2;
			int LA34_0 = input.LA(1);
			if ( (LA34_0==IMPLIES) ) {
				int LA34_1 = input.LA(2);
				if ( (synpred20_CivlCParser()) ) {
					alt34=1;
				}
			}
			switch (alt34) {
				case 1 :
					// CivlCParser.g:555:11: ( IMPLIES )=> IMPLIES (y= logicalImpliesExpression |y= quantifiedExpression )
					{
					IMPLIES135=(Token)match(input,IMPLIES,FOLLOW_IMPLIES_in_logicalImpliesExpression4154); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IMPLIES.add(IMPLIES135);

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

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

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

					}

					// AST REWRITE
					// elements: IMPLIES, 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();
					// 556:13: -> ^( OPERATOR IMPLIES ^( ARGUMENT_LIST $x $y) )
					{
						// CivlCParser.g:556: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:556: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:562: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 QMARK137=null;
		Token COLON139=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope logicalImpliesExpression136 =null;
		ParserRuleReturnScope expression138 =null;

		Object QMARK137_tree=null;
		Object COLON139_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:563:2: ( logicalImpliesExpression ( ( QMARK )=> QMARK expression COLON (y= conditionalExpression |y= quantifiedExpression ) -> ^( OPERATOR QMARK ^( ARGUMENT_LIST logicalImpliesExpression expression $y) ) | -> logicalImpliesExpression ) )
			// CivlCParser.g:563:4: logicalImpliesExpression ( ( QMARK )=> QMARK expression COLON (y= conditionalExpression |y= quantifiedExpression ) -> ^( OPERATOR QMARK ^( ARGUMENT_LIST logicalImpliesExpression expression $y) ) | -> logicalImpliesExpression )
			{
			pushFollow(FOLLOW_logicalImpliesExpression_in_conditionalExpression4223);
			logicalImpliesExpression136=logicalImpliesExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_logicalImpliesExpression.add(logicalImpliesExpression136.getTree());
			// CivlCParser.g:564:9: ( ( QMARK )=> QMARK expression COLON (y= conditionalExpression |y= quantifiedExpression ) -> ^( OPERATOR QMARK ^( ARGUMENT_LIST logicalImpliesExpression expression $y) ) | -> logicalImpliesExpression )
			int alt36=2;
			int LA36_0 = input.LA(1);
			if ( (LA36_0==QMARK) ) {
				int LA36_1 = input.LA(2);
				if ( (synpred21_CivlCParser()) ) {
					alt36=1;
				}
				else if ( (true) ) {
					alt36=2;
				}

			}
			else if ( (LA36_0==EOF||(LA36_0 >= AMPERSAND && LA36_0 <= AND)||LA36_0==ASSIGN||(LA36_0 >= BITANDEQ && LA36_0 <= BITXOREQ)||(LA36_0 >= COLON && LA36_0 <= COMMA)||(LA36_0 >= DIV && LA36_0 <= DIVEQ)||LA36_0==DOTDOT||LA36_0==EQUALS||(LA36_0 >= GT && LA36_0 <= HASH)||LA36_0==IMPLIES||(LA36_0 >= LT && LA36_0 <= LTE)||(LA36_0 >= MOD && LA36_0 <= NEQ)||LA36_0==OR||(LA36_0 >= PLUS && LA36_0 <= PLUSEQ)||(LA36_0 >= RCURLY && LA36_0 <= RPAREN)||LA36_0==RSQUARE||(LA36_0 >= SEMI && LA36_0 <= STAREQ)||(LA36_0 >= SUB && LA36_0 <= SUBEQ)||LA36_0==ASSIGNS||LA36_0==DEPENDS||LA36_0==ENSURES||LA36_0==GUARD||LA36_0==READS||LA36_0==REQUIRES) ) {
				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:564:11: ( QMARK )=> QMARK expression COLON (y= conditionalExpression |y= quantifiedExpression )
					{
					QMARK137=(Token)match(input,QMARK,FOLLOW_QMARK_in_conditionalExpression4240); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_QMARK.add(QMARK137);

					pushFollow(FOLLOW_expression_in_conditionalExpression4242);
					expression138=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression138.getTree());
					COLON139=(Token)match(input,COLON,FOLLOW_COLON_in_conditionalExpression4244); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COLON.add(COLON139);

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

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

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

					}

					// AST REWRITE
					// elements: expression, QMARK, y, logicalImpliesExpression
					// 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();
					// 566:13: -> ^( OPERATOR QMARK ^( ARGUMENT_LIST logicalImpliesExpression expression $y) )
					{
						// CivlCParser.g:566: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:567: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:571: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();
					// 571: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 arrayLambdaExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "arrayLambdaExpression"
	// CivlCParser.g:579: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 LPAREN140=null;
		Token RPAREN142=null;
		Token LAMBDA143=null;
		Token LPAREN144=null;
		Token BITOR146=null;
		Token RPAREN147=null;
		Token LPAREN148=null;
		Token RPAREN150=null;
		Token LAMBDA151=null;
		Token LPAREN152=null;
		Token RPAREN154=null;
		ParserRuleReturnScope restrict =null;
		ParserRuleReturnScope cond1 =null;
		ParserRuleReturnScope cond2 =null;
		ParserRuleReturnScope typeName141 =null;
		ParserRuleReturnScope boundVariableDeclarationList145 =null;
		ParserRuleReturnScope typeName149 =null;
		ParserRuleReturnScope boundVariableDeclarationList153 =null;

		Object LPAREN140_tree=null;
		Object RPAREN142_tree=null;
		Object LAMBDA143_tree=null;
		Object LPAREN144_tree=null;
		Object BITOR146_tree=null;
		Object RPAREN147_tree=null;
		Object LPAREN148_tree=null;
		Object RPAREN150_tree=null;
		Object LAMBDA151_tree=null;
		Object LPAREN152_tree=null;
		Object RPAREN154_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:580: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 alt40=2;
			int LA40_0 = input.LA(1);
			if ( (LA40_0==LPAREN) ) {
				int LA40_1 = input.LA(2);
				if ( (synpred22_CivlCParser()) ) {
					alt40=1;
				}
				else if ( (true) ) {
					alt40=2;
				}

			}

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

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

					pushFollow(FOLLOW_typeName_in_arrayLambdaExpression4458);
					typeName141=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName.add(typeName141.getTree());
					RPAREN142=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_arrayLambdaExpression4460); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN142);

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

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

					pushFollow(FOLLOW_boundVariableDeclarationList_in_arrayLambdaExpression4478);
					boundVariableDeclarationList145=boundVariableDeclarationList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_boundVariableDeclarationList.add(boundVariableDeclarationList145.getTree());
					BITOR146=(Token)match(input,BITOR,FOLLOW_BITOR_in_arrayLambdaExpression4480); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_BITOR.add(BITOR146);

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

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

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

					}

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

					// CivlCParser.g:586:13: (cond1= assignmentExpression |cond1= 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==GENERIC||LA38_0==HERE||LA38_0==PROCNULL||LA38_0==RESULT||(LA38_0 >= SCOPEOF && LA38_0 <= SELF)||(LA38_0 >= SIZEOF && LA38_0 <= SPAWN)||LA38_0==SUM) ) {
						alt38=1;
					}
					else if ( (LA38_0==EXISTS||LA38_0==FORALL) ) {
						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:586:14: cond1= assignmentExpression
							{
							pushFollow(FOLLOW_assignmentExpression_in_arrayLambdaExpression4535);
							cond1=assignmentExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_assignmentExpression.add(cond1.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:586:43: cond1= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_arrayLambdaExpression4541);
							cond1=quantifiedExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_quantifiedExpression.add(cond1.getTree());
							}
							break;

					}

					}

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

					pushFollow(FOLLOW_typeName_in_arrayLambdaExpression4577);
					typeName149=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName.add(typeName149.getTree());
					RPAREN150=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_arrayLambdaExpression4579); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN150);

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

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

					pushFollow(FOLLOW_boundVariableDeclarationList_in_arrayLambdaExpression4593);
					boundVariableDeclarationList153=boundVariableDeclarationList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_boundVariableDeclarationList.add(boundVariableDeclarationList153.getTree());
					RPAREN154=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_arrayLambdaExpression4595); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN154);

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

					}

					// AST REWRITE
					// elements: LAMBDA, cond2, boundVariableDeclarationList, typeName
					// 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();
					// 591:9: -> ^( LAMBDA typeName boundVariableDeclarationList $cond2)
					{
						// CivlCParser.g:591: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:594: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 IDENTIFIER156=null;
		Token COMMA157=null;
		Token IDENTIFIER158=null;
		Token COLON159=null;
		ParserRuleReturnScope typeName155 =null;
		ParserRuleReturnScope rangeExpression160 =null;

		Object IDENTIFIER156_tree=null;
		Object COMMA157_tree=null;
		Object IDENTIFIER158_tree=null;
		Object COLON159_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:595:2: ( typeName IDENTIFIER ( COMMA IDENTIFIER )* ( COLON rangeExpression )? -> ^( BOUND_VARIABLE_DECLARATION typeName ^( BOUND_VARIABLE_NAME_LIST ( IDENTIFIER )+ ) ( rangeExpression )? ) )
			// CivlCParser.g:595:4: typeName IDENTIFIER ( COMMA IDENTIFIER )* ( COLON rangeExpression )?
			{
			pushFollow(FOLLOW_typeName_in_boundVariableDeclarationSubList4647);
			typeName155=typeName();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_typeName.add(typeName155.getTree());
			IDENTIFIER156=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_boundVariableDeclarationSubList4649); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER156);

			// CivlCParser.g:595:24: ( COMMA IDENTIFIER )*
			loop41:
			while (true) {
				int alt41=2;
				int LA41_0 = input.LA(1);
				if ( (LA41_0==COMMA) ) {
					alt41=1;
				}

				switch (alt41) {
				case 1 :
					// CivlCParser.g:595:25: COMMA IDENTIFIER
					{
					COMMA157=(Token)match(input,COMMA,FOLLOW_COMMA_in_boundVariableDeclarationSubList4652); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA157);

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

					}
					break;

				default :
					break loop41;
				}
			}

			// CivlCParser.g:595:44: ( COLON rangeExpression )?
			int alt42=2;
			int LA42_0 = input.LA(1);
			if ( (LA42_0==COLON) ) {
				alt42=1;
			}
			switch (alt42) {
				case 1 :
					// CivlCParser.g:595:45: COLON rangeExpression
					{
					COLON159=(Token)match(input,COLON,FOLLOW_COLON_in_boundVariableDeclarationSubList4659); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COLON.add(COLON159);

					pushFollow(FOLLOW_rangeExpression_in_boundVariableDeclarationSubList4661);
					rangeExpression160=rangeExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_rangeExpression.add(rangeExpression160.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();
			// 596:9: -> ^( BOUND_VARIABLE_DECLARATION typeName ^( BOUND_VARIABLE_NAME_LIST ( IDENTIFIER )+ ) ( rangeExpression )? )
			{
				// CivlCParser.g:596: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:597: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:597: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:600: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 SEMI162=null;
		ParserRuleReturnScope boundVariableDeclarationSubList161 =null;
		ParserRuleReturnScope boundVariableDeclarationSubList163 =null;

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

		try {
			// CivlCParser.g:601:2: ( boundVariableDeclarationSubList ( SEMI boundVariableDeclarationSubList )* -> ^( BOUND_VARIABLE_DECLARATION_LIST ( boundVariableDeclarationSubList )+ ) )
			// CivlCParser.g:601:4: boundVariableDeclarationSubList ( SEMI boundVariableDeclarationSubList )*
			{
			pushFollow(FOLLOW_boundVariableDeclarationSubList_in_boundVariableDeclarationList4712);
			boundVariableDeclarationSubList161=boundVariableDeclarationSubList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_boundVariableDeclarationSubList.add(boundVariableDeclarationSubList161.getTree());
			// CivlCParser.g:601:36: ( SEMI boundVariableDeclarationSubList )*
			loop43:
			while (true) {
				int alt43=2;
				int LA43_0 = input.LA(1);
				if ( (LA43_0==SEMI) ) {
					alt43=1;
				}

				switch (alt43) {
				case 1 :
					// CivlCParser.g:601:37: SEMI boundVariableDeclarationSubList
					{
					SEMI162=(Token)match(input,SEMI,FOLLOW_SEMI_in_boundVariableDeclarationList4715); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SEMI.add(SEMI162);

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

				default :
					break loop43;
				}
			}

			// 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();
			// 602:9: -> ^( BOUND_VARIABLE_DECLARATION_LIST ( boundVariableDeclarationSubList )+ )
			{
				// CivlCParser.g:602: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:615: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 arrayLambdaExpression164 =null;
		ParserRuleReturnScope conditionalExpression165 =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:616:2: ( ( arrayLambdaExpression )=> arrayLambdaExpression | ( unaryExpression assignmentOperator )=>lhs= unaryExpression op= assignmentOperator (rhs= assignmentExpression |rhs= quantifiedExpression ) -> ^( OPERATOR $op ^( ARGUMENT_LIST $lhs $rhs) ) | conditionalExpression )
			int alt45=3;
			switch ( input.LA(1) ) {
			case LPAREN:
				{
				int LA45_1 = input.LA(2);
				if ( (synpred23_CivlCParser()) ) {
					alt45=1;
				}
				else if ( (synpred24_CivlCParser()) ) {
					alt45=2;
				}
				else if ( (true) ) {
					alt45=3;
				}

				}
				break;
			case IDENTIFIER:
				{
				int LA45_2 = input.LA(2);
				if ( (synpred24_CivlCParser()) ) {
					alt45=2;
				}
				else if ( (true) ) {
					alt45=3;
				}

				}
				break;
			case INTEGER_CONSTANT:
				{
				int LA45_3 = input.LA(2);
				if ( (synpred24_CivlCParser()) ) {
					alt45=2;
				}
				else if ( (true) ) {
					alt45=3;
				}

				}
				break;
			case FLOATING_CONSTANT:
				{
				int LA45_4 = input.LA(2);
				if ( (synpred24_CivlCParser()) ) {
					alt45=2;
				}
				else if ( (true) ) {
					alt45=3;
				}

				}
				break;
			case CHARACTER_CONSTANT:
				{
				int LA45_5 = input.LA(2);
				if ( (synpred24_CivlCParser()) ) {
					alt45=2;
				}
				else if ( (true) ) {
					alt45=3;
				}

				}
				break;
			case SELF:
				{
				int LA45_6 = input.LA(2);
				if ( (synpred24_CivlCParser()) ) {
					alt45=2;
				}
				else if ( (true) ) {
					alt45=3;
				}

				}
				break;
			case PROCNULL:
				{
				int LA45_7 = input.LA(2);
				if ( (synpred24_CivlCParser()) ) {
					alt45=2;
				}
				else if ( (true) ) {
					alt45=3;
				}

				}
				break;
			case RESULT:
				{
				int LA45_8 = input.LA(2);
				if ( (synpred24_CivlCParser()) ) {
					alt45=2;
				}
				else if ( (true) ) {
					alt45=3;
				}

				}
				break;
			case HERE:
				{
				int LA45_9 = input.LA(2);
				if ( (synpred24_CivlCParser()) ) {
					alt45=2;
				}
				else if ( (true) ) {
					alt45=3;
				}

				}
				break;
			case ELLIPSIS:
				{
				int LA45_10 = input.LA(2);
				if ( (synpred24_CivlCParser()) ) {
					alt45=2;
				}
				else if ( (true) ) {
					alt45=3;
				}

				}
				break;
			case STRING_LITERAL:
				{
				int LA45_11 = input.LA(2);
				if ( (synpred24_CivlCParser()) ) {
					alt45=2;
				}
				else if ( (true) ) {
					alt45=3;
				}

				}
				break;
			case GENERIC:
				{
				int LA45_12 = input.LA(2);
				if ( (synpred24_CivlCParser()) ) {
					alt45=2;
				}
				else if ( (true) ) {
					alt45=3;
				}

				}
				break;
			case PLUSPLUS:
				{
				int LA45_13 = input.LA(2);
				if ( (synpred24_CivlCParser()) ) {
					alt45=2;
				}
				else if ( (true) ) {
					alt45=3;
				}

				}
				break;
			case MINUSMINUS:
				{
				int LA45_14 = input.LA(2);
				if ( (synpred24_CivlCParser()) ) {
					alt45=2;
				}
				else if ( (true) ) {
					alt45=3;
				}

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

				}
				break;
			case SIZEOF:
				{
				int LA45_16 = input.LA(2);
				if ( (synpred24_CivlCParser()) ) {
					alt45=2;
				}
				else if ( (true) ) {
					alt45=3;
				}

				}
				break;
			case SCOPEOF:
				{
				int LA45_17 = input.LA(2);
				if ( (synpred24_CivlCParser()) ) {
					alt45=2;
				}
				else if ( (true) ) {
					alt45=3;
				}

				}
				break;
			case ALIGNOF:
				{
				int LA45_18 = input.LA(2);
				if ( (synpred24_CivlCParser()) ) {
					alt45=2;
				}
				else if ( (true) ) {
					alt45=3;
				}

				}
				break;
			case SPAWN:
				{
				int LA45_19 = input.LA(2);
				if ( (synpred24_CivlCParser()) ) {
					alt45=2;
				}
				else if ( (true) ) {
					alt45=3;
				}

				}
				break;
			case CALLS:
				{
				int LA45_20 = input.LA(2);
				if ( (synpred24_CivlCParser()) ) {
					alt45=2;
				}
				else if ( (true) ) {
					alt45=3;
				}

				}
				break;
			case SUM:
				{
				int LA45_21 = input.LA(2);
				if ( (synpred24_CivlCParser()) ) {
					alt45=2;
				}
				else if ( (true) ) {
					alt45=3;
				}

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


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

					}
					break;
				case 2 :
					// CivlCParser.g:617:4: ( unaryExpression assignmentOperator )=>lhs= unaryExpression op= assignmentOperator (rhs= assignmentExpression |rhs= quantifiedExpression )
					{
					pushFollow(FOLLOW_unaryExpression_in_assignmentExpression4778);
					lhs=unaryExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_unaryExpression.add(lhs.getTree());
					pushFollow(FOLLOW_assignmentOperator_in_assignmentExpression4790);
					op=assignmentOperator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_assignmentOperator.add(op.getTree());
					// CivlCParser.g:620:9: (rhs= assignmentExpression |rhs= 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==GENERIC||LA44_0==HERE||LA44_0==PROCNULL||LA44_0==RESULT||(LA44_0 >= SCOPEOF && LA44_0 <= SELF)||(LA44_0 >= SIZEOF && LA44_0 <= SPAWN)||LA44_0==SUM) ) {
						alt44=1;
					}
					else if ( (LA44_0==EXISTS||LA44_0==FORALL) ) {
						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:620:10: rhs= assignmentExpression
							{
							pushFollow(FOLLOW_assignmentExpression_in_assignmentExpression4803);
							rhs=assignmentExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_assignmentExpression.add(rhs.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:620:37: rhs= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_assignmentExpression4809);
							rhs=quantifiedExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_quantifiedExpression.add(rhs.getTree());
							}
							break;

					}

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


					pushFollow(FOLLOW_conditionalExpression_in_assignmentExpression4842);
					conditionalExpression165=conditionalExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, conditionalExpression165.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:626: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 set166=null;

		Object set166_tree=null;

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


			set166=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(set166));
				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:639: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 COMMA168=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope assignmentExpression167 =null;

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

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


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:641:4: ( ( COMMA )=> COMMA y= assignmentExpression -> ^( OPERATOR COMMA ^( ARGUMENT_LIST $commaExpression $y) ) )*
			loop46:
			while (true) {
				int alt46=2;
				int LA46_0 = input.LA(1);
				if ( (LA46_0==COMMA) ) {
					int LA46_2 = input.LA(2);
					if ( (synpred25_CivlCParser()) ) {
						alt46=1;
					}

				}

				switch (alt46) {
				case 1 :
					// CivlCParser.g:641:6: ( COMMA )=> COMMA y= assignmentExpression
					{
					COMMA168=(Token)match(input,COMMA,FOLLOW_COMMA_in_commaExpression4929); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA168);

					pushFollow(FOLLOW_assignmentExpression_in_commaExpression4933);
					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();
					// 642:6: -> ^( OPERATOR COMMA ^( ARGUMENT_LIST $commaExpression $y) )
					{
						// CivlCParser.g:642: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:642: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 loop46;
				}
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException 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:647: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 quantifiedExpression169 =null;
		ParserRuleReturnScope commaExpression170 =null;


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

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

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


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

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


					pushFollow(FOLLOW_commaExpression_in_expression4982);
					commaExpression170=commaExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, commaExpression170.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:656: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 conditionalExpression171 =null;


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


			pushFollow(FOLLOW_conditionalExpression_in_constantExpression4995);
			conditionalExpression171=conditionalExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) adaptor.addChild(root_0, conditionalExpression171.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:683: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 SEMI173=null;
		Token SEMI174=null;
		ParserRuleReturnScope d =null;
		ParserRuleReturnScope i =null;
		ParserRuleReturnScope contract172 =null;
		ParserRuleReturnScope staticAssertDeclaration175 =null;

		Object SEMI173_tree=null;
		Object SEMI174_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:689:2: (d= declarationSpecifiers (i= initDeclaratorList contract SEMI -> ^( DECLARATION $d $i contract ) | SEMI -> ^( DECLARATION $d ABSENT ABSENT ) ) | staticAssertDeclaration )
			int alt49=2;
			int LA49_0 = input.LA(1);
			if ( (LA49_0==IDENTIFIER||(LA49_0 >= ABSTRACT && LA49_0 <= ALIGNAS)||(LA49_0 >= ATOMIC && LA49_0 <= AUTO)||LA49_0==BOOL||LA49_0==CHAR||(LA49_0 >= COMPLEX && LA49_0 <= CONST)||LA49_0==DEVICE||(LA49_0 >= DOMAIN && LA49_0 <= DOUBLE)||LA49_0==ENUM||(LA49_0 >= EXTERN && LA49_0 <= FATOMIC)||LA49_0==FLOAT||LA49_0==GLOBAL||(LA49_0 >= INLINE && LA49_0 <= INT)||(LA49_0 >= LONG && LA49_0 <= NORETURN)||LA49_0==OUTPUT||(LA49_0 >= PURE && LA49_0 <= RANGE)||(LA49_0 >= REAL && LA49_0 <= REGISTER)||LA49_0==RESTRICT||(LA49_0 >= SHARED && LA49_0 <= SIGNED)||(LA49_0 >= STATE_F && LA49_0 <= STATIC)||LA49_0==STRUCT||LA49_0==SYSTEM||(LA49_0 >= THREADLOCAL && LA49_0 <= TYPEOF)||(LA49_0 >= UNION && LA49_0 <= VOLATILE)) ) {
				alt49=1;
			}
			else if ( (LA49_0==STATICASSERT) ) {
				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:689:4: d= declarationSpecifiers (i= initDeclaratorList contract SEMI -> ^( DECLARATION $d $i contract ) | SEMI -> ^( DECLARATION $d ABSENT ABSENT ) )
					{
					pushFollow(FOLLOW_declarationSpecifiers_in_declaration5024);
					d=declarationSpecifiers();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declarationSpecifiers.add(d.getTree());
					// CivlCParser.g:690:4: (i= initDeclaratorList contract SEMI -> ^( DECLARATION $d $i contract ) | SEMI -> ^( DECLARATION $d ABSENT ABSENT ) )
					int alt48=2;
					int LA48_0 = input.LA(1);
					if ( (LA48_0==IDENTIFIER||LA48_0==LPAREN||LA48_0==STAR) ) {
						alt48=1;
					}
					else if ( (LA48_0==SEMI) ) {
						alt48=2;
					}

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

					switch (alt48) {
						case 1 :
							// CivlCParser.g:691:6: i= initDeclaratorList contract SEMI
							{
							pushFollow(FOLLOW_initDeclaratorList_in_declaration5038);
							i=initDeclaratorList();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_initDeclaratorList.add(i.getTree());
							pushFollow(FOLLOW_contract_in_declaration5040);
							contract172=contract();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_contract.add(contract172.getTree());
							SEMI173=(Token)match(input,SEMI,FOLLOW_SEMI_in_declaration5042); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_SEMI.add(SEMI173);

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

							root_0 = (Object)adaptor.nil();
							// 692:6: -> ^( DECLARATION $d $i contract )
							{
								// CivlCParser.g:692: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:693:6: SEMI
							{
							SEMI174=(Token)match(input,SEMI,FOLLOW_SEMI_in_declaration5068); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_SEMI.add(SEMI174);

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


					pushFollow(FOLLOW_staticAssertDeclaration_in_declaration5096);
					staticAssertDeclaration175=staticAssertDeclaration();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, staticAssertDeclaration175.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:706: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 declarationSpecifierList176 =null;

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

		try {
			// CivlCParser.g:707:2: ( declarationSpecifierList -> ^( DECLARATION_SPECIFIERS declarationSpecifierList ) )
			// CivlCParser.g:707:4: declarationSpecifierList
			{
			pushFollow(FOLLOW_declarationSpecifierList_in_declarationSpecifiers5110);
			declarationSpecifierList176=declarationSpecifierList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_declarationSpecifierList.add(declarationSpecifierList176.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();
			// 708:4: -> ^( DECLARATION_SPECIFIERS declarationSpecifierList )
			{
				// CivlCParser.g:708: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:713: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 declarationSpecifier177 =null;
		ParserRuleReturnScope declarationSpecifier178 =null;


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


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

			// CivlCParser.g:715:7: ({...}? declarationSpecifier )*
			loop50:
			while (true) {
				int alt50=2;
				int LA50_0 = input.LA(1);
				if ( (LA50_0==IDENTIFIER) ) {
					int LA50_1 = input.LA(2);
					if ( (((isTypeName(input.LT(1).getText()))&&( !indicatesDeclarator() ))) ) {
						alt50=1;
					}

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

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

					}
					break;

				default :
					break loop50;
				}
			}

			}

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

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


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


	// $ANTLR start "declarationSpecifier"
	// CivlCParser.g:718: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 storageClassSpecifier179 =null;
		ParserRuleReturnScope typeSpecifierOrQualifier180 =null;
		ParserRuleReturnScope functionSpecifier181 =null;
		ParserRuleReturnScope alignmentSpecifier182 =null;


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


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

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


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

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


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

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


					pushFollow(FOLLOW_alignmentSpecifier_in_declarationSpecifier5176);
					alignmentSpecifier182=alignmentSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, alignmentSpecifier182.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:733: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 typeSpecifier183 =null;
		ParserRuleReturnScope typeQualifier184 =null;


		try {
			// CivlCParser.g:734:2: ( ( typeSpecifier )=> typeSpecifier | typeQualifier )
			int alt52=2;
			int LA52_0 = input.LA(1);
			if ( (LA52_0==VOID) && (synpred26_CivlCParser())) {
				alt52=1;
			}
			else if ( (LA52_0==CHAR) && (synpred26_CivlCParser())) {
				alt52=1;
			}
			else if ( (LA52_0==SHORT) && (synpred26_CivlCParser())) {
				alt52=1;
			}
			else if ( (LA52_0==INT) && (synpred26_CivlCParser())) {
				alt52=1;
			}
			else if ( (LA52_0==LONG) && (synpred26_CivlCParser())) {
				alt52=1;
			}
			else if ( (LA52_0==FLOAT) && (synpred26_CivlCParser())) {
				alt52=1;
			}
			else if ( (LA52_0==DOUBLE) && (synpred26_CivlCParser())) {
				alt52=1;
			}
			else if ( (LA52_0==SIGNED) && (synpred26_CivlCParser())) {
				alt52=1;
			}
			else if ( (LA52_0==UNSIGNED) && (synpred26_CivlCParser())) {
				alt52=1;
			}
			else if ( (LA52_0==BOOL) && (synpred26_CivlCParser())) {
				alt52=1;
			}
			else if ( (LA52_0==COMPLEX) && (synpred26_CivlCParser())) {
				alt52=1;
			}
			else if ( (LA52_0==REAL) && (synpred26_CivlCParser())) {
				alt52=1;
			}
			else if ( (LA52_0==RANGE) && (synpred26_CivlCParser())) {
				alt52=1;
			}
			else if ( (LA52_0==ATOMIC) ) {
				int LA52_14 = input.LA(2);
				if ( (synpred26_CivlCParser()) ) {
					alt52=1;
				}
				else if ( (true) ) {
					alt52=2;
				}

			}
			else if ( (LA52_0==STRUCT||LA52_0==UNION) && (synpred26_CivlCParser())) {
				alt52=1;
			}
			else if ( (LA52_0==ENUM) && (synpred26_CivlCParser())) {
				alt52=1;
			}
			else if ( (LA52_0==IDENTIFIER) && (synpred26_CivlCParser())) {
				alt52=1;
			}
			else if ( (LA52_0==DOMAIN) && (synpred26_CivlCParser())) {
				alt52=1;
			}
			else if ( (LA52_0==TYPEOF) && (synpred26_CivlCParser())) {
				alt52=1;
			}
			else if ( (LA52_0==MEM_TYPE) && (synpred26_CivlCParser())) {
				alt52=1;
			}
			else if ( (LA52_0==CONST||LA52_0==INPUT||LA52_0==OUTPUT||LA52_0==RESTRICT||LA52_0==VOLATILE) ) {
				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:734:4: ( typeSpecifier )=> typeSpecifier
					{
					root_0 = (Object)adaptor.nil();


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

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


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

		try {
			// CivlCParser.g:743:2: (i+= initDeclarator ( COMMA i+= initDeclarator )* -> ^( INIT_DECLARATOR_LIST ( $i)+ ) )
			// CivlCParser.g:743:4: i+= initDeclarator ( COMMA i+= initDeclarator )*
			{
			pushFollow(FOLLOW_initDeclarator_in_initDeclaratorList5219);
			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:743:22: ( COMMA i+= initDeclarator )*
			loop53:
			while (true) {
				int alt53=2;
				int LA53_0 = input.LA(1);
				if ( (LA53_0==COMMA) ) {
					alt53=1;
				}

				switch (alt53) {
				case 1 :
					// CivlCParser.g:743:23: COMMA i+= initDeclarator
					{
					COMMA185=(Token)match(input,COMMA,FOLLOW_COMMA_in_initDeclaratorList5222); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA185);

					pushFollow(FOLLOW_initDeclarator_in_initDeclaratorList5226);
					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 loop53;
				}
			}

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

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

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

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

					root_0 = (Object)adaptor.nil();
					// 755:29: -> ^( INIT_DECLARATOR $d $i)
					{
						// CivlCParser.g:755: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:760: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 TYPEDEF187=null;
		Token set188=null;

		Object TYPEDEF187_tree=null;
		Object set188_tree=null;

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

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

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


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

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


					set188=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(set188));
						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:766: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 VOID189=null;
		Token CHAR190=null;
		Token SHORT191=null;
		Token INT192=null;
		Token LONG193=null;
		Token FLOAT194=null;
		Token DOUBLE195=null;
		Token SIGNED196=null;
		Token UNSIGNED197=null;
		Token BOOL198=null;
		Token COMPLEX199=null;
		Token REAL200=null;
		Token RANGE201=null;
		ParserRuleReturnScope atomicTypeSpecifier202 =null;
		ParserRuleReturnScope structOrUnionSpecifier203 =null;
		ParserRuleReturnScope enumSpecifier204 =null;
		ParserRuleReturnScope typedefName205 =null;
		ParserRuleReturnScope domainSpecifier206 =null;
		ParserRuleReturnScope typeofSpecifier207 =null;
		ParserRuleReturnScope memSpecifier208 =null;

		Object VOID189_tree=null;
		Object CHAR190_tree=null;
		Object SHORT191_tree=null;
		Object INT192_tree=null;
		Object LONG193_tree=null;
		Object FLOAT194_tree=null;
		Object DOUBLE195_tree=null;
		Object SIGNED196_tree=null;
		Object UNSIGNED197_tree=null;
		Object BOOL198_tree=null;
		Object COMPLEX199_tree=null;
		Object REAL200_tree=null;
		Object RANGE201_tree=null;

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


					pushFollow(FOLLOW_memSpecifier_in_typeSpecifier5448);
					memSpecifier208=memSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, memSpecifier208.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:791: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 TYPEOF209=null;
		Token LPAREN210=null;
		Token RPAREN212=null;
		Token RPAREN214=null;
		ParserRuleReturnScope commaExpression211 =null;
		ParserRuleReturnScope typeName213 =null;

		Object TYPEOF209_tree=null;
		Object LPAREN210_tree=null;
		Object RPAREN212_tree=null;
		Object RPAREN214_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:792:5: ( TYPEOF LPAREN ( commaExpression RPAREN -> ^( TYPEOF_EXPRESSION LPAREN commaExpression RPAREN ) | typeName RPAREN -> ^( TYPEOF_TYPE LPAREN typeName RPAREN ) ) )
			// CivlCParser.g:792:7: TYPEOF LPAREN ( commaExpression RPAREN -> ^( TYPEOF_EXPRESSION LPAREN commaExpression RPAREN ) | typeName RPAREN -> ^( TYPEOF_TYPE LPAREN typeName RPAREN ) )
			{
			TYPEOF209=(Token)match(input,TYPEOF,FOLLOW_TYPEOF_in_typeofSpecifier5464); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_TYPEOF.add(TYPEOF209);

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

			// CivlCParser.g:793:9: ( commaExpression RPAREN -> ^( TYPEOF_EXPRESSION LPAREN commaExpression RPAREN ) | typeName RPAREN -> ^( TYPEOF_TYPE LPAREN typeName RPAREN ) )
			int alt57=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 GENERIC:
			case HERE:
			case PROCNULL:
			case RESULT:
			case SCOPEOF:
			case SELF:
			case SIZEOF:
			case SPAWN:
			case SUM:
				{
				alt57=1;
				}
				break;
			case IDENTIFIER:
				{
				int LA57_2 = input.LA(2);
				if ( (!(((isTypeName(input.LT(1).getText()))))) ) {
					alt57=1;
				}
				else if ( ((isTypeName(input.LT(1).getText()))) ) {
					alt57=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return retval;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 57, 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:
				{
				alt57=2;
				}
				break;
			default:
				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:11: commaExpression RPAREN
					{
					pushFollow(FOLLOW_commaExpression_in_typeofSpecifier5478);
					commaExpression211=commaExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_commaExpression.add(commaExpression211.getTree());
					RPAREN212=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_typeofSpecifier5480); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN212);

					// AST REWRITE
					// elements: RPAREN, commaExpression, 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();
					// 794:11: -> ^( TYPEOF_EXPRESSION LPAREN commaExpression RPAREN )
					{
						// CivlCParser.g:794: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:795:11: typeName RPAREN
					{
					pushFollow(FOLLOW_typeName_in_typeofSpecifier5514);
					typeName213=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName.add(typeName213.getTree());
					RPAREN214=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_typeofSpecifier5516); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN214);

					// AST REWRITE
					// elements: typeName, 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();
					// 796:11: -> ^( TYPEOF_TYPE LPAREN typeName RPAREN )
					{
						// CivlCParser.g:796: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:805: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 IDENTIFIER216=null;
		Token LCURLY217=null;
		Token RCURLY219=null;
		Token LCURLY220=null;
		Token RCURLY222=null;
		Token IDENTIFIER223=null;
		ParserRuleReturnScope structOrUnion215 =null;
		ParserRuleReturnScope structDeclarationList218 =null;
		ParserRuleReturnScope structDeclarationList221 =null;

		Object IDENTIFIER216_tree=null;
		Object LCURLY217_tree=null;
		Object RCURLY219_tree=null;
		Object LCURLY220_tree=null;
		Object RCURLY222_tree=null;
		Object IDENTIFIER223_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:806:2: ( structOrUnion ( IDENTIFIER LCURLY structDeclarationList RCURLY -> ^( structOrUnion IDENTIFIER structDeclarationList RCURLY ) | LCURLY structDeclarationList RCURLY -> ^( structOrUnion ABSENT structDeclarationList RCURLY ) | IDENTIFIER -> ^( structOrUnion IDENTIFIER ABSENT ) ) )
			// CivlCParser.g:806: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_structOrUnionSpecifier5564);
			structOrUnion215=structOrUnion();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_structOrUnion.add(structOrUnion215.getTree());
			// CivlCParser.g:807:6: ( IDENTIFIER LCURLY structDeclarationList RCURLY -> ^( structOrUnion IDENTIFIER structDeclarationList RCURLY ) | LCURLY structDeclarationList RCURLY -> ^( structOrUnion ABSENT structDeclarationList RCURLY ) | IDENTIFIER -> ^( structOrUnion IDENTIFIER ABSENT ) )
			int alt58=3;
			int LA58_0 = input.LA(1);
			if ( (LA58_0==IDENTIFIER) ) {
				int LA58_1 = input.LA(2);
				if ( (LA58_1==LCURLY) ) {
					alt58=1;
				}
				else if ( (LA58_1==EOF||(LA58_1 >= COLON && LA58_1 <= COMMA)||LA58_1==IDENTIFIER||LA58_1==LPAREN||LA58_1==LSQUARE||LA58_1==RPAREN||LA58_1==SEMI||LA58_1==STAR||(LA58_1 >= ABSTRACT && LA58_1 <= ALIGNAS)||(LA58_1 >= ATOMIC && LA58_1 <= AUTO)||LA58_1==BOOL||LA58_1==CHAR||(LA58_1 >= COMPLEX && LA58_1 <= CONST)||LA58_1==DEVICE||(LA58_1 >= DOMAIN && LA58_1 <= DOUBLE)||LA58_1==ENUM||(LA58_1 >= EXTERN && LA58_1 <= FATOMIC)||LA58_1==FLOAT||LA58_1==GLOBAL||(LA58_1 >= INLINE && LA58_1 <= INT)||(LA58_1 >= LONG && LA58_1 <= NORETURN)||LA58_1==OUTPUT||(LA58_1 >= PURE && LA58_1 <= RANGE)||(LA58_1 >= REAL && LA58_1 <= REGISTER)||LA58_1==RESTRICT||(LA58_1 >= SHARED && LA58_1 <= SIGNED)||(LA58_1 >= STATE_F && LA58_1 <= STATIC)||LA58_1==STRUCT||LA58_1==SYSTEM||(LA58_1 >= THREADLOCAL && LA58_1 <= TYPEOF)||(LA58_1 >= UNION && LA58_1 <= VOLATILE)) ) {
					alt58=3;
				}

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

			}
			else if ( (LA58_0==LCURLY) ) {
				alt58=2;
			}

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

			switch (alt58) {
				case 1 :
					// CivlCParser.g:807:8: IDENTIFIER LCURLY structDeclarationList RCURLY
					{
					IDENTIFIER216=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_structOrUnionSpecifier5573); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER216);

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

					pushFollow(FOLLOW_structDeclarationList_in_structOrUnionSpecifier5577);
					structDeclarationList218=structDeclarationList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_structDeclarationList.add(structDeclarationList218.getTree());
					RCURLY219=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_structOrUnionSpecifier5579); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY219);

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

					pushFollow(FOLLOW_structDeclarationList_in_structOrUnionSpecifier5609);
					structDeclarationList221=structDeclarationList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_structDeclarationList.add(structDeclarationList221.getTree());
					RCURLY222=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_structOrUnionSpecifier5611); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY222);

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

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

					root_0 = (Object)adaptor.nil();
					// 812:8: -> ^( structOrUnion IDENTIFIER ABSENT )
					{
						// CivlCParser.g:812: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:817: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 set224=null;

		Object set224_tree=null;

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


			set224=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(set224));
				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:825: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 structDeclaration225 =null;

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

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

				switch (alt59) {
				case 1 :
					// CivlCParser.g:826:4: structDeclaration
					{
					pushFollow(FOLLOW_structDeclaration_in_structDeclarationList5693);
					structDeclaration225=structDeclaration();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_structDeclaration.add(structDeclaration225.getTree());
					}
					break;

				default :
					break loop59;
				}
			}

			// 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();
			// 827:4: -> ^( STRUCT_DECLARATION_LIST ( structDeclaration )* )
			{
				// CivlCParser.g:827: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:827: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:841: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 SEMI227=null;
		ParserRuleReturnScope s =null;
		ParserRuleReturnScope structDeclaratorList226 =null;
		ParserRuleReturnScope staticAssertDeclaration228 =null;

		Object SEMI227_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:847:5: (s= specifierQualifierList ( -> ^( STRUCT_DECLARATION $s ABSENT ) | structDeclaratorList -> ^( STRUCT_DECLARATION $s structDeclaratorList ) ) SEMI | staticAssertDeclaration )
			int alt61=2;
			int LA61_0 = input.LA(1);
			if ( (LA61_0==IDENTIFIER||LA61_0==ATOMIC||LA61_0==BOOL||LA61_0==CHAR||(LA61_0 >= COMPLEX && LA61_0 <= CONST)||(LA61_0 >= DOMAIN && LA61_0 <= DOUBLE)||LA61_0==ENUM||LA61_0==FLOAT||(LA61_0 >= INPUT && LA61_0 <= INT)||(LA61_0 >= LONG && LA61_0 <= MEM_TYPE)||LA61_0==OUTPUT||LA61_0==RANGE||LA61_0==REAL||LA61_0==RESTRICT||(LA61_0 >= SHORT && LA61_0 <= SIGNED)||LA61_0==STRUCT||LA61_0==TYPEOF||(LA61_0 >= UNION && LA61_0 <= VOLATILE)) ) {
				alt61=1;
			}
			else if ( (LA61_0==STATICASSERT) ) {
				alt61=2;
			}

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

			switch (alt61) {
				case 1 :
					// CivlCParser.g:847:7: s= specifierQualifierList ( -> ^( STRUCT_DECLARATION $s ABSENT ) | structDeclaratorList -> ^( STRUCT_DECLARATION $s structDeclaratorList ) ) SEMI
					{
					pushFollow(FOLLOW_specifierQualifierList_in_structDeclaration5734);
					s=specifierQualifierList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_specifierQualifierList.add(s.getTree());
					// CivlCParser.g:848:7: ( -> ^( STRUCT_DECLARATION $s ABSENT ) | structDeclaratorList -> ^( STRUCT_DECLARATION $s structDeclaratorList ) )
					int alt60=2;
					int LA60_0 = input.LA(1);
					if ( (LA60_0==SEMI) ) {
						alt60=1;
					}
					else if ( (LA60_0==COLON||LA60_0==IDENTIFIER||LA60_0==LPAREN||LA60_0==STAR) ) {
						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:848: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();
							// 848:9: -> ^( STRUCT_DECLARATION $s ABSENT )
							{
								// CivlCParser.g:848: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:849:9: structDeclaratorList
							{
							pushFollow(FOLLOW_structDeclaratorList_in_structDeclaration5763);
							structDeclaratorList226=structDeclaratorList();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_structDeclaratorList.add(structDeclaratorList226.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();
							// 850:9: -> ^( STRUCT_DECLARATION $s structDeclaratorList )
							{
								// CivlCParser.g:850: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;

					}

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

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


					pushFollow(FOLLOW_staticAssertDeclaration_in_structDeclaration5806);
					staticAssertDeclaration228=staticAssertDeclaration();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, staticAssertDeclaration228.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:860: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 typeSpecifierOrQualifier229 =null;

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

		try {
			// CivlCParser.g:861:5: ( ( typeSpecifierOrQualifier )+ -> ^( SPECIFIER_QUALIFIER_LIST ( typeSpecifierOrQualifier )+ ) )
			// CivlCParser.g:861:7: ( typeSpecifierOrQualifier )+
			{
			// CivlCParser.g:861:7: ( typeSpecifierOrQualifier )+
			int cnt62=0;
			loop62:
			while (true) {
				int alt62=2;
				int LA62_0 = input.LA(1);
				if ( (LA62_0==IDENTIFIER) ) {
					int LA62_2 = input.LA(2);
					if ( ((isTypeName(input.LT(1).getText()))) ) {
						alt62=1;
					}

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

				switch (alt62) {
				case 1 :
					// CivlCParser.g:861:7: typeSpecifierOrQualifier
					{
					pushFollow(FOLLOW_typeSpecifierOrQualifier_in_specifierQualifierList5825);
					typeSpecifierOrQualifier229=typeSpecifierOrQualifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeSpecifierOrQualifier.add(typeSpecifierOrQualifier229.getTree());
					}
					break;

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

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

		try {
			// CivlCParser.g:870:5: (s+= structDeclarator ( COMMA s+= structDeclarator )* -> ^( STRUCT_DECLARATOR_LIST ( $s)+ ) )
			// CivlCParser.g:870:7: s+= structDeclarator ( COMMA s+= structDeclarator )*
			{
			pushFollow(FOLLOW_structDeclarator_in_structDeclaratorList5862);
			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:870:27: ( COMMA s+= structDeclarator )*
			loop63:
			while (true) {
				int alt63=2;
				int LA63_0 = input.LA(1);
				if ( (LA63_0==COMMA) ) {
					alt63=1;
				}

				switch (alt63) {
				case 1 :
					// CivlCParser.g:870:28: COMMA s+= structDeclarator
					{
					COMMA230=(Token)match(input,COMMA,FOLLOW_COMMA_in_structDeclaratorList5865); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA230);

					pushFollow(FOLLOW_structDeclarator_in_structDeclaratorList5869);
					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 loop63;
				}
			}

			// 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();
			// 871:7: -> ^( STRUCT_DECLARATOR_LIST ( $s)+ )
			{
				// CivlCParser.g:871: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:879: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 COLON232=null;
		Token COLON234=null;
		ParserRuleReturnScope declarator231 =null;
		ParserRuleReturnScope constantExpression233 =null;
		ParserRuleReturnScope constantExpression235 =null;

		Object COLON232_tree=null;
		Object COLON234_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:880:5: ( declarator ( -> ^( STRUCT_DECLARATOR declarator ABSENT ) | COLON constantExpression -> ^( STRUCT_DECLARATOR declarator constantExpression ) ) | COLON constantExpression -> ^( STRUCT_DECLARATOR ABSENT constantExpression ) )
			int alt65=2;
			int LA65_0 = input.LA(1);
			if ( (LA65_0==IDENTIFIER||LA65_0==LPAREN||LA65_0==STAR) ) {
				alt65=1;
			}
			else if ( (LA65_0==COLON) ) {
				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:880:7: declarator ( -> ^( STRUCT_DECLARATOR declarator ABSENT ) | COLON constantExpression -> ^( STRUCT_DECLARATOR declarator constantExpression ) )
					{
					pushFollow(FOLLOW_declarator_in_structDeclarator5906);
					declarator231=declarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declarator.add(declarator231.getTree());
					// CivlCParser.g:881:7: ( -> ^( STRUCT_DECLARATOR declarator ABSENT ) | COLON constantExpression -> ^( STRUCT_DECLARATOR declarator constantExpression ) )
					int alt64=2;
					int LA64_0 = input.LA(1);
					if ( (LA64_0==COMMA||LA64_0==SEMI) ) {
						alt64=1;
					}
					else if ( (LA64_0==COLON) ) {
						alt64=2;
					}

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

					switch (alt64) {
						case 1 :
							// CivlCParser.g:881: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();
							// 881:10: -> ^( STRUCT_DECLARATOR declarator ABSENT )
							{
								// CivlCParser.g:881: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:882:9: COLON constantExpression
							{
							COLON232=(Token)match(input,COLON,FOLLOW_COLON_in_structDeclarator5935); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_COLON.add(COLON232);

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

							root_0 = (Object)adaptor.nil();
							// 883:10: -> ^( STRUCT_DECLARATOR declarator constantExpression )
							{
								// CivlCParser.g:883: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:885:7: COLON constantExpression
					{
					COLON234=(Token)match(input,COLON,FOLLOW_COLON_in_structDeclarator5972); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COLON.add(COLON234);

					pushFollow(FOLLOW_constantExpression_in_structDeclarator5974);
					constantExpression235=constantExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_constantExpression.add(constantExpression235.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();
					// 886:7: -> ^( STRUCT_DECLARATOR ABSENT constantExpression )
					{
						// CivlCParser.g:886: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:894: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 ENUM236=null;
		Token IDENTIFIER237=null;
		Token IDENTIFIER238=null;
		Token LCURLY239=null;
		Token COMMA241=null;
		Token RCURLY242=null;
		Token LCURLY243=null;
		Token COMMA245=null;
		Token RCURLY246=null;
		ParserRuleReturnScope enumeratorList240 =null;
		ParserRuleReturnScope enumeratorList244 =null;

		Object ENUM236_tree=null;
		Object IDENTIFIER237_tree=null;
		Object IDENTIFIER238_tree=null;
		Object LCURLY239_tree=null;
		Object COMMA241_tree=null;
		Object RCURLY242_tree=null;
		Object LCURLY243_tree=null;
		Object COMMA245_tree=null;
		Object RCURLY246_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:895:5: ( ENUM ( IDENTIFIER -> ^( ENUM IDENTIFIER ABSENT ) | IDENTIFIER LCURLY enumeratorList ( COMMA )? RCURLY -> ^( ENUM IDENTIFIER enumeratorList ) | LCURLY enumeratorList ( COMMA )? RCURLY -> ^( ENUM ABSENT enumeratorList ) ) )
			// CivlCParser.g:895:7: ENUM ( IDENTIFIER -> ^( ENUM IDENTIFIER ABSENT ) | IDENTIFIER LCURLY enumeratorList ( COMMA )? RCURLY -> ^( ENUM IDENTIFIER enumeratorList ) | LCURLY enumeratorList ( COMMA )? RCURLY -> ^( ENUM ABSENT enumeratorList ) )
			{
			ENUM236=(Token)match(input,ENUM,FOLLOW_ENUM_in_enumSpecifier6009); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ENUM.add(ENUM236);

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

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

			}
			else if ( (LA68_0==LCURLY) ) {
				alt68=3;
			}

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

			switch (alt68) {
				case 1 :
					// CivlCParser.g:896:11: IDENTIFIER
					{
					IDENTIFIER237=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_enumSpecifier6021); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER237);

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

					root_0 = (Object)adaptor.nil();
					// 897:11: -> ^( ENUM IDENTIFIER ABSENT )
					{
						// CivlCParser.g:897: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:898:11: IDENTIFIER LCURLY enumeratorList ( COMMA )? RCURLY
					{
					IDENTIFIER238=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_enumSpecifier6053); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER238);

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

					pushFollow(FOLLOW_enumeratorList_in_enumSpecifier6057);
					enumeratorList240=enumeratorList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_enumeratorList.add(enumeratorList240.getTree());
					// CivlCParser.g:898:44: ( COMMA )?
					int alt66=2;
					int LA66_0 = input.LA(1);
					if ( (LA66_0==COMMA) ) {
						alt66=1;
					}
					switch (alt66) {
						case 1 :
							// CivlCParser.g:898:44: COMMA
							{
							COMMA241=(Token)match(input,COMMA,FOLLOW_COMMA_in_enumSpecifier6059); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_COMMA.add(COMMA241);

							}
							break;

					}

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

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

					root_0 = (Object)adaptor.nil();
					// 899:11: -> ^( ENUM IDENTIFIER enumeratorList )
					{
						// CivlCParser.g:899: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:900:11: LCURLY enumeratorList ( COMMA )? RCURLY
					{
					LCURLY243=(Token)match(input,LCURLY,FOLLOW_LCURLY_in_enumSpecifier6094); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LCURLY.add(LCURLY243);

					pushFollow(FOLLOW_enumeratorList_in_enumSpecifier6096);
					enumeratorList244=enumeratorList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_enumeratorList.add(enumeratorList244.getTree());
					// CivlCParser.g:900:33: ( COMMA )?
					int alt67=2;
					int LA67_0 = input.LA(1);
					if ( (LA67_0==COMMA) ) {
						alt67=1;
					}
					switch (alt67) {
						case 1 :
							// CivlCParser.g:900:33: COMMA
							{
							COMMA245=(Token)match(input,COMMA,FOLLOW_COMMA_in_enumSpecifier6098); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_COMMA.add(COMMA245);

							}
							break;

					}

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

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

					root_0 = (Object)adaptor.nil();
					// 901:11: -> ^( ENUM ABSENT enumeratorList )
					{
						// CivlCParser.g:901: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:909: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 COMMA248=null;
		ParserRuleReturnScope enumerator247 =null;
		ParserRuleReturnScope enumerator249 =null;

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

		try {
			// CivlCParser.g:910:5: ( enumerator ( COMMA enumerator )* -> ^( ENUMERATOR_LIST ( enumerator )+ ) )
			// CivlCParser.g:910:7: enumerator ( COMMA enumerator )*
			{
			pushFollow(FOLLOW_enumerator_in_enumeratorList6150);
			enumerator247=enumerator();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_enumerator.add(enumerator247.getTree());
			// CivlCParser.g:910:18: ( COMMA enumerator )*
			loop69:
			while (true) {
				int alt69=2;
				int LA69_0 = input.LA(1);
				if ( (LA69_0==COMMA) ) {
					int LA69_1 = input.LA(2);
					if ( (LA69_1==IDENTIFIER) ) {
						alt69=1;
					}

				}

				switch (alt69) {
				case 1 :
					// CivlCParser.g:910:19: COMMA enumerator
					{
					COMMA248=(Token)match(input,COMMA,FOLLOW_COMMA_in_enumeratorList6153); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA248);

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

				default :
					break loop69;
				}
			}

			// 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();
			// 911:7: -> ^( ENUMERATOR_LIST ( enumerator )+ )
			{
				// CivlCParser.g:911: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:919: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 IDENTIFIER250=null;
		Token ASSIGN251=null;
		ParserRuleReturnScope constantExpression252 =null;

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

			if ( state.backtracking==0 ) {
			    		Symbols_stack.peek().enumerationConstants.add((IDENTIFIER250!=null?IDENTIFIER250.getText():null));
			    	  }
			// CivlCParser.g:924:8: ( -> ^( ENUMERATOR IDENTIFIER ABSENT ) | ( ASSIGN constantExpression ) -> ^( ENUMERATOR IDENTIFIER constantExpression ) )
			int alt70=2;
			int LA70_0 = input.LA(1);
			if ( (LA70_0==COMMA||LA70_0==RCURLY) ) {
				alt70=1;
			}
			else if ( (LA70_0==ASSIGN) ) {
				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:924: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();
					// 924:11: -> ^( ENUMERATOR IDENTIFIER ABSENT )
					{
						// CivlCParser.g:924: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:925:10: ( ASSIGN constantExpression )
					{
					// CivlCParser.g:925:10: ( ASSIGN constantExpression )
					// CivlCParser.g:925:11: ASSIGN constantExpression
					{
					ASSIGN251=(Token)match(input,ASSIGN,FOLLOW_ASSIGN_in_enumerator6229); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ASSIGN.add(ASSIGN251);

					pushFollow(FOLLOW_constantExpression_in_enumerator6231);
					constantExpression252=constantExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_constantExpression.add(constantExpression252.getTree());
					}

					// AST REWRITE
					// elements: constantExpression, 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();
					// 926:11: -> ^( ENUMERATOR IDENTIFIER constantExpression )
					{
						// CivlCParser.g:926: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:931: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 ATOMIC253=null;
		Token LPAREN254=null;
		Token RPAREN256=null;
		ParserRuleReturnScope typeName255 =null;

		Object ATOMIC253_tree=null;
		Object LPAREN254_tree=null;
		Object RPAREN256_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:932:5: ( ATOMIC LPAREN typeName RPAREN -> ^( ATOMIC typeName ) )
			// CivlCParser.g:932:7: ATOMIC LPAREN typeName RPAREN
			{
			ATOMIC253=(Token)match(input,ATOMIC,FOLLOW_ATOMIC_in_atomicTypeSpecifier6277); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ATOMIC.add(ATOMIC253);

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

			pushFollow(FOLLOW_typeName_in_atomicTypeSpecifier6281);
			typeName255=typeName();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_typeName.add(typeName255.getTree());
			RPAREN256=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_atomicTypeSpecifier6283); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN256);

			// 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();
			// 933:7: -> ^( ATOMIC typeName )
			{
				// CivlCParser.g:933: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:937: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 set257=null;

		Object set257_tree=null;

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


			set257=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(set257));
				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:947:1: functionSpecifier : ( INLINE | NORETURN | abstractSpecifier | PURE -> ^( PURE ) | STATE_F -> ^( STATE_F ) | ( ( SYSTEM libraryName )=> SYSTEM libraryName ) -> ^( SYSTEM libraryName ) | SYSTEM -> ^( SYSTEM ABSENT ) | FATOMIC -> ^( FATOMIC ) | DEVICE | GLOBAL );
	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 INLINE258=null;
		Token NORETURN259=null;
		Token PURE261=null;
		Token STATE_F262=null;
		Token SYSTEM263=null;
		Token SYSTEM265=null;
		Token FATOMIC266=null;
		Token DEVICE267=null;
		Token GLOBAL268=null;
		ParserRuleReturnScope abstractSpecifier260 =null;
		ParserRuleReturnScope libraryName264 =null;

		Object INLINE258_tree=null;
		Object NORETURN259_tree=null;
		Object PURE261_tree=null;
		Object STATE_F262_tree=null;
		Object SYSTEM263_tree=null;
		Object SYSTEM265_tree=null;
		Object FATOMIC266_tree=null;
		Object DEVICE267_tree=null;
		Object GLOBAL268_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:948:5: ( INLINE | NORETURN | abstractSpecifier | PURE -> ^( PURE ) | STATE_F -> ^( STATE_F ) | ( ( SYSTEM libraryName )=> SYSTEM libraryName ) -> ^( SYSTEM libraryName ) | SYSTEM -> ^( SYSTEM ABSENT ) | FATOMIC -> ^( FATOMIC ) | DEVICE | GLOBAL )
			int alt71=10;
			alt71 = dfa71.predict(input);
			switch (alt71) {
				case 1 :
					// CivlCParser.g:948:7: INLINE
					{
					root_0 = (Object)adaptor.nil();


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

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


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

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


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

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

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

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

					pushFollow(FOLLOW_libraryName_in_functionSpecifier6414);
					libraryName264=libraryName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_libraryName.add(libraryName264.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();
					// 952:52: -> ^( SYSTEM libraryName )
					{
						// CivlCParser.g:952: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:953:7: SYSTEM
					{
					SYSTEM265=(Token)match(input,SYSTEM,FOLLOW_SYSTEM_in_functionSpecifier6431); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SYSTEM.add(SYSTEM265);

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

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


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

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


					GLOBAL268=(Token)match(input,GLOBAL,FOLLOW_GLOBAL_in_functionSpecifier6470); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					GLOBAL268_tree = (Object)adaptor.create(GLOBAL268);
					adaptor.addChild(root_0, GLOBAL268_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 "functionSpecifier"


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


	// $ANTLR start "abstractSpecifier"
	// CivlCParser.g:959:1: abstractSpecifier : ABSTRACT ( -> ^( ABSTRACT ) | 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 ABSTRACT269=null;
		Token LPAREN270=null;
		Token STRING_LITERAL271=null;
		Token RPAREN272=null;

		Object ABSTRACT269_tree=null;
		Object LPAREN270_tree=null;
		Object STRING_LITERAL271_tree=null;
		Object RPAREN272_tree=null;
		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");

		try {
			// CivlCParser.g:960:5: ( ABSTRACT ( -> ^( ABSTRACT ) | LPAREN STRING_LITERAL RPAREN -> ^( ABSTRACT STRING_LITERAL ) ) )
			// CivlCParser.g:960:7: ABSTRACT ( -> ^( ABSTRACT ) | LPAREN STRING_LITERAL RPAREN -> ^( ABSTRACT STRING_LITERAL ) )
			{
			ABSTRACT269=(Token)match(input,ABSTRACT,FOLLOW_ABSTRACT_in_abstractSpecifier6487); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ABSTRACT.add(ABSTRACT269);

			// CivlCParser.g:960:16: ( -> ^( ABSTRACT ) | LPAREN STRING_LITERAL RPAREN -> ^( ABSTRACT STRING_LITERAL ) )
			int alt72=2;
			int LA72_0 = input.LA(1);
			if ( (LA72_0==COMMA||LA72_0==IDENTIFIER||LA72_0==LSQUARE||LA72_0==RPAREN||LA72_0==SEMI||LA72_0==STAR||(LA72_0 >= ABSTRACT && LA72_0 <= ALIGNAS)||(LA72_0 >= ATOMIC && LA72_0 <= AUTO)||LA72_0==BOOL||LA72_0==CHAR||(LA72_0 >= COMPLEX && LA72_0 <= CONST)||LA72_0==DEVICE||(LA72_0 >= DOMAIN && LA72_0 <= DOUBLE)||LA72_0==ENUM||(LA72_0 >= EXTERN && LA72_0 <= FATOMIC)||LA72_0==FLOAT||LA72_0==GLOBAL||(LA72_0 >= INLINE && LA72_0 <= INT)||(LA72_0 >= LONG && LA72_0 <= NORETURN)||LA72_0==OUTPUT||(LA72_0 >= PURE && LA72_0 <= RANGE)||(LA72_0 >= REAL && LA72_0 <= REGISTER)||LA72_0==RESTRICT||(LA72_0 >= SHARED && LA72_0 <= SIGNED)||(LA72_0 >= STATE_F && LA72_0 <= STATIC)||LA72_0==STRUCT||LA72_0==SYSTEM||(LA72_0 >= THREADLOCAL && LA72_0 <= TYPEOF)||(LA72_0 >= UNION && LA72_0 <= VOLATILE)) ) {
				alt72=1;
			}
			else if ( (LA72_0==LPAREN) ) {
				int LA72_2 = input.LA(2);
				if ( (LA72_2==STRING_LITERAL) ) {
					alt72=2;
				}
				else if ( (LA72_2==IDENTIFIER||LA72_2==LPAREN||LA72_2==LSQUARE||LA72_2==RPAREN||LA72_2==STAR||(LA72_2 >= ABSTRACT && LA72_2 <= ALIGNAS)||(LA72_2 >= ATOMIC && LA72_2 <= AUTO)||LA72_2==BOOL||LA72_2==CHAR||(LA72_2 >= COMPLEX && LA72_2 <= CONST)||LA72_2==DEVICE||(LA72_2 >= DOMAIN && LA72_2 <= DOUBLE)||LA72_2==ENUM||(LA72_2 >= EXTERN && LA72_2 <= FATOMIC)||LA72_2==FLOAT||LA72_2==GLOBAL||(LA72_2 >= INLINE && LA72_2 <= INT)||(LA72_2 >= LONG && LA72_2 <= NORETURN)||LA72_2==OUTPUT||(LA72_2 >= PURE && LA72_2 <= RANGE)||(LA72_2 >= REAL && LA72_2 <= REGISTER)||LA72_2==RESTRICT||(LA72_2 >= SHARED && LA72_2 <= SIGNED)||(LA72_2 >= STATE_F && LA72_2 <= STATIC)||LA72_2==STRUCT||LA72_2==SYSTEM||(LA72_2 >= THREADLOCAL && LA72_2 <= TYPEOF)||(LA72_2 >= UNION && LA72_2 <= VOLATILE)) ) {
					alt72=1;
				}

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

			}

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

			switch (alt72) {
				case 1 :
					// CivlCParser.g:960: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();
					// 960:19: -> ^( ABSTRACT )
					{
						// CivlCParser.g:960: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:961:18: LPAREN STRING_LITERAL RPAREN
					{
					LPAREN270=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_abstractSpecifier6515); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN270);

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

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

					// 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();
					// 962:18: -> ^( ABSTRACT STRING_LITERAL )
					{
						// CivlCParser.g:962: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 libraryName_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "libraryName"
	// CivlCParser.g:966: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 LSQUARE273=null;
		Token RSQUARE274=null;
		Token i1=null;
		List<Object> list_i1=null;

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

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

			// CivlCParser.g:967:30: ( SUB | IDENTIFIER )*
			loop73:
			while (true) {
				int alt73=3;
				int LA73_0 = input.LA(1);
				if ( (LA73_0==SUB) ) {
					alt73=1;
				}
				else if ( (LA73_0==IDENTIFIER) ) {
					alt73=2;
				}

				switch (alt73) {
				case 1 :
					// CivlCParser.g:967:31: SUB
					{
					i1=(Token)match(input,SUB,FOLLOW_SUB_in_libraryName6584); 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:967:37: IDENTIFIER
					{
					i1=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_libraryName6588); 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 loop73;
				}
			}

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

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

			root_0 = (Object)adaptor.nil();
			// 968:4: -> ^( LIB_NAME $i0 ( $i1)* )
			{
				// CivlCParser.g:968: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:968: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:978: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 ALIGNAS275=null;
		Token LPAREN276=null;
		Token RPAREN278=null;
		Token RPAREN280=null;
		ParserRuleReturnScope typeName277 =null;
		ParserRuleReturnScope constantExpression279 =null;

		Object ALIGNAS275_tree=null;
		Object LPAREN276_tree=null;
		Object RPAREN278_tree=null;
		Object RPAREN280_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:979:5: ( ALIGNAS LPAREN ( typeName RPAREN -> ^( ALIGNAS TYPE typeName ) | constantExpression RPAREN -> ^( ALIGNAS EXPR constantExpression ) ) )
			// CivlCParser.g:979:7: ALIGNAS LPAREN ( typeName RPAREN -> ^( ALIGNAS TYPE typeName ) | constantExpression RPAREN -> ^( ALIGNAS EXPR constantExpression ) )
			{
			ALIGNAS275=(Token)match(input,ALIGNAS,FOLLOW_ALIGNAS_in_alignmentSpecifier6625); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ALIGNAS.add(ALIGNAS275);

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

			// CivlCParser.g:980:9: ( typeName RPAREN -> ^( ALIGNAS TYPE typeName ) | constantExpression RPAREN -> ^( ALIGNAS EXPR constantExpression ) )
			int alt74=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:
				{
				alt74=1;
				}
				break;
			case IDENTIFIER:
				{
				int LA74_17 = input.LA(2);
				if ( ((isTypeName(input.LT(1).getText()))) ) {
					alt74=1;
				}
				else if ( (true) ) {
					alt74=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 GENERIC:
			case HERE:
			case PROCNULL:
			case RESULT:
			case SCOPEOF:
			case SELF:
			case SIZEOF:
			case SPAWN:
			case SUM:
				{
				alt74=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 74, 0, input);
				throw nvae;
			}
			switch (alt74) {
				case 1 :
					// CivlCParser.g:980:11: typeName RPAREN
					{
					pushFollow(FOLLOW_typeName_in_alignmentSpecifier6639);
					typeName277=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName.add(typeName277.getTree());
					RPAREN278=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_alignmentSpecifier6641); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN278);

					// 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();
					// 981:11: -> ^( ALIGNAS TYPE typeName )
					{
						// CivlCParser.g:981: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:982:11: constantExpression RPAREN
					{
					pushFollow(FOLLOW_constantExpression_in_alignmentSpecifier6673);
					constantExpression279=constantExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_constantExpression.add(constantExpression279.getTree());
					RPAREN280=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_alignmentSpecifier6675); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN280);

					// AST REWRITE
					// elements: constantExpression, 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();
					// 983:11: -> ^( ALIGNAS EXPR constantExpression )
					{
						// CivlCParser.g:983: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:992: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 pointer281 =null;

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

		try {
			// CivlCParser.g:993:2: (d= directDeclarator -> ^( DECLARATOR ABSENT $d) | pointer d= directDeclarator -> ^( DECLARATOR pointer $d) )
			int alt75=2;
			int LA75_0 = input.LA(1);
			if ( (LA75_0==IDENTIFIER||LA75_0==LPAREN) ) {
				alt75=1;
			}
			else if ( (LA75_0==STAR) ) {
				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:993:4: d= directDeclarator
					{
					pushFollow(FOLLOW_directDeclarator_in_declarator6723);
					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();
					// 994:4: -> ^( DECLARATOR ABSENT $d)
					{
						// CivlCParser.g:994: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:995:4: pointer d= directDeclarator
					{
					pushFollow(FOLLOW_pointer_in_declarator6742);
					pointer281=pointer();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_pointer.add(pointer281.getTree());
					pushFollow(FOLLOW_directDeclarator_in_declarator6746);
					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();
					// 996:4: -> ^( DECLARATOR pointer $d)
					{
						// CivlCParser.g:996: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:1004: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:1005:2: (p= directDeclaratorPrefix ( -> ^( DIRECT_DECLARATOR $p) | (s+= directDeclaratorSuffix )+ -> ^( DIRECT_DECLARATOR $p ( $s)+ ) ) )
			// CivlCParser.g:1005:4: p= directDeclaratorPrefix ( -> ^( DIRECT_DECLARATOR $p) | (s+= directDeclaratorSuffix )+ -> ^( DIRECT_DECLARATOR $p ( $s)+ ) )
			{
			pushFollow(FOLLOW_directDeclaratorPrefix_in_directDeclarator6775);
			p=directDeclaratorPrefix();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_directDeclaratorPrefix.add(p.getTree());
			// CivlCParser.g:1006:4: ( -> ^( DIRECT_DECLARATOR $p) | (s+= directDeclaratorSuffix )+ -> ^( DIRECT_DECLARATOR $p ( $s)+ ) )
			int alt77=2;
			int LA77_0 = input.LA(1);
			if ( (LA77_0==EOF||LA77_0==ASSIGN||(LA77_0 >= COLON && LA77_0 <= COMMA)||LA77_0==IDENTIFIER||LA77_0==LCURLY||LA77_0==RPAREN||LA77_0==SEMI||(LA77_0 >= ABSTRACT && LA77_0 <= ALIGNAS)||(LA77_0 >= ASSIGNS && LA77_0 <= AUTO)||LA77_0==BOOL||LA77_0==CHAR||(LA77_0 >= COMPLEX && LA77_0 <= CONST)||LA77_0==DEPENDS||LA77_0==DEVICE||(LA77_0 >= DOMAIN && LA77_0 <= ENUM)||(LA77_0 >= EXTERN && LA77_0 <= FATOMIC)||LA77_0==FLOAT||LA77_0==GLOBAL||LA77_0==GUARD||(LA77_0 >= INLINE && LA77_0 <= INT)||(LA77_0 >= LONG && LA77_0 <= NORETURN)||LA77_0==OUTPUT||(LA77_0 >= PURE && LA77_0 <= RESTRICT)||(LA77_0 >= SHARED && LA77_0 <= SIGNED)||(LA77_0 >= STATE_F && LA77_0 <= STRUCT)||LA77_0==SYSTEM||(LA77_0 >= THREADLOCAL && LA77_0 <= TYPEOF)||(LA77_0 >= UNION && LA77_0 <= VOLATILE)) ) {
				alt77=1;
			}
			else if ( (LA77_0==LPAREN||LA77_0==LSQUARE) ) {
				alt77=2;
			}

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

			switch (alt77) {
				case 1 :
					// CivlCParser.g:1006: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();
					// 1006:6: -> ^( DIRECT_DECLARATOR $p)
					{
						// CivlCParser.g:1006: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:1007:6: (s+= directDeclaratorSuffix )+
					{
					// CivlCParser.g:1007:7: (s+= directDeclaratorSuffix )+
					int cnt76=0;
					loop76:
					while (true) {
						int alt76=2;
						int LA76_0 = input.LA(1);
						if ( (LA76_0==LPAREN||LA76_0==LSQUARE) ) {
							alt76=1;
						}

						switch (alt76) {
						case 1 :
							// CivlCParser.g:1007:7: s+= directDeclaratorSuffix
							{
							pushFollow(FOLLOW_directDeclaratorSuffix_in_directDeclarator6798);
							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 ( cnt76 >= 1 ) break loop76;
							if (state.backtracking>0) {state.failed=true; return retval;}
							EarlyExitException eee = new EarlyExitException(76, input);
							throw eee;
						}
						cnt76++;
					}

					// 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();
					// 1007:33: -> ^( DIRECT_DECLARATOR $p ( $s)+ )
					{
						// CivlCParser.g:1007: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:1014: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 IDENTIFIER282=null;
		Token LPAREN283=null;
		Token RPAREN285=null;
		ParserRuleReturnScope declarator284 =null;

		Object IDENTIFIER282_tree=null;
		Object LPAREN283_tree=null;
		Object RPAREN285_tree=null;

		try {
			// CivlCParser.g:1015:2: ( IDENTIFIER | LPAREN ! declarator RPAREN !)
			int alt78=2;
			int LA78_0 = input.LA(1);
			if ( (LA78_0==IDENTIFIER) ) {
				alt78=1;
			}
			else if ( (LA78_0==LPAREN) ) {
				alt78=2;
			}

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

			switch (alt78) {
				case 1 :
					// CivlCParser.g:1015:4: IDENTIFIER
					{
					root_0 = (Object)adaptor.nil();


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

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


					LPAREN283=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_directDeclaratorPrefix6839); if (state.failed) return retval;
					pushFollow(FOLLOW_declarator_in_directDeclaratorPrefix6842);
					declarator284=declarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, declarator284.getTree());

					RPAREN285=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_directDeclaratorPrefix6844); 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:1025: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 directDeclaratorArraySuffix286 =null;
		ParserRuleReturnScope directDeclaratorFunctionSuffix287 =null;


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

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

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


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

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


					pushFollow(FOLLOW_directDeclaratorFunctionSuffix_in_directDeclaratorSuffix6862);
					directDeclaratorFunctionSuffix287=directDeclaratorFunctionSuffix();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, directDeclaratorFunctionSuffix287.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:1039: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 LSQUARE288=null;
		Token RSQUARE291=null;
		Token STATIC292=null;
		Token RSQUARE295=null;
		Token STATIC297=null;
		Token RSQUARE299=null;
		Token STAR301=null;
		Token RSQUARE302=null;
		ParserRuleReturnScope typeQualifierList_opt289 =null;
		ParserRuleReturnScope assignmentExpression_opt290 =null;
		ParserRuleReturnScope typeQualifierList_opt293 =null;
		ParserRuleReturnScope assignmentExpression294 =null;
		ParserRuleReturnScope typeQualifierList296 =null;
		ParserRuleReturnScope assignmentExpression298 =null;
		ParserRuleReturnScope typeQualifierList_opt300 =null;

		Object LSQUARE288_tree=null;
		Object RSQUARE291_tree=null;
		Object STATIC292_tree=null;
		Object RSQUARE295_tree=null;
		Object STATIC297_tree=null;
		Object RSQUARE299_tree=null;
		Object STAR301_tree=null;
		Object RSQUARE302_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:1040: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:1040: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 ) )
			{
			LSQUARE288=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_directDeclaratorArraySuffix6875); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE288);

			// CivlCParser.g:1041: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 alt80=4;
			alt80 = dfa80.predict(input);
			switch (alt80) {
				case 1 :
					// CivlCParser.g:1041:6: typeQualifierList_opt assignmentExpression_opt RSQUARE
					{
					pushFollow(FOLLOW_typeQualifierList_opt_in_directDeclaratorArraySuffix6882);
					typeQualifierList_opt289=typeQualifierList_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeQualifierList_opt.add(typeQualifierList_opt289.getTree());
					pushFollow(FOLLOW_assignmentExpression_opt_in_directDeclaratorArraySuffix6884);
					assignmentExpression_opt290=assignmentExpression_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_assignmentExpression_opt.add(assignmentExpression_opt290.getTree());
					RSQUARE291=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_directDeclaratorArraySuffix6886); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE291);

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

					pushFollow(FOLLOW_typeQualifierList_opt_in_directDeclaratorArraySuffix6926);
					typeQualifierList_opt293=typeQualifierList_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeQualifierList_opt.add(typeQualifierList_opt293.getTree());
					pushFollow(FOLLOW_assignmentExpression_in_directDeclaratorArraySuffix6928);
					assignmentExpression294=assignmentExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression294.getTree());
					RSQUARE295=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_directDeclaratorArraySuffix6930); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE295);

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

					pushFollow(FOLLOW_assignmentExpression_in_directDeclaratorArraySuffix6974);
					assignmentExpression298=assignmentExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression298.getTree());
					RSQUARE299=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_directDeclaratorArraySuffix6976); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE299);

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

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

					// AST REWRITE
					// elements: typeQualifierList_opt, RSQUARE, 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();
					// 1051:6: -> ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt STAR RSQUARE )
					{
						// CivlCParser.g:1051: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:1062: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 LPAREN303=null;
		Token RPAREN305=null;
		Token RPAREN307=null;
		Token RPAREN308=null;
		ParserRuleReturnScope parameterTypeList304 =null;
		ParserRuleReturnScope identifierList306 =null;

		Object LPAREN303_tree=null;
		Object RPAREN305_tree=null;
		Object RPAREN307_tree=null;
		Object RPAREN308_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:1068:2: ( LPAREN ( parameterTypeList RPAREN -> ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN ) | identifierList RPAREN -> ^( FUNCTION_SUFFIX LPAREN identifierList RPAREN ) | RPAREN -> ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN ) ) )
			// CivlCParser.g:1068:4: LPAREN ( parameterTypeList RPAREN -> ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN ) | identifierList RPAREN -> ^( FUNCTION_SUFFIX LPAREN identifierList RPAREN ) | RPAREN -> ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN ) )
			{
			LPAREN303=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_directDeclaratorFunctionSuffix7079); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN303);

			// CivlCParser.g:1069:4: ( parameterTypeList RPAREN -> ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN ) | identifierList RPAREN -> ^( FUNCTION_SUFFIX LPAREN identifierList RPAREN ) | RPAREN -> ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN ) )
			int alt81=3;
			alt81 = dfa81.predict(input);
			switch (alt81) {
				case 1 :
					// CivlCParser.g:1069:6: parameterTypeList RPAREN
					{
					pushFollow(FOLLOW_parameterTypeList_in_directDeclaratorFunctionSuffix7086);
					parameterTypeList304=parameterTypeList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_parameterTypeList.add(parameterTypeList304.getTree());
					RPAREN305=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_directDeclaratorFunctionSuffix7088); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN305);

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

					root_0 = (Object)adaptor.nil();
					// 1070:6: -> ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN )
					{
						// CivlCParser.g:1070: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:1071:6: identifierList RPAREN
					{
					pushFollow(FOLLOW_identifierList_in_directDeclaratorFunctionSuffix7113);
					identifierList306=identifierList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_identifierList.add(identifierList306.getTree());
					RPAREN307=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_directDeclaratorFunctionSuffix7115); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN307);

					// AST REWRITE
					// elements: LPAREN, identifierList, 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();
					// 1072:6: -> ^( FUNCTION_SUFFIX LPAREN identifierList RPAREN )
					{
						// CivlCParser.g:1072: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:1073:6: RPAREN
					{
					RPAREN308=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_directDeclaratorFunctionSuffix7139); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN308);

					// 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();
					// 1073:13: -> ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN )
					{
						// CivlCParser.g:1073: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:1081: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 typeQualifier309 =null;

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

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

				switch (alt82) {
				case 1 :
					// CivlCParser.g:1082:4: typeQualifier
					{
					pushFollow(FOLLOW_typeQualifier_in_typeQualifierList_opt7169);
					typeQualifier309=typeQualifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeQualifier.add(typeQualifier309.getTree());
					}
					break;

				default :
					break loop82;
				}
			}

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


		try {
			// CivlCParser.g:1089:2: ( -> ABSENT | assignmentExpression )
			int alt83=2;
			int LA83_0 = input.LA(1);
			if ( (LA83_0==RSQUARE) ) {
				alt83=1;
			}
			else if ( (LA83_0==AMPERSAND||LA83_0==CHARACTER_CONSTANT||LA83_0==ELLIPSIS||LA83_0==FLOATING_CONSTANT||LA83_0==IDENTIFIER||LA83_0==INTEGER_CONSTANT||LA83_0==LPAREN||LA83_0==MINUSMINUS||LA83_0==NOT||LA83_0==PLUS||LA83_0==PLUSPLUS||LA83_0==STAR||(LA83_0 >= STRING_LITERAL && LA83_0 <= SUB)||LA83_0==TILDE||LA83_0==ALIGNOF||LA83_0==BIG_O||LA83_0==CALLS||LA83_0==GENERIC||LA83_0==HERE||LA83_0==PROCNULL||LA83_0==RESULT||(LA83_0 >= SCOPEOF && LA83_0 <= SELF)||(LA83_0 >= SIZEOF && LA83_0 <= SPAWN)||LA83_0==SUM) ) {
				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:1089: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();
					// 1089:5: -> ABSENT
					{
						adaptor.addChild(root_0, (Object)adaptor.create(ABSENT, "ABSENT"));
					}


					retval.tree = root_0;
					}

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


					pushFollow(FOLLOW_assignmentExpression_in_assignmentExpression_opt7200);
					assignmentExpression310=assignmentExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, assignmentExpression310.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:1097: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_part311 =null;

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

		try {
			// CivlCParser.g:1098:5: ( ( pointer_part )+ -> ^( POINTER ( pointer_part )+ ) )
			// CivlCParser.g:1098:7: ( pointer_part )+
			{
			// CivlCParser.g:1098:7: ( pointer_part )+
			int cnt84=0;
			loop84:
			while (true) {
				int alt84=2;
				int LA84_0 = input.LA(1);
				if ( (LA84_0==STAR) ) {
					alt84=1;
				}

				switch (alt84) {
				case 1 :
					// CivlCParser.g:1098:7: pointer_part
					{
					pushFollow(FOLLOW_pointer_part_in_pointer7216);
					pointer_part311=pointer_part();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_pointer_part.add(pointer_part311.getTree());
					}
					break;

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

			// 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();
			// 1098:21: -> ^( POINTER ( pointer_part )+ )
			{
				// CivlCParser.g:1098: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:1105: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 STAR312=null;
		ParserRuleReturnScope typeQualifierList_opt313 =null;

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

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

			pushFollow(FOLLOW_typeQualifierList_opt_in_pointer_part7244);
			typeQualifierList_opt313=typeQualifierList_opt();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_typeQualifierList_opt.add(typeQualifierList_opt313.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();
			// 1106:31: -> ^( STAR typeQualifierList_opt )
			{
				// CivlCParser.g:1106: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:1113: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 typeQualifier314 =null;

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

		try {
			// CivlCParser.g:1114:5: ( ( typeQualifier )+ -> ^( TYPE_QUALIFIER_LIST ( typeQualifier )+ ) )
			// CivlCParser.g:1114:7: ( typeQualifier )+
			{
			// CivlCParser.g:1114:7: ( typeQualifier )+
			int cnt85=0;
			loop85:
			while (true) {
				int alt85=2;
				int LA85_0 = input.LA(1);
				if ( (LA85_0==ATOMIC||LA85_0==CONST||LA85_0==INPUT||LA85_0==OUTPUT||LA85_0==RESTRICT||LA85_0==VOLATILE) ) {
					alt85=1;
				}

				switch (alt85) {
				case 1 :
					// CivlCParser.g:1114:7: typeQualifier
					{
					pushFollow(FOLLOW_typeQualifier_in_typeQualifierList7268);
					typeQualifier314=typeQualifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeQualifier.add(typeQualifier314.getTree());
					}
					break;

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

			// 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();
			// 1114:22: -> ^( TYPE_QUALIFIER_LIST ( typeQualifier )+ )
			{
				// CivlCParser.g:1114: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:1128: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 parameterTypeListWithoutScope315 =null;
		ParserRuleReturnScope parameterTypeListWithScope316 =null;


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

					}
					break;
				case 2 :
					// CivlCParser.g:1130: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_parameterTypeList7304);
					parameterTypeListWithScope316=parameterTypeListWithScope();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, parameterTypeListWithScope316.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:1133: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 parameterTypeListWithoutScope317 =null;



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

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


			pushFollow(FOLLOW_parameterTypeListWithoutScope_in_parameterTypeListWithScope7325);
			parameterTypeListWithoutScope317=parameterTypeListWithoutScope();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) adaptor.addChild(root_0, parameterTypeListWithoutScope317.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:1143: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 COMMA319=null;
		Token ELLIPSIS320=null;
		ParserRuleReturnScope parameterList318 =null;

		Object COMMA319_tree=null;
		Object ELLIPSIS320_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:1144:5: ( parameterList ( -> ^( PARAMETER_TYPE_LIST parameterList ABSENT ) | COMMA ELLIPSIS -> ^( PARAMETER_TYPE_LIST parameterList ELLIPSIS ) ) )
			// CivlCParser.g:1144:7: parameterList ( -> ^( PARAMETER_TYPE_LIST parameterList ABSENT ) | COMMA ELLIPSIS -> ^( PARAMETER_TYPE_LIST parameterList ELLIPSIS ) )
			{
			pushFollow(FOLLOW_parameterList_in_parameterTypeListWithoutScope7339);
			parameterList318=parameterList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_parameterList.add(parameterList318.getTree());
			// CivlCParser.g:1145:7: ( -> ^( PARAMETER_TYPE_LIST parameterList ABSENT ) | COMMA ELLIPSIS -> ^( PARAMETER_TYPE_LIST parameterList ELLIPSIS ) )
			int alt87=2;
			int LA87_0 = input.LA(1);
			if ( (LA87_0==RPAREN) ) {
				alt87=1;
			}
			else if ( (LA87_0==COMMA) ) {
				alt87=2;
			}

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

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

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

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

					root_0 = (Object)adaptor.nil();
					// 1147:9: -> ^( PARAMETER_TYPE_LIST parameterList ELLIPSIS )
					{
						// CivlCParser.g:1147: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:1155: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 COMMA322=null;
		ParserRuleReturnScope parameterDeclaration321 =null;
		ParserRuleReturnScope parameterDeclaration323 =null;

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

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

				}

				switch (alt88) {
				case 1 :
					// CivlCParser.g:1156:29: COMMA parameterDeclaration
					{
					COMMA322=(Token)match(input,COMMA,FOLLOW_COMMA_in_parameterList7417); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA322);

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

				default :
					break loop88;
				}
			}

			// 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();
			// 1157:7: -> ^( PARAMETER_LIST ( parameterDeclaration )+ )
			{
				// CivlCParser.g:1157: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:1165: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 declarationSpecifiers324 =null;
		ParserRuleReturnScope declaratorOrAbstractDeclarator325 =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:1171:5: ( declarationSpecifiers ( -> ^( PARAMETER_DECLARATION declarationSpecifiers ABSENT ) | declaratorOrAbstractDeclarator -> ^( PARAMETER_DECLARATION declarationSpecifiers declaratorOrAbstractDeclarator ) ) )
			// CivlCParser.g:1171:7: declarationSpecifiers ( -> ^( PARAMETER_DECLARATION declarationSpecifiers ABSENT ) | declaratorOrAbstractDeclarator -> ^( PARAMETER_DECLARATION declarationSpecifiers declaratorOrAbstractDeclarator ) )
			{
			pushFollow(FOLLOW_declarationSpecifiers_in_parameterDeclaration7465);
			declarationSpecifiers324=declarationSpecifiers();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_declarationSpecifiers.add(declarationSpecifiers324.getTree());
			// CivlCParser.g:1172:7: ( -> ^( PARAMETER_DECLARATION declarationSpecifiers ABSENT ) | declaratorOrAbstractDeclarator -> ^( PARAMETER_DECLARATION declarationSpecifiers declaratorOrAbstractDeclarator ) )
			int alt89=2;
			int LA89_0 = input.LA(1);
			if ( (LA89_0==COMMA||LA89_0==RPAREN) ) {
				alt89=1;
			}
			else if ( (LA89_0==IDENTIFIER||LA89_0==LPAREN||LA89_0==LSQUARE||LA89_0==STAR) ) {
				alt89=2;
			}

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

			switch (alt89) {
				case 1 :
					// CivlCParser.g:1172: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();
					// 1172:11: -> ^( PARAMETER_DECLARATION declarationSpecifiers ABSENT )
					{
						// CivlCParser.g:1172: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:1173:11: declaratorOrAbstractDeclarator
					{
					pushFollow(FOLLOW_declaratorOrAbstractDeclarator_in_parameterDeclaration7497);
					declaratorOrAbstractDeclarator325=declaratorOrAbstractDeclarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declaratorOrAbstractDeclarator.add(declaratorOrAbstractDeclarator325.getTree());
					// AST REWRITE
					// elements: declaratorOrAbstractDeclarator, declarationSpecifiers
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1174:11: -> ^( PARAMETER_DECLARATION declarationSpecifiers declaratorOrAbstractDeclarator )
					{
						// CivlCParser.g:1174: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:1182: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 declarator326 =null;
		ParserRuleReturnScope abstractDeclarator327 =null;


		try {
			// CivlCParser.g:1183:2: ( ( declarator )=> declarator | abstractDeclarator )
			int alt90=2;
			int LA90_0 = input.LA(1);
			if ( (LA90_0==IDENTIFIER) && (synpred28_CivlCParser())) {
				alt90=1;
			}
			else if ( (LA90_0==LPAREN) ) {
				int LA90_2 = input.LA(2);
				if ( (synpred28_CivlCParser()) ) {
					alt90=1;
				}
				else if ( (true) ) {
					alt90=2;
				}

			}
			else if ( (LA90_0==STAR) ) {
				int LA90_3 = input.LA(2);
				if ( (synpred28_CivlCParser()) ) {
					alt90=1;
				}
				else if ( (true) ) {
					alt90=2;
				}

			}
			else if ( (LA90_0==LSQUARE) ) {
				alt90=2;
			}

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

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


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

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


					pushFollow(FOLLOW_abstractDeclarator_in_declaratorOrAbstractDeclarator7567);
					abstractDeclarator327=abstractDeclarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, abstractDeclarator327.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:1192: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 IDENTIFIER328=null;
		Token COMMA329=null;
		Token IDENTIFIER330=null;

		Object IDENTIFIER328_tree=null;
		Object COMMA329_tree=null;
		Object IDENTIFIER330_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");

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

			// CivlCParser.g:1193:18: ( COMMA IDENTIFIER )*
			loop91:
			while (true) {
				int alt91=2;
				int LA91_0 = input.LA(1);
				if ( (LA91_0==COMMA) ) {
					alt91=1;
				}

				switch (alt91) {
				case 1 :
					// CivlCParser.g:1193:20: COMMA IDENTIFIER
					{
					COMMA329=(Token)match(input,COMMA,FOLLOW_COMMA_in_identifierList7588); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA329);

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

					}
					break;

				default :
					break loop91;
				}
			}

			// 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();
			// 1193:40: -> ^( IDENTIFIER_LIST ( IDENTIFIER )+ )
			{
				// CivlCParser.g:1193: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:1202: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 specifierQualifierList331 =null;
		ParserRuleReturnScope abstractDeclarator332 =null;

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

		try {
			// CivlCParser.g:1203:5: ( specifierQualifierList ( -> ^( TYPE_NAME specifierQualifierList ABSENT ) | abstractDeclarator -> ^( TYPE_NAME specifierQualifierList abstractDeclarator ) ) )
			// CivlCParser.g:1203:7: specifierQualifierList ( -> ^( TYPE_NAME specifierQualifierList ABSENT ) | abstractDeclarator -> ^( TYPE_NAME specifierQualifierList abstractDeclarator ) )
			{
			pushFollow(FOLLOW_specifierQualifierList_in_typeName7621);
			specifierQualifierList331=specifierQualifierList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_specifierQualifierList.add(specifierQualifierList331.getTree());
			// CivlCParser.g:1204:7: ( -> ^( TYPE_NAME specifierQualifierList ABSENT ) | abstractDeclarator -> ^( TYPE_NAME specifierQualifierList abstractDeclarator ) )
			int alt92=2;
			int LA92_0 = input.LA(1);
			if ( (LA92_0==EOF||LA92_0==COLON||LA92_0==IDENTIFIER||LA92_0==RPAREN) ) {
				alt92=1;
			}
			else if ( (LA92_0==LPAREN||LA92_0==LSQUARE||LA92_0==STAR) ) {
				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:1204: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();
					// 1204:9: -> ^( TYPE_NAME specifierQualifierList ABSENT )
					{
						// CivlCParser.g:1204: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:1205:9: abstractDeclarator
					{
					pushFollow(FOLLOW_abstractDeclarator_in_typeName7649);
					abstractDeclarator332=abstractDeclarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_abstractDeclarator.add(abstractDeclarator332.getTree());
					// AST REWRITE
					// elements: abstractDeclarator, specifierQualifierList
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1206:9: -> ^( TYPE_NAME specifierQualifierList abstractDeclarator )
					{
						// CivlCParser.g:1206: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:1218: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 pointer333 =null;
		ParserRuleReturnScope directAbstractDeclarator334 =null;
		ParserRuleReturnScope pointer335 =null;
		ParserRuleReturnScope directAbstractDeclarator336 =null;

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

		try {
			// CivlCParser.g:1219:5: ( pointer -> ^( ABSTRACT_DECLARATOR pointer ABSENT ) | directAbstractDeclarator -> ^( ABSTRACT_DECLARATOR ABSENT directAbstractDeclarator ) | pointer directAbstractDeclarator -> ^( ABSTRACT_DECLARATOR pointer directAbstractDeclarator ) )
			int alt93=3;
			alt93 = dfa93.predict(input);
			switch (alt93) {
				case 1 :
					// CivlCParser.g:1219:7: pointer
					{
					pushFollow(FOLLOW_pointer_in_abstractDeclarator7694);
					pointer333=pointer();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_pointer.add(pointer333.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();
					// 1220:7: -> ^( ABSTRACT_DECLARATOR pointer ABSENT )
					{
						// CivlCParser.g:1220: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:1221:7: directAbstractDeclarator
					{
					pushFollow(FOLLOW_directAbstractDeclarator_in_abstractDeclarator7718);
					directAbstractDeclarator334=directAbstractDeclarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_directAbstractDeclarator.add(directAbstractDeclarator334.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();
					// 1222:7: -> ^( ABSTRACT_DECLARATOR ABSENT directAbstractDeclarator )
					{
						// CivlCParser.g:1222: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:1223:7: pointer directAbstractDeclarator
					{
					pushFollow(FOLLOW_pointer_in_abstractDeclarator7742);
					pointer335=pointer();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_pointer.add(pointer335.getTree());
					pushFollow(FOLLOW_directAbstractDeclarator_in_abstractDeclarator7744);
					directAbstractDeclarator336=directAbstractDeclarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_directAbstractDeclarator.add(directAbstractDeclarator336.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();
					// 1224:7: -> ^( ABSTRACT_DECLARATOR pointer directAbstractDeclarator )
					{
						// CivlCParser.g:1224: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:1237: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 LPAREN337=null;
		Token RPAREN339=null;
		ParserRuleReturnScope abstractDeclarator338 =null;
		ParserRuleReturnScope directAbstractDeclaratorSuffix340 =null;
		ParserRuleReturnScope directAbstractDeclaratorSuffix341 =null;

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

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

			}
			else if ( (LA96_0==LSQUARE) ) {
				alt96=2;
			}

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

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

					pushFollow(FOLLOW_abstractDeclarator_in_directAbstractDeclarator7781);
					abstractDeclarator338=abstractDeclarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_abstractDeclarator.add(abstractDeclarator338.getTree());
					RPAREN339=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_directAbstractDeclarator7783); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN339);

					// CivlCParser.g:1238:40: ( directAbstractDeclaratorSuffix )*
					loop94:
					while (true) {
						int alt94=2;
						int LA94_0 = input.LA(1);
						if ( (LA94_0==LPAREN||LA94_0==LSQUARE) ) {
							alt94=1;
						}

						switch (alt94) {
						case 1 :
							// CivlCParser.g:1238:40: directAbstractDeclaratorSuffix
							{
							pushFollow(FOLLOW_directAbstractDeclaratorSuffix_in_directAbstractDeclarator7785);
							directAbstractDeclaratorSuffix340=directAbstractDeclaratorSuffix();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_directAbstractDeclaratorSuffix.add(directAbstractDeclaratorSuffix340.getTree());
							}
							break;

						default :
							break loop94;
						}
					}

					// AST REWRITE
					// elements: abstractDeclarator, 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();
					// 1239:7: -> ^( DIRECT_ABSTRACT_DECLARATOR abstractDeclarator ( directAbstractDeclaratorSuffix )* )
					{
						// CivlCParser.g:1239: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:1240: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:1241:7: ( directAbstractDeclaratorSuffix )+
					{
					// CivlCParser.g:1241:7: ( directAbstractDeclaratorSuffix )+
					int cnt95=0;
					loop95:
					while (true) {
						int alt95=2;
						int LA95_0 = input.LA(1);
						if ( (LA95_0==LPAREN||LA95_0==LSQUARE) ) {
							alt95=1;
						}

						switch (alt95) {
						case 1 :
							// CivlCParser.g:1241:7: directAbstractDeclaratorSuffix
							{
							pushFollow(FOLLOW_directAbstractDeclaratorSuffix_in_directAbstractDeclarator7822);
							directAbstractDeclaratorSuffix341=directAbstractDeclaratorSuffix();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_directAbstractDeclaratorSuffix.add(directAbstractDeclaratorSuffix341.getTree());
							}
							break;

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

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

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

		try {
			// CivlCParser.g:1269:5: ({...}? IDENTIFIER -> ^( TYPEDEF_NAME IDENTIFIER ) )
			// CivlCParser.g:1269: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())");
			}
			IDENTIFIER342=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_typedefName7862); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER342);

			// 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();
			// 1270:7: -> ^( TYPEDEF_NAME IDENTIFIER )
			{
				// CivlCParser.g:1270: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:1284: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 LSQUARE343=null;
		Token RSQUARE346=null;
		Token STATIC347=null;
		Token RSQUARE350=null;
		Token STATIC352=null;
		Token RSQUARE354=null;
		Token STAR355=null;
		Token RSQUARE356=null;
		Token LPAREN357=null;
		Token RPAREN359=null;
		Token RPAREN360=null;
		ParserRuleReturnScope typeQualifierList_opt344 =null;
		ParserRuleReturnScope assignmentExpression_opt345 =null;
		ParserRuleReturnScope typeQualifierList_opt348 =null;
		ParserRuleReturnScope assignmentExpression349 =null;
		ParserRuleReturnScope typeQualifierList351 =null;
		ParserRuleReturnScope assignmentExpression353 =null;
		ParserRuleReturnScope parameterTypeList358 =null;

		Object LSQUARE343_tree=null;
		Object RSQUARE346_tree=null;
		Object STATIC347_tree=null;
		Object RSQUARE350_tree=null;
		Object STATIC352_tree=null;
		Object RSQUARE354_tree=null;
		Object STAR355_tree=null;
		Object RSQUARE356_tree=null;
		Object LPAREN357_tree=null;
		Object RPAREN359_tree=null;
		Object RPAREN360_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:1285: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 alt99=2;
			int LA99_0 = input.LA(1);
			if ( (LA99_0==LSQUARE) ) {
				alt99=1;
			}
			else if ( (LA99_0==LPAREN) ) {
				alt99=2;
			}

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

			switch (alt99) {
				case 1 :
					// CivlCParser.g:1285: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 ) )
					{
					LSQUARE343=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_directAbstractDeclaratorSuffix7895); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE343);

					// CivlCParser.g:1286: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 alt97=4;
					alt97 = dfa97.predict(input);
					switch (alt97) {
						case 1 :
							// CivlCParser.g:1286:9: typeQualifierList_opt assignmentExpression_opt RSQUARE
							{
							pushFollow(FOLLOW_typeQualifierList_opt_in_directAbstractDeclaratorSuffix7905);
							typeQualifierList_opt344=typeQualifierList_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_typeQualifierList_opt.add(typeQualifierList_opt344.getTree());
							pushFollow(FOLLOW_assignmentExpression_opt_in_directAbstractDeclaratorSuffix7907);
							assignmentExpression_opt345=assignmentExpression_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_assignmentExpression_opt.add(assignmentExpression_opt345.getTree());
							RSQUARE346=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_directAbstractDeclaratorSuffix7909); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE346);

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

							pushFollow(FOLLOW_typeQualifierList_opt_in_directAbstractDeclaratorSuffix7956);
							typeQualifierList_opt348=typeQualifierList_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_typeQualifierList_opt.add(typeQualifierList_opt348.getTree());
							pushFollow(FOLLOW_assignmentExpression_in_directAbstractDeclaratorSuffix7958);
							assignmentExpression349=assignmentExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression349.getTree());
							RSQUARE350=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_directAbstractDeclaratorSuffix7960); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE350);

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

							root_0 = (Object)adaptor.nil();
							// 1290:9: -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList_opt assignmentExpression )
							{
								// CivlCParser.g:1290: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:1292:9: typeQualifierList STATIC assignmentExpression RSQUARE
							{
							pushFollow(FOLLOW_typeQualifierList_in_directAbstractDeclaratorSuffix8005);
							typeQualifierList351=typeQualifierList();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_typeQualifierList.add(typeQualifierList351.getTree());
							STATIC352=(Token)match(input,STATIC,FOLLOW_STATIC_in_directAbstractDeclaratorSuffix8007); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_STATIC.add(STATIC352);

							pushFollow(FOLLOW_assignmentExpression_in_directAbstractDeclaratorSuffix8009);
							assignmentExpression353=assignmentExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression353.getTree());
							RSQUARE354=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_directAbstractDeclaratorSuffix8011); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE354);

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

							root_0 = (Object)adaptor.nil();
							// 1293:9: -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList assignmentExpression )
							{
								// CivlCParser.g:1293: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:1294:9: STAR RSQUARE
							{
							STAR355=(Token)match(input,STAR,FOLLOW_STAR_in_directAbstractDeclaratorSuffix8043); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_STAR.add(STAR355);

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

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

							root_0 = (Object)adaptor.nil();
							// 1295:9: -> ^( ARRAY_SUFFIX LSQUARE ABSENT ABSENT STAR )
							{
								// CivlCParser.g:1295: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:1297:7: LPAREN ( parameterTypeList RPAREN -> ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN ) | RPAREN -> ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN ) )
					{
					LPAREN357=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_directAbstractDeclaratorSuffix8083); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN357);

					// CivlCParser.g:1298:7: ( parameterTypeList RPAREN -> ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN ) | RPAREN -> ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN ) )
					int alt98=2;
					int LA98_0 = input.LA(1);
					if ( (LA98_0==IDENTIFIER||(LA98_0 >= ABSTRACT && LA98_0 <= ALIGNAS)||(LA98_0 >= ATOMIC && LA98_0 <= AUTO)||LA98_0==BOOL||LA98_0==CHAR||(LA98_0 >= COMPLEX && LA98_0 <= CONST)||LA98_0==DEVICE||(LA98_0 >= DOMAIN && LA98_0 <= DOUBLE)||LA98_0==ENUM||(LA98_0 >= EXTERN && LA98_0 <= FATOMIC)||LA98_0==FLOAT||LA98_0==GLOBAL||(LA98_0 >= INLINE && LA98_0 <= INT)||(LA98_0 >= LONG && LA98_0 <= NORETURN)||LA98_0==OUTPUT||(LA98_0 >= PURE && LA98_0 <= RANGE)||(LA98_0 >= REAL && LA98_0 <= REGISTER)||LA98_0==RESTRICT||(LA98_0 >= SHARED && LA98_0 <= SIGNED)||(LA98_0 >= STATE_F && LA98_0 <= STATIC)||LA98_0==STRUCT||LA98_0==SYSTEM||(LA98_0 >= THREADLOCAL && LA98_0 <= TYPEOF)||(LA98_0 >= UNION && LA98_0 <= VOLATILE)) ) {
						alt98=1;
					}
					else if ( (LA98_0==RPAREN) ) {
						alt98=2;
					}

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

					switch (alt98) {
						case 1 :
							// CivlCParser.g:1298:9: parameterTypeList RPAREN
							{
							pushFollow(FOLLOW_parameterTypeList_in_directAbstractDeclaratorSuffix8093);
							parameterTypeList358=parameterTypeList();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_parameterTypeList.add(parameterTypeList358.getTree());
							RPAREN359=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_directAbstractDeclaratorSuffix8095); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN359);

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

							// 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();
							// 1301:9: -> ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN )
							{
								// CivlCParser.g:1301: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:1306: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 LCURLY362=null;
		Token RCURLY364=null;
		Token COMMA365=null;
		Token RCURLY366=null;
		ParserRuleReturnScope assignmentExpression361 =null;
		ParserRuleReturnScope initializerList363 =null;

		Object LCURLY362_tree=null;
		Object RCURLY364_tree=null;
		Object COMMA365_tree=null;
		Object RCURLY366_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:1307:5: ( assignmentExpression -> ^( SCALAR_INITIALIZER assignmentExpression ) | LCURLY initializerList ( RCURLY | COMMA RCURLY ) -> initializerList )
			int alt101=2;
			int LA101_0 = input.LA(1);
			if ( (LA101_0==AMPERSAND||LA101_0==CHARACTER_CONSTANT||LA101_0==ELLIPSIS||LA101_0==FLOATING_CONSTANT||LA101_0==IDENTIFIER||LA101_0==INTEGER_CONSTANT||LA101_0==LPAREN||LA101_0==MINUSMINUS||LA101_0==NOT||LA101_0==PLUS||LA101_0==PLUSPLUS||LA101_0==STAR||(LA101_0 >= STRING_LITERAL && LA101_0 <= SUB)||LA101_0==TILDE||LA101_0==ALIGNOF||LA101_0==BIG_O||LA101_0==CALLS||LA101_0==GENERIC||LA101_0==HERE||LA101_0==PROCNULL||LA101_0==RESULT||(LA101_0 >= SCOPEOF && LA101_0 <= SELF)||(LA101_0 >= SIZEOF && LA101_0 <= SPAWN)||LA101_0==SUM) ) {
				alt101=1;
			}
			else if ( (LA101_0==LCURLY) ) {
				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:1307:7: assignmentExpression
					{
					pushFollow(FOLLOW_assignmentExpression_in_initializer8172);
					assignmentExpression361=assignmentExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression361.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();
					// 1307:28: -> ^( SCALAR_INITIALIZER assignmentExpression )
					{
						// CivlCParser.g:1307: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:1308:7: LCURLY initializerList ( RCURLY | COMMA RCURLY )
					{
					LCURLY362=(Token)match(input,LCURLY,FOLLOW_LCURLY_in_initializer8188); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LCURLY.add(LCURLY362);

					pushFollow(FOLLOW_initializerList_in_initializer8190);
					initializerList363=initializerList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_initializerList.add(initializerList363.getTree());
					// CivlCParser.g:1309:9: ( RCURLY | COMMA RCURLY )
					int alt100=2;
					int LA100_0 = input.LA(1);
					if ( (LA100_0==RCURLY) ) {
						alt100=1;
					}
					else if ( (LA100_0==COMMA) ) {
						alt100=2;
					}

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

					switch (alt100) {
						case 1 :
							// CivlCParser.g:1309:13: RCURLY
							{
							RCURLY364=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_initializer8204); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY364);

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

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

							}
							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();
					// 1312: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:1316: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 COMMA368=null;
		ParserRuleReturnScope designatedInitializer367 =null;
		ParserRuleReturnScope designatedInitializer369 =null;

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

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

				}

				switch (alt102) {
				case 1 :
					// CivlCParser.g:1317:30: COMMA designatedInitializer
					{
					COMMA368=(Token)match(input,COMMA,FOLLOW_COMMA_in_initializerList8262); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA368);

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

				default :
					break loop102;
				}
			}

			// 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();
			// 1318:7: -> ^( INITIALIZER_LIST ( designatedInitializer )+ )
			{
				// CivlCParser.g:1318: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:1321: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 initializer370 =null;
		ParserRuleReturnScope designation371 =null;
		ParserRuleReturnScope initializer372 =null;

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

		try {
			// CivlCParser.g:1322:2: ( initializer -> ^( DESIGNATED_INITIALIZER ABSENT initializer ) | designation initializer -> ^( DESIGNATED_INITIALIZER designation initializer ) )
			int alt103=2;
			int LA103_0 = input.LA(1);
			if ( (LA103_0==AMPERSAND||LA103_0==CHARACTER_CONSTANT||LA103_0==ELLIPSIS||LA103_0==FLOATING_CONSTANT||LA103_0==IDENTIFIER||LA103_0==INTEGER_CONSTANT||LA103_0==LCURLY||LA103_0==LPAREN||LA103_0==MINUSMINUS||LA103_0==NOT||LA103_0==PLUS||LA103_0==PLUSPLUS||LA103_0==STAR||(LA103_0 >= STRING_LITERAL && LA103_0 <= SUB)||LA103_0==TILDE||LA103_0==ALIGNOF||LA103_0==BIG_O||LA103_0==CALLS||LA103_0==GENERIC||LA103_0==HERE||LA103_0==PROCNULL||LA103_0==RESULT||(LA103_0 >= SCOPEOF && LA103_0 <= SELF)||(LA103_0 >= SIZEOF && LA103_0 <= SPAWN)||LA103_0==SUM) ) {
				alt103=1;
			}
			else if ( (LA103_0==DOT||LA103_0==LSQUARE) ) {
				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:1322:4: initializer
					{
					pushFollow(FOLLOW_initializer_in_designatedInitializer8295);
					initializer370=initializer();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_initializer.add(initializer370.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();
					// 1323:4: -> ^( DESIGNATED_INITIALIZER ABSENT initializer )
					{
						// CivlCParser.g:1323: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:1324:4: designation initializer
					{
					pushFollow(FOLLOW_designation_in_designatedInitializer8313);
					designation371=designation();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_designation.add(designation371.getTree());
					pushFollow(FOLLOW_initializer_in_designatedInitializer8315);
					initializer372=initializer();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_initializer.add(initializer372.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();
					// 1325:4: -> ^( DESIGNATED_INITIALIZER designation initializer )
					{
						// CivlCParser.g:1325: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:1329: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 ASSIGN374=null;
		ParserRuleReturnScope designatorList373 =null;

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

		try {
			// CivlCParser.g:1330:5: ( designatorList ASSIGN -> ^( DESIGNATION designatorList ) )
			// CivlCParser.g:1330:7: designatorList ASSIGN
			{
			pushFollow(FOLLOW_designatorList_in_designation8344);
			designatorList373=designatorList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_designatorList.add(designatorList373.getTree());
			ASSIGN374=(Token)match(input,ASSIGN,FOLLOW_ASSIGN_in_designation8346); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ASSIGN.add(ASSIGN374);

			// 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();
			// 1330:29: -> ^( DESIGNATION designatorList )
			{
				// CivlCParser.g:1330: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:1334: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 designator375 =null;


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


			// CivlCParser.g:1335:7: ( designator )+
			int cnt104=0;
			loop104:
			while (true) {
				int alt104=2;
				int LA104_0 = input.LA(1);
				if ( (LA104_0==DOT||LA104_0==LSQUARE) ) {
					alt104=1;
				}

				switch (alt104) {
				case 1 :
					// CivlCParser.g:1335:7: designator
					{
					pushFollow(FOLLOW_designator_in_designatorList8373);
					designator375=designator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, designator375.getTree());

					}
					break;

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

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException 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:1339: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 LSQUARE376=null;
		Token RSQUARE378=null;
		Token DOT379=null;
		Token IDENTIFIER380=null;
		ParserRuleReturnScope constantExpression377 =null;

		Object LSQUARE376_tree=null;
		Object RSQUARE378_tree=null;
		Object DOT379_tree=null;
		Object IDENTIFIER380_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:1340:5: ( LSQUARE constantExpression RSQUARE -> ^( ARRAY_ELEMENT_DESIGNATOR constantExpression ) | DOT IDENTIFIER -> ^( FIELD_DESIGNATOR IDENTIFIER ) )
			int alt105=2;
			int LA105_0 = input.LA(1);
			if ( (LA105_0==LSQUARE) ) {
				alt105=1;
			}
			else if ( (LA105_0==DOT) ) {
				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:1340:7: LSQUARE constantExpression RSQUARE
					{
					LSQUARE376=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_designator8393); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE376);

					pushFollow(FOLLOW_constantExpression_in_designator8395);
					constantExpression377=constantExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_constantExpression.add(constantExpression377.getTree());
					RSQUARE378=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_designator8397); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE378);

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

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

					// 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();
					// 1343:7: -> ^( FIELD_DESIGNATOR IDENTIFIER )
					{
						// CivlCParser.g:1343: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:1347: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 STATICASSERT381=null;
		Token LPAREN382=null;
		Token COMMA384=null;
		Token STRING_LITERAL385=null;
		Token RPAREN386=null;
		Token SEMI387=null;
		ParserRuleReturnScope constantExpression383 =null;

		Object STATICASSERT381_tree=null;
		Object LPAREN382_tree=null;
		Object COMMA384_tree=null;
		Object STRING_LITERAL385_tree=null;
		Object RPAREN386_tree=null;
		Object SEMI387_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:1348:5: ( STATICASSERT LPAREN constantExpression COMMA STRING_LITERAL RPAREN SEMI -> ^( STATICASSERT constantExpression STRING_LITERAL ) )
			// CivlCParser.g:1348:7: STATICASSERT LPAREN constantExpression COMMA STRING_LITERAL RPAREN SEMI
			{
			STATICASSERT381=(Token)match(input,STATICASSERT,FOLLOW_STATICASSERT_in_staticAssertDeclaration8454); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_STATICASSERT.add(STATICASSERT381);

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

			pushFollow(FOLLOW_constantExpression_in_staticAssertDeclaration8458);
			constantExpression383=constantExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_constantExpression.add(constantExpression383.getTree());
			COMMA384=(Token)match(input,COMMA,FOLLOW_COMMA_in_staticAssertDeclaration8460); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_COMMA.add(COMMA384);

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

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

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

			// AST REWRITE
			// elements: STATICASSERT, STRING_LITERAL, 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();
			// 1350:7: -> ^( STATICASSERT constantExpression STRING_LITERAL )
			{
				// CivlCParser.g:1350: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:1354: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 DOMAIN388=null;
		Token LPAREN389=null;
		Token INTEGER_CONSTANT390=null;
		Token RPAREN391=null;

		Object DOMAIN388_tree=null;
		Object LPAREN389_tree=null;
		Object INTEGER_CONSTANT390_tree=null;
		Object RPAREN391_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:1355:2: ( DOMAIN ( -> ^( DOMAIN ) | LPAREN INTEGER_CONSTANT RPAREN -> ^( DOMAIN INTEGER_CONSTANT RPAREN ) ) )
			// CivlCParser.g:1355:4: DOMAIN ( -> ^( DOMAIN ) | LPAREN INTEGER_CONSTANT RPAREN -> ^( DOMAIN INTEGER_CONSTANT RPAREN ) )
			{
			DOMAIN388=(Token)match(input,DOMAIN,FOLLOW_DOMAIN_in_domainSpecifier8504); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_DOMAIN.add(DOMAIN388);

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

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

			}

			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:1356: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();
					// 1356:6: -> ^( DOMAIN )
					{
						// CivlCParser.g:1356: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:1357:6: LPAREN INTEGER_CONSTANT RPAREN
					{
					LPAREN389=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_domainSpecifier8522); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN389);

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

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

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

					root_0 = (Object)adaptor.nil();
					// 1357:37: -> ^( DOMAIN INTEGER_CONSTANT RPAREN )
					{
						// CivlCParser.g:1357: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:1362: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_TYPE392=null;

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

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

			// 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();
			// 1363:16: -> ^( MEM_TYPE )
			{
				// CivlCParser.g:1363: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:1369: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 ) | 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 labeledStatement393 =null;
		ParserRuleReturnScope compoundStatement394 =null;
		ParserRuleReturnScope expressionStatement395 =null;
		ParserRuleReturnScope selectionStatement396 =null;
		ParserRuleReturnScope iterationStatement397 =null;
		ParserRuleReturnScope jumpStatement398 =null;
		ParserRuleReturnScope whenStatement399 =null;
		ParserRuleReturnScope chooseStatement400 =null;
		ParserRuleReturnScope atomicStatement401 =null;
		ParserRuleReturnScope runStatement402 =null;
		ParserRuleReturnScope asmStatement403 =null;

		RewriteRuleSubtreeStream stream_whenStatement=new RewriteRuleSubtreeStream(adaptor,"rule whenStatement");
		RewriteRuleSubtreeStream stream_chooseStatement=new RewriteRuleSubtreeStream(adaptor,"rule chooseStatement");
		RewriteRuleSubtreeStream stream_iterationStatement=new RewriteRuleSubtreeStream(adaptor,"rule iterationStatement");
		RewriteRuleSubtreeStream stream_labeledStatement=new RewriteRuleSubtreeStream(adaptor,"rule labeledStatement");
		RewriteRuleSubtreeStream stream_compoundStatement=new RewriteRuleSubtreeStream(adaptor,"rule compoundStatement");
		RewriteRuleSubtreeStream stream_atomicStatement=new RewriteRuleSubtreeStream(adaptor,"rule atomicStatement");
		RewriteRuleSubtreeStream stream_expressionStatement=new RewriteRuleSubtreeStream(adaptor,"rule expressionStatement");
		RewriteRuleSubtreeStream stream_selectionStatement=new RewriteRuleSubtreeStream(adaptor,"rule selectionStatement");
		RewriteRuleSubtreeStream stream_jumpStatement=new RewriteRuleSubtreeStream(adaptor,"rule jumpStatement");
		RewriteRuleSubtreeStream stream_runStatement=new RewriteRuleSubtreeStream(adaptor,"rule runStatement");
		RewriteRuleSubtreeStream stream_asmStatement=new RewriteRuleSubtreeStream(adaptor,"rule asmStatement");

		try {
			// CivlCParser.g:1370: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 ) | asmStatement -> ^( STATEMENT asmStatement ) )
			int alt107=11;
			switch ( input.LA(1) ) {
			case IDENTIFIER:
				{
				int LA107_1 = input.LA(2);
				if ( (LA107_1==COLON) ) {
					alt107=1;
				}
				else if ( ((LA107_1 >= AMPERSAND && LA107_1 <= AND)||(LA107_1 >= ARROW && LA107_1 <= ASSIGN)||(LA107_1 >= BITANDEQ && LA107_1 <= BITXOREQ)||LA107_1==COMMA||(LA107_1 >= DIV && LA107_1 <= DOTDOT)||LA107_1==EQUALS||(LA107_1 >= GT && LA107_1 <= GTE)||LA107_1==IMPLIES||LA107_1==LEXCON||LA107_1==LPAREN||(LA107_1 >= LSQUARE && LA107_1 <= LTE)||(LA107_1 >= MINUSMINUS && LA107_1 <= NEQ)||LA107_1==OR||(LA107_1 >= PLUS && LA107_1 <= PLUSPLUS)||LA107_1==QMARK||(LA107_1 >= SEMI && LA107_1 <= STAREQ)||(LA107_1 >= SUB && LA107_1 <= SUBEQ)) ) {
					alt107=3;
				}

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

				}
				break;
			case CASE:
			case DEFAULT:
				{
				alt107=1;
				}
				break;
			case LCURLY:
				{
				alt107=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 EXISTS:
			case FORALL:
			case GENERIC:
			case HERE:
			case PROCNULL:
			case RESULT:
			case SCOPEOF:
			case SELF:
			case SIZEOF:
			case SPAWN:
			case SUM:
				{
				alt107=3;
				}
				break;
			case IF:
			case SWITCH:
				{
				alt107=4;
				}
				break;
			case CIVLFOR:
			case DO:
			case FOR:
			case PARFOR:
			case WHILE:
				{
				alt107=5;
				}
				break;
			case BREAK:
			case CONTINUE:
			case GOTO:
			case RETURN:
				{
				alt107=6;
				}
				break;
			case WHEN:
				{
				alt107=7;
				}
				break;
			case CHOOSE:
				{
				alt107=8;
				}
				break;
			case CIVLATOMIC:
				{
				alt107=9;
				}
				break;
			case RUN:
				{
				alt107=10;
				}
				break;
			case ASM:
				{
				alt107=11;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 107, 0, input);
				throw nvae;
			}
			switch (alt107) {
				case 1 :
					// CivlCParser.g:1370:7: labeledStatement
					{
					pushFollow(FOLLOW_labeledStatement_in_statement8581);
					labeledStatement393=labeledStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_labeledStatement.add(labeledStatement393.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();
					// 1370:24: -> ^( STATEMENT labeledStatement )
					{
						// CivlCParser.g:1370: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:1371:7: compoundStatement
					{
					pushFollow(FOLLOW_compoundStatement_in_statement8597);
					compoundStatement394=compoundStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_compoundStatement.add(compoundStatement394.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();
					// 1371:25: -> ^( STATEMENT compoundStatement )
					{
						// CivlCParser.g:1371: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:1372:7: expressionStatement
					{
					pushFollow(FOLLOW_expressionStatement_in_statement8613);
					expressionStatement395=expressionStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expressionStatement.add(expressionStatement395.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();
					// 1372:27: -> ^( STATEMENT expressionStatement )
					{
						// CivlCParser.g:1372: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:1373:7: selectionStatement
					{
					pushFollow(FOLLOW_selectionStatement_in_statement8629);
					selectionStatement396=selectionStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_selectionStatement.add(selectionStatement396.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();
					// 1373:26: -> ^( STATEMENT selectionStatement )
					{
						// CivlCParser.g:1373: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:1374:7: iterationStatement
					{
					pushFollow(FOLLOW_iterationStatement_in_statement8645);
					iterationStatement397=iterationStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_iterationStatement.add(iterationStatement397.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();
					// 1374:26: -> ^( STATEMENT iterationStatement )
					{
						// CivlCParser.g:1374: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:1375:7: jumpStatement
					{
					pushFollow(FOLLOW_jumpStatement_in_statement8661);
					jumpStatement398=jumpStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_jumpStatement.add(jumpStatement398.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();
					// 1375:21: -> ^( STATEMENT jumpStatement )
					{
						// CivlCParser.g:1375: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:1376:7: whenStatement
					{
					pushFollow(FOLLOW_whenStatement_in_statement8677);
					whenStatement399=whenStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_whenStatement.add(whenStatement399.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();
					// 1376:21: -> ^( STATEMENT whenStatement )
					{
						// CivlCParser.g:1376: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:1377:7: chooseStatement
					{
					pushFollow(FOLLOW_chooseStatement_in_statement8693);
					chooseStatement400=chooseStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_chooseStatement.add(chooseStatement400.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();
					// 1377:23: -> ^( STATEMENT chooseStatement )
					{
						// CivlCParser.g:1377: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:1378:7: atomicStatement
					{
					pushFollow(FOLLOW_atomicStatement_in_statement8709);
					atomicStatement401=atomicStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_atomicStatement.add(atomicStatement401.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();
					// 1378:23: -> ^( STATEMENT atomicStatement )
					{
						// CivlCParser.g:1378: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:1379:7: runStatement
					{
					pushFollow(FOLLOW_runStatement_in_statement8725);
					runStatement402=runStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_runStatement.add(runStatement402.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();
					// 1379:20: -> ^( STATEMENT runStatement )
					{
						// CivlCParser.g:1379: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:1380:7: asmStatement
					{
					pushFollow(FOLLOW_asmStatement_in_statement8741);
					asmStatement403=asmStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_asmStatement.add(asmStatement403.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();
					// 1380:20: -> ^( STATEMENT asmStatement )
					{
						// CivlCParser.g:1380: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:1383: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 statement404 =null;
		ParserRuleReturnScope pragma405 =null;
		ParserRuleReturnScope statement406 =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:1390:2: ( statement | ( pragma )+ statement -> ^( STATEMENT ^( COMPOUND_STATEMENT ABSENT ^( BLOCK_ITEM_LIST ( pragma )+ statement ) ABSENT ) ) )
			int alt109=2;
			int LA109_0 = input.LA(1);
			if ( (LA109_0==AMPERSAND||LA109_0==CHARACTER_CONSTANT||LA109_0==ELLIPSIS||LA109_0==FLOATING_CONSTANT||(LA109_0 >= IDENTIFIER && LA109_0 <= IF)||LA109_0==INTEGER_CONSTANT||LA109_0==LCURLY||LA109_0==LPAREN||LA109_0==MINUSMINUS||LA109_0==NOT||LA109_0==PLUS||LA109_0==PLUSPLUS||LA109_0==SEMI||LA109_0==STAR||(LA109_0 >= STRING_LITERAL && LA109_0 <= SUB)||LA109_0==TILDE||(LA109_0 >= ALIGNOF && LA109_0 <= ASM)||LA109_0==BIG_O||(LA109_0 >= BREAK && LA109_0 <= CASE)||(LA109_0 >= CHOOSE && LA109_0 <= CIVLFOR)||(LA109_0 >= CONTINUE && LA109_0 <= DEFAULT)||LA109_0==DO||LA109_0==EXISTS||(LA109_0 >= FOR && LA109_0 <= GENERIC)||LA109_0==GOTO||LA109_0==HERE||LA109_0==PARFOR||LA109_0==PROCNULL||(LA109_0 >= RESULT && LA109_0 <= SELF)||(LA109_0 >= SIZEOF && LA109_0 <= SPAWN)||LA109_0==SWITCH||(LA109_0 >= WHEN && LA109_0 <= WHILE)||LA109_0==SUM) ) {
				alt109=1;
			}
			else if ( (LA109_0==PPRAGMA) ) {
				alt109=2;
			}

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

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


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

					}
					break;
				case 2 :
					// CivlCParser.g:1391:4: ( pragma )+ statement
					{
					// CivlCParser.g:1391:4: ( pragma )+
					int cnt108=0;
					loop108:
					while (true) {
						int alt108=2;
						int LA108_0 = input.LA(1);
						if ( (LA108_0==PPRAGMA) ) {
							alt108=1;
						}

						switch (alt108) {
						case 1 :
							// CivlCParser.g:1391:4: pragma
							{
							pushFollow(FOLLOW_pragma_in_statementWithScope8778);
							pragma405=pragma();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_pragma.add(pragma405.getTree());
							}
							break;

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

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

					root_0 = (Object)adaptor.nil();
					// 1391:22: -> ^( STATEMENT ^( COMPOUND_STATEMENT ABSENT ^( BLOCK_ITEM_LIST ( pragma )+ statement ) ABSENT ) )
					{
						// CivlCParser.g:1391: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:1391: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:1391: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:1410: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 IDENTIFIER407=null;
		Token COLON408=null;
		Token CASE410=null;
		Token COLON412=null;
		Token DEFAULT414=null;
		Token COLON415=null;
		ParserRuleReturnScope statement409 =null;
		ParserRuleReturnScope constantExpression411 =null;
		ParserRuleReturnScope statement413 =null;
		ParserRuleReturnScope statement416 =null;

		Object IDENTIFIER407_tree=null;
		Object COLON408_tree=null;
		Object CASE410_tree=null;
		Object COLON412_tree=null;
		Object DEFAULT414_tree=null;
		Object COLON415_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:1411: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 alt110=3;
			switch ( input.LA(1) ) {
			case IDENTIFIER:
				{
				alt110=1;
				}
				break;
			case CASE:
				{
				alt110=2;
				}
				break;
			case DEFAULT:
				{
				alt110=3;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 110, 0, input);
				throw nvae;
			}
			switch (alt110) {
				case 1 :
					// CivlCParser.g:1411:7: IDENTIFIER COLON statement
					{
					IDENTIFIER407=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_labeledStatement8820); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER407);

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

					pushFollow(FOLLOW_statement_in_labeledStatement8824);
					statement409=statement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statement.add(statement409.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();
					// 1412:7: -> ^( IDENTIFIER_LABELED_STATEMENT IDENTIFIER statement )
					{
						// CivlCParser.g:1412: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:1413:7: CASE constantExpression COLON statement
					{
					CASE410=(Token)match(input,CASE,FOLLOW_CASE_in_labeledStatement8848); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_CASE.add(CASE410);

					pushFollow(FOLLOW_constantExpression_in_labeledStatement8850);
					constantExpression411=constantExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_constantExpression.add(constantExpression411.getTree());
					COLON412=(Token)match(input,COLON,FOLLOW_COLON_in_labeledStatement8852); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COLON.add(COLON412);

					pushFollow(FOLLOW_statement_in_labeledStatement8854);
					statement413=statement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statement.add(statement413.getTree());
					// AST REWRITE
					// elements: statement, CASE, constantExpression
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1414:7: -> ^( CASE_LABELED_STATEMENT CASE constantExpression statement )
					{
						// CivlCParser.g:1414: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:1415:7: DEFAULT COLON statement
					{
					DEFAULT414=(Token)match(input,DEFAULT,FOLLOW_DEFAULT_in_labeledStatement8880); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_DEFAULT.add(DEFAULT414);

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

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

					root_0 = (Object)adaptor.nil();
					// 1416:7: -> ^( DEFAULT_LABELED_STATEMENT DEFAULT statement )
					{
						// CivlCParser.g:1416: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:1425: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 LCURLY417=null;
		Token RCURLY418=null;
		Token RCURLY420=null;
		ParserRuleReturnScope blockItemList419 =null;

		Object LCURLY417_tree=null;
		Object RCURLY418_tree=null;
		Object RCURLY420_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:1435:5: ( LCURLY ( RCURLY -> ^( COMPOUND_STATEMENT LCURLY ABSENT RCURLY ) | blockItemList RCURLY -> ^( COMPOUND_STATEMENT LCURLY blockItemList RCURLY ) ) )
			// CivlCParser.g:1435:7: LCURLY ( RCURLY -> ^( COMPOUND_STATEMENT LCURLY ABSENT RCURLY ) | blockItemList RCURLY -> ^( COMPOUND_STATEMENT LCURLY blockItemList RCURLY ) )
			{
			LCURLY417=(Token)match(input,LCURLY,FOLLOW_LCURLY_in_compoundStatement8934); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LCURLY.add(LCURLY417);

			// CivlCParser.g:1436:7: ( RCURLY -> ^( COMPOUND_STATEMENT LCURLY ABSENT RCURLY ) | blockItemList RCURLY -> ^( COMPOUND_STATEMENT LCURLY blockItemList RCURLY ) )
			int alt111=2;
			int LA111_0 = input.LA(1);
			if ( (LA111_0==RCURLY) ) {
				alt111=1;
			}
			else if ( (LA111_0==AMPERSAND||LA111_0==ANNOTATION_START||LA111_0==CHARACTER_CONSTANT||LA111_0==ELLIPSIS||LA111_0==FLOATING_CONSTANT||(LA111_0 >= IDENTIFIER && LA111_0 <= IF)||LA111_0==INLINE_ANNOTATION_START||LA111_0==INTEGER_CONSTANT||LA111_0==LCURLY||LA111_0==LPAREN||LA111_0==MINUSMINUS||LA111_0==NOT||LA111_0==PLUS||LA111_0==PLUSPLUS||LA111_0==SEMI||LA111_0==STAR||(LA111_0 >= STRING_LITERAL && LA111_0 <= SUB)||LA111_0==TILDE||(LA111_0 >= ABSTRACT && LA111_0 <= ASM)||(LA111_0 >= ATOMIC && LA111_0 <= BIG_O)||(LA111_0 >= BOOL && LA111_0 <= CASE)||(LA111_0 >= CHAR && LA111_0 <= CIVLFOR)||(LA111_0 >= COMPLEX && LA111_0 <= CONST)||(LA111_0 >= CONTINUE && LA111_0 <= DEFAULT)||LA111_0==DEVICE||(LA111_0 >= DO && LA111_0 <= DOUBLE)||(LA111_0 >= ENUM && LA111_0 <= EXISTS)||(LA111_0 >= EXTERN && LA111_0 <= FATOMIC)||(LA111_0 >= FLOAT && LA111_0 <= GOTO)||LA111_0==HERE||(LA111_0 >= INLINE && LA111_0 <= INT)||(LA111_0 >= LONG && LA111_0 <= NORETURN)||LA111_0==OUTPUT||LA111_0==PARFOR||(LA111_0 >= PPRAGMA && LA111_0 <= RANGE)||(LA111_0 >= REAL && LA111_0 <= REGISTER)||(LA111_0 >= RESTRICT && LA111_0 <= SELF)||(LA111_0 >= SHARED && LA111_0 <= SYSTEM)||(LA111_0 >= THREADLOCAL && LA111_0 <= TYPEOF)||(LA111_0 >= UNION && LA111_0 <= WHILE)||LA111_0==SUM) ) {
				alt111=2;
			}

			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:1436:9: RCURLY
					{
					RCURLY418=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_compoundStatement8944); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY418);

					// 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();
					// 1437:9: -> ^( COMPOUND_STATEMENT LCURLY ABSENT RCURLY )
					{
						// CivlCParser.g:1437: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:1438:9: blockItemList RCURLY
					{
					pushFollow(FOLLOW_blockItemList_in_compoundStatement8974);
					blockItemList419=blockItemList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_blockItemList.add(blockItemList419.getTree());
					RCURLY420=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_compoundStatement8976); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY420);

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

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

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

				switch (alt112) {
				case 1 :
					// CivlCParser.g:1445:7: blockItem
					{
					pushFollow(FOLLOW_blockItem_in_blockItemList9023);
					blockItem421=blockItem();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_blockItem.add(blockItem421.getTree());
					}
					break;

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

			// 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();
			// 1445:18: -> ^( BLOCK_ITEM_LIST ( blockItem )+ )
			{
				// CivlCParser.g:1445: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:1453: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 SEMI423=null;
		Token SEMI424=null;
		ParserRuleReturnScope expression422 =null;

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

		try {
			// CivlCParser.g:1454:5: ( expression SEMI -> ^( EXPRESSION_STATEMENT expression SEMI ) | SEMI -> ^( EXPRESSION_STATEMENT ABSENT SEMI ) )
			int alt113=2;
			int LA113_0 = input.LA(1);
			if ( (LA113_0==AMPERSAND||LA113_0==CHARACTER_CONSTANT||LA113_0==ELLIPSIS||LA113_0==FLOATING_CONSTANT||LA113_0==IDENTIFIER||LA113_0==INTEGER_CONSTANT||LA113_0==LPAREN||LA113_0==MINUSMINUS||LA113_0==NOT||LA113_0==PLUS||LA113_0==PLUSPLUS||LA113_0==STAR||(LA113_0 >= STRING_LITERAL && LA113_0 <= SUB)||LA113_0==TILDE||LA113_0==ALIGNOF||LA113_0==BIG_O||LA113_0==CALLS||LA113_0==EXISTS||(LA113_0 >= FORALL && LA113_0 <= GENERIC)||LA113_0==HERE||LA113_0==PROCNULL||LA113_0==RESULT||(LA113_0 >= SCOPEOF && LA113_0 <= SELF)||(LA113_0 >= SIZEOF && LA113_0 <= SPAWN)||LA113_0==SUM) ) {
				alt113=1;
			}
			else if ( (LA113_0==SEMI) ) {
				alt113=2;
			}

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

			switch (alt113) {
				case 1 :
					// CivlCParser.g:1454:7: expression SEMI
					{
					pushFollow(FOLLOW_expression_in_expressionStatement9052);
					expression422=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression422.getTree());
					SEMI423=(Token)match(input,SEMI,FOLLOW_SEMI_in_expressionStatement9054); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SEMI.add(SEMI423);

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

					// 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();
					// 1455:12: -> ^( EXPRESSION_STATEMENT ABSENT SEMI )
					{
						// CivlCParser.g:1455: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:1470: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 IF425=null;
		Token LPAREN426=null;
		Token RPAREN428=null;
		Token ELSE429=null;
		Token SWITCH430=null;
		Token LPAREN431=null;
		Token RPAREN433=null;
		ParserRuleReturnScope s1 =null;
		ParserRuleReturnScope s2 =null;
		ParserRuleReturnScope s =null;
		ParserRuleReturnScope expression427 =null;
		ParserRuleReturnScope expression432 =null;

		Object IF425_tree=null;
		Object LPAREN426_tree=null;
		Object RPAREN428_tree=null;
		Object ELSE429_tree=null;
		Object SWITCH430_tree=null;
		Object LPAREN431_tree=null;
		Object RPAREN433_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:1477: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 alt115=2;
			int LA115_0 = input.LA(1);
			if ( (LA115_0==IF) ) {
				alt115=1;
			}
			else if ( (LA115_0==SWITCH) ) {
				alt115=2;
			}

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

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

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

					pushFollow(FOLLOW_expression_in_selectionStatement9115);
					expression427=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression427.getTree());
					RPAREN428=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_selectionStatement9117); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN428);

					pushFollow(FOLLOW_statementWithScope_in_selectionStatement9121);
					s1=statementWithScope();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statementWithScope.add(s1.getTree());
					// CivlCParser.g:1478:9: ( ( ELSE )=> ELSE s2= statementWithScope -> ^( IF expression $s1 $s2) | -> ^( IF expression $s1 ABSENT ) )
					int alt114=2;
					int LA114_0 = input.LA(1);
					if ( (LA114_0==ELSE) ) {
						int LA114_1 = input.LA(2);
						if ( (synpred29_CivlCParser()) ) {
							alt114=1;
						}
						else if ( (true) ) {
							alt114=2;
						}

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

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

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

					pushFollow(FOLLOW_expression_in_selectionStatement9211);
					expression432=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression432.getTree());
					RPAREN433=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_selectionStatement9213); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN433);

					pushFollow(FOLLOW_statementWithScope_in_selectionStatement9217);
					s=statementWithScope();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statementWithScope.add(s.getTree());
					// AST REWRITE
					// elements: SWITCH, expression, s
					// token labels: 
					// rule labels: s, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_s=new RewriteRuleSubtreeStream(adaptor,"rule s",s!=null?s.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1483:7: -> ^( SWITCH expression $s)
					{
						// CivlCParser.g:1483: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:1505: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 WHILE434=null;
		Token LPAREN435=null;
		Token RPAREN437=null;
		Token DO439=null;
		Token WHILE440=null;
		Token LPAREN441=null;
		Token RPAREN443=null;
		Token SEMI445=null;
		Token FOR446=null;
		Token LPAREN447=null;
		Token SEMI448=null;
		Token RPAREN449=null;
		Token SEMI450=null;
		Token SEMI451=null;
		Token RPAREN452=null;
		Token LPAREN453=null;
		Token COLON454=null;
		Token RPAREN455=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 expression436 =null;
		ParserRuleReturnScope invariant_opt438 =null;
		ParserRuleReturnScope expression442 =null;
		ParserRuleReturnScope invariant_opt444 =null;

		Object f_tree=null;
		Object WHILE434_tree=null;
		Object LPAREN435_tree=null;
		Object RPAREN437_tree=null;
		Object DO439_tree=null;
		Object WHILE440_tree=null;
		Object LPAREN441_tree=null;
		Object RPAREN443_tree=null;
		Object SEMI445_tree=null;
		Object FOR446_tree=null;
		Object LPAREN447_tree=null;
		Object SEMI448_tree=null;
		Object RPAREN449_tree=null;
		Object SEMI450_tree=null;
		Object SEMI451_tree=null;
		Object RPAREN452_tree=null;
		Object LPAREN453_tree=null;
		Object COLON454_tree=null;
		Object RPAREN455_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:1512: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 alt118=4;
			switch ( input.LA(1) ) {
			case WHILE:
				{
				alt118=1;
				}
				break;
			case DO:
				{
				alt118=2;
				}
				break;
			case FOR:
				{
				alt118=3;
				}
				break;
			case CIVLFOR:
			case PARFOR:
				{
				alt118=4;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 118, 0, input);
				throw nvae;
			}
			switch (alt118) {
				case 1 :
					// CivlCParser.g:1512:4: WHILE LPAREN expression RPAREN invariant_opt s= statementWithScope
					{
					WHILE434=(Token)match(input,WHILE,FOLLOW_WHILE_in_iterationStatement9260); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_WHILE.add(WHILE434);

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

					pushFollow(FOLLOW_expression_in_iterationStatement9264);
					expression436=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression436.getTree());
					RPAREN437=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_iterationStatement9266); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN437);

					pushFollow(FOLLOW_invariant_opt_in_iterationStatement9268);
					invariant_opt438=invariant_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_invariant_opt.add(invariant_opt438.getTree());
					pushFollow(FOLLOW_statementWithScope_in_iterationStatement9275);
					s=statementWithScope();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statementWithScope.add(s.getTree());
					// AST REWRITE
					// elements: expression, WHILE, s, 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();
					// 1514:4: -> ^( WHILE expression $s invariant_opt )
					{
						// CivlCParser.g:1514: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:1515:4: DO s= statementWithScope WHILE LPAREN expression RPAREN invariant_opt SEMI
					{
					DO439=(Token)match(input,DO,FOLLOW_DO_in_iterationStatement9296); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_DO.add(DO439);

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

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

					pushFollow(FOLLOW_expression_in_iterationStatement9306);
					expression442=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression442.getTree());
					RPAREN443=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_iterationStatement9308); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN443);

					pushFollow(FOLLOW_invariant_opt_in_iterationStatement9313);
					invariant_opt444=invariant_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_invariant_opt.add(invariant_opt444.getTree());
					SEMI445=(Token)match(input,SEMI,FOLLOW_SEMI_in_iterationStatement9315); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SEMI.add(SEMI445);

					// 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();
					// 1517:4: -> ^( DO $s expression invariant_opt )
					{
						// CivlCParser.g:1517: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:1518: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) )
					{
					FOR446=(Token)match(input,FOR,FOLLOW_FOR_in_iterationStatement9336); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_FOR.add(FOR446);

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

					// CivlCParser.g:1519: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 alt116=2;
					switch ( input.LA(1) ) {
					case ABSTRACT:
					case ALIGNAS:
					case ATOMIC:
					case AUTO:
					case BOOL:
					case CHAR:
					case COMPLEX:
					case CONST:
					case DEVICE:
					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 STATICASSERT:
					case STRUCT:
					case SYSTEM:
					case THREADLOCAL:
					case TYPEDEF:
					case TYPEOF:
					case UNION:
					case UNSIGNED:
					case VOID:
					case VOLATILE:
						{
						alt116=1;
						}
						break;
					case IDENTIFIER:
						{
						int LA116_19 = input.LA(2);
						if ( ((isTypeName(input.LT(1).getText()))) ) {
							alt116=1;
						}
						else if ( (true) ) {
							alt116=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 EXISTS:
					case FORALL:
					case GENERIC:
					case HERE:
					case PROCNULL:
					case RESULT:
					case SCOPEOF:
					case SELF:
					case SIZEOF:
					case SPAWN:
					case SUM:
						{
						alt116=2;
						}
						break;
					default:
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae =
							new NoViableAltException("", 116, 0, input);
						throw nvae;
					}
					switch (alt116) {
						case 1 :
							// CivlCParser.g:1520:6: d= declaration e1= expression_opt SEMI e2= expression_opt RPAREN i= invariant_opt s= statementWithScope
							{
							pushFollow(FOLLOW_declaration_in_iterationStatement9352);
							d=declaration();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_declaration.add(d.getTree());
							pushFollow(FOLLOW_expression_opt_in_iterationStatement9356);
							e1=expression_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression_opt.add(e1.getTree());
							SEMI448=(Token)match(input,SEMI,FOLLOW_SEMI_in_iterationStatement9358); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_SEMI.add(SEMI448);

							pushFollow(FOLLOW_expression_opt_in_iterationStatement9362);
							e2=expression_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression_opt.add(e2.getTree());
							RPAREN449=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_iterationStatement9369); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN449);

							pushFollow(FOLLOW_invariant_opt_in_iterationStatement9373);
							i=invariant_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_invariant_opt.add(i.getTree());
							pushFollow(FOLLOW_statementWithScope_in_iterationStatement9377);
							s=statementWithScope();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_statementWithScope.add(s.getTree());
							// AST REWRITE
							// elements: i, e1, s, FOR, d, e2
							// 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();
							// 1522:6: -> ^( FOR $d $e1 $e2 $s $i)
							{
								// CivlCParser.g:1522: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:1523:6: e0= expression_opt SEMI e1= expression_opt SEMI e2= expression_opt RPAREN i= invariant_opt s= statementWithScope
							{
							pushFollow(FOLLOW_expression_opt_in_iterationStatement9412);
							e0=expression_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression_opt.add(e0.getTree());
							SEMI450=(Token)match(input,SEMI,FOLLOW_SEMI_in_iterationStatement9414); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_SEMI.add(SEMI450);

							pushFollow(FOLLOW_expression_opt_in_iterationStatement9418);
							e1=expression_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression_opt.add(e1.getTree());
							SEMI451=(Token)match(input,SEMI,FOLLOW_SEMI_in_iterationStatement9420); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_SEMI.add(SEMI451);

							pushFollow(FOLLOW_expression_opt_in_iterationStatement9429);
							e2=expression_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression_opt.add(e2.getTree());
							RPAREN452=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_iterationStatement9431); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN452);

							pushFollow(FOLLOW_invariant_opt_in_iterationStatement9435);
							i=invariant_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_invariant_opt.add(i.getTree());
							pushFollow(FOLLOW_statementWithScope_in_iterationStatement9444);
							s=statementWithScope();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_statementWithScope.add(s.getTree());
							// AST REWRITE
							// elements: FOR, e1, e0, s, e2, i
							// 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();
							// 1526:6: -> ^( FOR $e0 $e1 $e2 $s $i)
							{
								// CivlCParser.g:1526: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:1528:4: (f= CIVLFOR |f= PARFOR ) LPAREN t= typeName_opt v= identifierList COLON e= expression RPAREN i= invariant_opt s= statementWithScope
					{
					// CivlCParser.g:1528:4: (f= CIVLFOR |f= PARFOR )
					int alt117=2;
					int LA117_0 = input.LA(1);
					if ( (LA117_0==CIVLFOR) ) {
						alt117=1;
					}
					else if ( (LA117_0==PARFOR) ) {
						alt117=2;
					}

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

					switch (alt117) {
						case 1 :
							// CivlCParser.g:1528:5: f= CIVLFOR
							{
							f=(Token)match(input,CIVLFOR,FOLLOW_CIVLFOR_in_iterationStatement9483); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_CIVLFOR.add(f);

							}
							break;
						case 2 :
							// CivlCParser.g:1528:17: f= PARFOR
							{
							f=(Token)match(input,PARFOR,FOLLOW_PARFOR_in_iterationStatement9489); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_PARFOR.add(f);

							}
							break;

					}

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

					pushFollow(FOLLOW_typeName_opt_in_iterationStatement9501);
					t=typeName_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName_opt.add(t.getTree());
					pushFollow(FOLLOW_identifierList_in_iterationStatement9505);
					v=identifierList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_identifierList.add(v.getTree());
					COLON454=(Token)match(input,COLON,FOLLOW_COLON_in_iterationStatement9507); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COLON.add(COLON454);

					pushFollow(FOLLOW_expression_in_iterationStatement9511);
					e=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(e.getTree());
					RPAREN455=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_iterationStatement9513); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN455);

					pushFollow(FOLLOW_invariant_opt_in_iterationStatement9522);
					i=invariant_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_invariant_opt.add(i.getTree());
					pushFollow(FOLLOW_statementWithScope_in_iterationStatement9526);
					s=statementWithScope();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statementWithScope.add(s.getTree());
					// AST REWRITE
					// elements: v, s, f, i, t, e
					// 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();
					// 1531:6: -> ^( $f $t $v $e $s $i)
					{
						// CivlCParser.g:1531: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:1534: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 expression456 =null;


		try {
			// CivlCParser.g:1535:2: ( expression | -> ABSENT )
			int alt119=2;
			int LA119_0 = input.LA(1);
			if ( (LA119_0==AMPERSAND||LA119_0==CHARACTER_CONSTANT||LA119_0==ELLIPSIS||LA119_0==FLOATING_CONSTANT||LA119_0==IDENTIFIER||LA119_0==INTEGER_CONSTANT||LA119_0==LPAREN||LA119_0==MINUSMINUS||LA119_0==NOT||LA119_0==PLUS||LA119_0==PLUSPLUS||LA119_0==STAR||(LA119_0 >= STRING_LITERAL && LA119_0 <= SUB)||LA119_0==TILDE||LA119_0==ALIGNOF||LA119_0==BIG_O||LA119_0==CALLS||LA119_0==EXISTS||(LA119_0 >= FORALL && LA119_0 <= GENERIC)||LA119_0==HERE||LA119_0==PROCNULL||LA119_0==RESULT||(LA119_0 >= SCOPEOF && LA119_0 <= SELF)||(LA119_0 >= SIZEOF && LA119_0 <= SPAWN)||LA119_0==SUM) ) {
				alt119=1;
			}
			else if ( (LA119_0==RPAREN||LA119_0==SEMI) ) {
				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:1535:4: expression
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_expression_in_expression_opt9564);
					expression456=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, expression456.getTree());

					}
					break;
				case 2 :
					// CivlCParser.g:1536: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();
					// 1536: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:1539: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 INVARIANT457=null;
		Token LPAREN458=null;
		Token RPAREN460=null;
		ParserRuleReturnScope expression459 =null;

		Object INVARIANT457_tree=null;
		Object LPAREN458_tree=null;
		Object RPAREN460_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:1540:2: ( -> ABSENT | INVARIANT LPAREN expression RPAREN -> ^( INVARIANT expression ) )
			int alt120=2;
			int LA120_0 = input.LA(1);
			if ( (LA120_0==AMPERSAND||LA120_0==CHARACTER_CONSTANT||LA120_0==ELLIPSIS||LA120_0==FLOATING_CONSTANT||(LA120_0 >= IDENTIFIER && LA120_0 <= IF)||LA120_0==INTEGER_CONSTANT||LA120_0==LCURLY||LA120_0==LPAREN||LA120_0==MINUSMINUS||LA120_0==NOT||LA120_0==PLUS||LA120_0==PLUSPLUS||LA120_0==SEMI||LA120_0==STAR||(LA120_0 >= STRING_LITERAL && LA120_0 <= SUB)||LA120_0==TILDE||(LA120_0 >= ALIGNOF && LA120_0 <= ASM)||LA120_0==BIG_O||(LA120_0 >= BREAK && LA120_0 <= CASE)||(LA120_0 >= CHOOSE && LA120_0 <= CIVLFOR)||(LA120_0 >= CONTINUE && LA120_0 <= DEFAULT)||LA120_0==DO||LA120_0==EXISTS||(LA120_0 >= FOR && LA120_0 <= GENERIC)||LA120_0==GOTO||LA120_0==HERE||LA120_0==PARFOR||(LA120_0 >= PPRAGMA && LA120_0 <= PROCNULL)||(LA120_0 >= RESULT && LA120_0 <= SELF)||(LA120_0 >= SIZEOF && LA120_0 <= SPAWN)||LA120_0==SWITCH||(LA120_0 >= WHEN && LA120_0 <= WHILE)||LA120_0==SUM) ) {
				alt120=1;
			}
			else if ( (LA120_0==INVARIANT) ) {
				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:1540: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();
					// 1540:4: -> ABSENT
					{
						adaptor.addChild(root_0, (Object)adaptor.create(ABSENT, "ABSENT"));
					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1541:4: INVARIANT LPAREN expression RPAREN
					{
					INVARIANT457=(Token)match(input,INVARIANT,FOLLOW_INVARIANT_in_invariant_opt9589); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_INVARIANT.add(INVARIANT457);

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

					pushFollow(FOLLOW_expression_in_invariant_opt9593);
					expression459=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression459.getTree());
					RPAREN460=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_invariant_opt9595); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN460);

					// 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();
					// 1542:3: -> ^( INVARIANT expression )
					{
						// CivlCParser.g:1542: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:1545: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 typeName461 =null;


		try {
			// CivlCParser.g:1546:2: ( typeName | -> ABSENT )
			int alt121=2;
			int LA121_0 = input.LA(1);
			if ( (LA121_0==ATOMIC||LA121_0==BOOL||LA121_0==CHAR||(LA121_0 >= COMPLEX && LA121_0 <= CONST)||(LA121_0 >= DOMAIN && LA121_0 <= DOUBLE)||LA121_0==ENUM||LA121_0==FLOAT||(LA121_0 >= INPUT && LA121_0 <= INT)||(LA121_0 >= LONG && LA121_0 <= MEM_TYPE)||LA121_0==OUTPUT||LA121_0==RANGE||LA121_0==REAL||LA121_0==RESTRICT||(LA121_0 >= SHORT && LA121_0 <= SIGNED)||LA121_0==STRUCT||LA121_0==TYPEOF||(LA121_0 >= UNION && LA121_0 <= VOLATILE)) ) {
				alt121=1;
			}
			else if ( (LA121_0==IDENTIFIER) ) {
				int LA121_2 = input.LA(2);
				if ( (LA121_2==IDENTIFIER||LA121_2==LPAREN||LA121_2==LSQUARE||LA121_2==STAR||LA121_2==ATOMIC||LA121_2==BOOL||LA121_2==CHAR||(LA121_2 >= COMPLEX && LA121_2 <= CONST)||(LA121_2 >= DOMAIN && LA121_2 <= DOUBLE)||LA121_2==ENUM||LA121_2==FLOAT||(LA121_2 >= INPUT && LA121_2 <= INT)||(LA121_2 >= LONG && LA121_2 <= MEM_TYPE)||LA121_2==OUTPUT||LA121_2==RANGE||LA121_2==REAL||LA121_2==RESTRICT||(LA121_2 >= SHORT && LA121_2 <= SIGNED)||LA121_2==STRUCT||LA121_2==TYPEOF||(LA121_2 >= UNION && LA121_2 <= VOLATILE)) ) {
					alt121=1;
				}
				else if ( ((LA121_2 >= COLON && LA121_2 <= COMMA)) ) {
					alt121=2;
				}

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

			}

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

			switch (alt121) {
				case 1 :
					// CivlCParser.g:1546:4: typeName
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_typeName_in_typeName_opt9616);
					typeName461=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, typeName461.getTree());

					}
					break;
				case 2 :
					// CivlCParser.g:1547: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();
					// 1547: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:1567: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 GOTO462=null;
		Token IDENTIFIER463=null;
		Token SEMI464=null;
		Token CONTINUE465=null;
		Token SEMI466=null;
		Token BREAK467=null;
		Token SEMI468=null;
		Token RETURN469=null;
		Token SEMI471=null;
		ParserRuleReturnScope expression_opt470 =null;

		Object GOTO462_tree=null;
		Object IDENTIFIER463_tree=null;
		Object SEMI464_tree=null;
		Object CONTINUE465_tree=null;
		Object SEMI466_tree=null;
		Object BREAK467_tree=null;
		Object SEMI468_tree=null;
		Object RETURN469_tree=null;
		Object SEMI471_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:1568:5: ( GOTO IDENTIFIER SEMI -> ^( GOTO IDENTIFIER SEMI ) | CONTINUE SEMI -> ^( CONTINUE SEMI ) | BREAK SEMI -> ^( BREAK SEMI ) | RETURN expression_opt SEMI -> ^( RETURN expression_opt SEMI ) )
			int alt122=4;
			switch ( input.LA(1) ) {
			case GOTO:
				{
				alt122=1;
				}
				break;
			case CONTINUE:
				{
				alt122=2;
				}
				break;
			case BREAK:
				{
				alt122=3;
				}
				break;
			case RETURN:
				{
				alt122=4;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 122, 0, input);
				throw nvae;
			}
			switch (alt122) {
				case 1 :
					// CivlCParser.g:1568:7: GOTO IDENTIFIER SEMI
					{
					GOTO462=(Token)match(input,GOTO,FOLLOW_GOTO_in_jumpStatement9639); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_GOTO.add(GOTO462);

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

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

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

					root_0 = (Object)adaptor.nil();
					// 1568:28: -> ^( GOTO IDENTIFIER SEMI )
					{
						// CivlCParser.g:1568: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:1569:7: CONTINUE SEMI
					{
					CONTINUE465=(Token)match(input,CONTINUE,FOLLOW_CONTINUE_in_jumpStatement9661); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_CONTINUE.add(CONTINUE465);

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

					// 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();
					// 1569:21: -> ^( CONTINUE SEMI )
					{
						// CivlCParser.g:1569: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:1570:7: BREAK SEMI
					{
					BREAK467=(Token)match(input,BREAK,FOLLOW_BREAK_in_jumpStatement9679); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_BREAK.add(BREAK467);

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

					// 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();
					// 1570:18: -> ^( BREAK SEMI )
					{
						// CivlCParser.g:1570: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:1571:7: RETURN expression_opt SEMI
					{
					RETURN469=(Token)match(input,RETURN,FOLLOW_RETURN_in_jumpStatement9697); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RETURN.add(RETURN469);

					pushFollow(FOLLOW_expression_opt_in_jumpStatement9699);
					expression_opt470=expression_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression_opt.add(expression_opt470.getTree());
					SEMI471=(Token)match(input,SEMI,FOLLOW_SEMI_in_jumpStatement9701); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SEMI.add(SEMI471);

					// AST REWRITE
					// elements: SEMI, RETURN, 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();
					// 1571:34: -> ^( RETURN expression_opt SEMI )
					{
						// CivlCParser.g:1571: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:1584: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 PPRAGMA472=null;
		Token IDENTIFIER473=null;
		Token NEWLINE474=null;
		Token PPRAGMA475=null;
		Token IDENTIFIER476=null;
		Token NEWLINE478=null;
		ParserRuleReturnScope inlineList477 =null;

		Object PPRAGMA472_tree=null;
		Object IDENTIFIER473_tree=null;
		Object NEWLINE474_tree=null;
		Object PPRAGMA475_tree=null;
		Object IDENTIFIER476_tree=null;
		Object NEWLINE478_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:1585:5: ( PPRAGMA IDENTIFIER NEWLINE -> ^( PPRAGMA IDENTIFIER ^( TOKEN_LIST ) NEWLINE ) | PPRAGMA IDENTIFIER inlineList NEWLINE -> ^( PPRAGMA IDENTIFIER ^( TOKEN_LIST inlineList ) NEWLINE ) )
			int alt123=2;
			int LA123_0 = input.LA(1);
			if ( (LA123_0==PPRAGMA) ) {
				int LA123_1 = input.LA(2);
				if ( (LA123_1==IDENTIFIER) ) {
					int LA123_2 = input.LA(3);
					if ( (LA123_2==NEWLINE) ) {
						alt123=1;
					}
					else if ( ((LA123_2 >= AMPERSAND && LA123_2 <= NEQ)||(LA123_2 >= NOT && LA123_2 <= TYPE_QUALIFIER_LIST)) ) {
						alt123=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("", 123, 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("", 123, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

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

			switch (alt123) {
				case 1 :
					// CivlCParser.g:1585:7: PPRAGMA IDENTIFIER NEWLINE
					{
					PPRAGMA472=(Token)match(input,PPRAGMA,FOLLOW_PPRAGMA_in_pragma9730); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_PPRAGMA.add(PPRAGMA472);

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

					NEWLINE474=(Token)match(input,NEWLINE,FOLLOW_NEWLINE_in_pragma9734); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_NEWLINE.add(NEWLINE474);

					// AST REWRITE
					// elements: PPRAGMA, IDENTIFIER, 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();
					// 1586:9: -> ^( PPRAGMA IDENTIFIER ^( TOKEN_LIST ) NEWLINE )
					{
						// CivlCParser.g:1586: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:1586: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:1587:7: PPRAGMA IDENTIFIER inlineList NEWLINE
					{
					PPRAGMA475=(Token)match(input,PPRAGMA,FOLLOW_PPRAGMA_in_pragma9764); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_PPRAGMA.add(PPRAGMA475);

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

					pushFollow(FOLLOW_inlineList_in_pragma9768);
					inlineList477=inlineList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_inlineList.add(inlineList477.getTree());
					NEWLINE478=(Token)match(input,NEWLINE,FOLLOW_NEWLINE_in_pragma9770); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_NEWLINE.add(NEWLINE478);

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

					root_0 = (Object)adaptor.nil();
					// 1588:9: -> ^( PPRAGMA IDENTIFIER ^( TOKEN_LIST inlineList ) NEWLINE )
					{
						// CivlCParser.g:1588: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:1588: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:1592: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 set479=null;

		Object set479_tree=null;

		try {
			// CivlCParser.g:1592:12: ( (~ NEWLINE )+ )
			// CivlCParser.g:1592:14: (~ NEWLINE )+
			{
			root_0 = (Object)adaptor.nil();


			// CivlCParser.g:1592:14: (~ NEWLINE )+
			int cnt124=0;
			loop124:
			while (true) {
				int alt124=2;
				int LA124_0 = input.LA(1);
				if ( ((LA124_0 >= AMPERSAND && LA124_0 <= NEQ)||(LA124_0 >= NOT && LA124_0 <= TYPE_QUALIFIER_LIST)) ) {
					alt124=1;
				}

				switch (alt124) {
				case 1 :
					// CivlCParser.g:
					{
					set479=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(set479));
						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 ( cnt124 >= 1 ) break loop124;
					if (state.backtracking>0) {state.failed=true; return retval;}
					EarlyExitException eee = new EarlyExitException(124, input);
					throw eee;
				}
				cnt124++;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException 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:1601: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_START480=null;
		Token NEWLINE481=null;
		Token NEWLINE483=null;
		Token ANNOTATION_START484=null;
		Token ANNOTATION_END485=null;
		Token ANNOTATION_START486=null;
		Token ANNOTATION_END488=null;
		ParserRuleReturnScope inlineList482 =null;
		ParserRuleReturnScope annotationBody487 =null;

		Object INLINE_ANNOTATION_START480_tree=null;
		Object NEWLINE481_tree=null;
		Object NEWLINE483_tree=null;
		Object ANNOTATION_START484_tree=null;
		Object ANNOTATION_END485_tree=null;
		Object ANNOTATION_START486_tree=null;
		Object ANNOTATION_END488_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:1602: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 alt126=3;
			int LA126_0 = input.LA(1);
			if ( (LA126_0==INLINE_ANNOTATION_START) ) {
				alt126=1;
			}
			else if ( (LA126_0==ANNOTATION_START) ) {
				int LA126_2 = input.LA(2);
				if ( (LA126_2==ANNOTATION_END) ) {
					alt126=2;
				}
				else if ( ((LA126_2 >= AMPERSAND && LA126_2 <= AND)||(LA126_2 >= ANNOTATION_START && LA126_2 <= TYPE_QUALIFIER_LIST)) ) {
					alt126=3;
				}

				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:1602:6: INLINE_ANNOTATION_START ( NEWLINE -> ^( ANNOTATION INLINE_ANNOTATION_START ^( TOKEN_LIST ) NEWLINE ) | inlineList NEWLINE -> ^( ANNOTATION INLINE_ANNOTATION_START ^( TOKEN_LIST inlineList ) NEWLINE ) )
					{
					INLINE_ANNOTATION_START480=(Token)match(input,INLINE_ANNOTATION_START,FOLLOW_INLINE_ANNOTATION_START_in_annotation9826); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_INLINE_ANNOTATION_START.add(INLINE_ANNOTATION_START480);

					// CivlCParser.g:1603:6: ( NEWLINE -> ^( ANNOTATION INLINE_ANNOTATION_START ^( TOKEN_LIST ) NEWLINE ) | inlineList NEWLINE -> ^( ANNOTATION INLINE_ANNOTATION_START ^( TOKEN_LIST inlineList ) NEWLINE ) )
					int alt125=2;
					int LA125_0 = input.LA(1);
					if ( (LA125_0==NEWLINE) ) {
						alt125=1;
					}
					else if ( ((LA125_0 >= AMPERSAND && LA125_0 <= NEQ)||(LA125_0 >= NOT && LA125_0 <= TYPE_QUALIFIER_LIST)) ) {
						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:1603:8: NEWLINE
							{
							NEWLINE481=(Token)match(input,NEWLINE,FOLLOW_NEWLINE_in_annotation9835); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_NEWLINE.add(NEWLINE481);

							// 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();
							// 1604:8: -> ^( ANNOTATION INLINE_ANNOTATION_START ^( TOKEN_LIST ) NEWLINE )
							{
								// CivlCParser.g:1604: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:1604: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:1605:8: inlineList NEWLINE
							{
							pushFollow(FOLLOW_inlineList_in_annotation9865);
							inlineList482=inlineList();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_inlineList.add(inlineList482.getTree());
							NEWLINE483=(Token)match(input,NEWLINE,FOLLOW_NEWLINE_in_annotation9867); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_NEWLINE.add(NEWLINE483);

							// AST REWRITE
							// elements: inlineList, 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();
							// 1606:8: -> ^( ANNOTATION INLINE_ANNOTATION_START ^( TOKEN_LIST inlineList ) NEWLINE )
							{
								// CivlCParser.g:1606: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:1606: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:1608:6: ANNOTATION_START ANNOTATION_END
					{
					ANNOTATION_START484=(Token)match(input,ANNOTATION_START,FOLLOW_ANNOTATION_START_in_annotation9904); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ANNOTATION_START.add(ANNOTATION_START484);

					ANNOTATION_END485=(Token)match(input,ANNOTATION_END,FOLLOW_ANNOTATION_END_in_annotation9906); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ANNOTATION_END.add(ANNOTATION_END485);

					// 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();
					// 1609:8: -> ^( ANNOTATION ANNOTATION_START ^( TOKEN_LIST ) ANNOTATION_END )
					{
						// CivlCParser.g:1609: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:1609: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:1610:6: ANNOTATION_START annotationBody ANNOTATION_END
					{
					ANNOTATION_START486=(Token)match(input,ANNOTATION_START,FOLLOW_ANNOTATION_START_in_annotation9934); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ANNOTATION_START.add(ANNOTATION_START486);

					pushFollow(FOLLOW_annotationBody_in_annotation9936);
					annotationBody487=annotationBody();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_annotationBody.add(annotationBody487.getTree());
					ANNOTATION_END488=(Token)match(input,ANNOTATION_END,FOLLOW_ANNOTATION_END_in_annotation9938); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ANNOTATION_END.add(ANNOTATION_END488);

					// AST REWRITE
					// elements: ANNOTATION_END, ANNOTATION_START, 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();
					// 1611:8: -> ^( ANNOTATION ANNOTATION_START ^( TOKEN_LIST annotationBody ) ANNOTATION_END )
					{
						// CivlCParser.g:1611: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:1611: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:1614: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 set489=null;

		Object set489_tree=null;

		try {
			// CivlCParser.g:1614:16: ( (~ ANNOTATION_END )+ )
			// CivlCParser.g:1614:18: (~ ANNOTATION_END )+
			{
			root_0 = (Object)adaptor.nil();


			// CivlCParser.g:1614:18: (~ ANNOTATION_END )+
			int cnt127=0;
			loop127:
			while (true) {
				int alt127=2;
				int LA127_0 = input.LA(1);
				if ( ((LA127_0 >= AMPERSAND && LA127_0 <= AND)||(LA127_0 >= ANNOTATION_START && LA127_0 <= TYPE_QUALIFIER_LIST)) ) {
					alt127=1;
				}

				switch (alt127) {
				case 1 :
					// CivlCParser.g:
					{
					set489=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(set489));
						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 ( cnt127 >= 1 ) break loop127;
					if (state.backtracking>0) {state.failed=true; return retval;}
					EarlyExitException eee = new EarlyExitException(127, input);
					throw eee;
				}
				cnt127++;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException 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:1623: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 RUN490=null;
		ParserRuleReturnScope statement491 =null;

		Object RUN490_tree=null;
		RewriteRuleTokenStream stream_RUN=new RewriteRuleTokenStream(adaptor,"token RUN");
		RewriteRuleSubtreeStream stream_statement=new RewriteRuleSubtreeStream(adaptor,"rule statement");

		try {
			// CivlCParser.g:1624:5: ( RUN statement -> ^( RUN statement ) )
			// CivlCParser.g:1624:7: RUN statement
			{
			RUN490=(Token)match(input,RUN,FOLLOW_RUN_in_runStatement9992); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RUN.add(RUN490);

			pushFollow(FOLLOW_statement_in_runStatement9994);
			statement491=statement();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_statement.add(statement491.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();
			// 1624:21: -> ^( RUN statement )
			{
				// CivlCParser.g:1624: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 balancedToken_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "balancedToken"
	// CivlCParser.g:1627: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 set492=null;
		Token LPAREN493=null;
		Token RPAREN495=null;
		ParserRuleReturnScope balancedToken494 =null;

		Object set492_tree=null;
		Object LPAREN493_tree=null;
		Object RPAREN495_tree=null;

		try {
			// CivlCParser.g:1628:2: (~ ( LPAREN | RPAREN ) | LPAREN ( balancedToken )* RPAREN )
			int alt129=2;
			int LA129_0 = input.LA(1);
			if ( ((LA129_0 >= AMPERSAND && LA129_0 <= LINE)||(LA129_0 >= LSLIST && LA129_0 <= REXCON)||(LA129_0 >= RSLIST && LA129_0 <= TYPE_QUALIFIER_LIST)) ) {
				alt129=1;
			}
			else if ( (LA129_0==LPAREN) ) {
				alt129=2;
			}

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

			switch (alt129) {
				case 1 :
					// CivlCParser.g:1628:4: ~ ( LPAREN | RPAREN )
					{
					root_0 = (Object)adaptor.nil();


					set492=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(set492));
						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:1629:4: LPAREN ( balancedToken )* RPAREN
					{
					root_0 = (Object)adaptor.nil();


					LPAREN493=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_balancedToken10028); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					LPAREN493_tree = (Object)adaptor.create(LPAREN493);
					adaptor.addChild(root_0, LPAREN493_tree);
					}

					// CivlCParser.g:1629:11: ( balancedToken )*
					loop128:
					while (true) {
						int alt128=2;
						int LA128_0 = input.LA(1);
						if ( ((LA128_0 >= AMPERSAND && LA128_0 <= REXCON)||(LA128_0 >= RSLIST && LA128_0 <= TYPE_QUALIFIER_LIST)) ) {
							alt128=1;
						}

						switch (alt128) {
						case 1 :
							// CivlCParser.g:1629:11: balancedToken
							{
							pushFollow(FOLLOW_balancedToken_in_balancedToken10030);
							balancedToken494=balancedToken();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) adaptor.addChild(root_0, balancedToken494.getTree());

							}
							break;

						default :
							break loop128;
						}
					}

					RPAREN495=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_balancedToken10033); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					RPAREN495_tree = (Object)adaptor.create(RPAREN495);
					adaptor.addChild(root_0, RPAREN495_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:1632: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 ASM496=null;
		Token VOLATILE497=null;
		Token GOTO498=null;
		Token LPAREN499=null;
		Token RPAREN501=null;
		Token SEMI502=null;
		ParserRuleReturnScope balancedToken500 =null;

		Object ASM496_tree=null;
		Object VOLATILE497_tree=null;
		Object GOTO498_tree=null;
		Object LPAREN499_tree=null;
		Object RPAREN501_tree=null;
		Object SEMI502_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:1633:2: ( ASM ( VOLATILE )? ( GOTO )? LPAREN ( balancedToken )* RPAREN SEMI -> ^( ASM ( VOLATILE )? ( GOTO )? ^( TOKEN_LIST ( balancedToken )* ) ) )
			// CivlCParser.g:1633:4: ASM ( VOLATILE )? ( GOTO )? LPAREN ( balancedToken )* RPAREN SEMI
			{
			ASM496=(Token)match(input,ASM,FOLLOW_ASM_in_asmStatement10044); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ASM.add(ASM496);

			// CivlCParser.g:1633:8: ( VOLATILE )?
			int alt130=2;
			int LA130_0 = input.LA(1);
			if ( (LA130_0==VOLATILE) ) {
				alt130=1;
			}
			switch (alt130) {
				case 1 :
					// CivlCParser.g:1633:8: VOLATILE
					{
					VOLATILE497=(Token)match(input,VOLATILE,FOLLOW_VOLATILE_in_asmStatement10046); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_VOLATILE.add(VOLATILE497);

					}
					break;

			}

			// CivlCParser.g:1633:18: ( GOTO )?
			int alt131=2;
			int LA131_0 = input.LA(1);
			if ( (LA131_0==GOTO) ) {
				alt131=1;
			}
			switch (alt131) {
				case 1 :
					// CivlCParser.g:1633:18: GOTO
					{
					GOTO498=(Token)match(input,GOTO,FOLLOW_GOTO_in_asmStatement10049); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_GOTO.add(GOTO498);

					}
					break;

			}

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

			// CivlCParser.g:1634:4: ( balancedToken )*
			loop132:
			while (true) {
				int alt132=2;
				int LA132_0 = input.LA(1);
				if ( ((LA132_0 >= AMPERSAND && LA132_0 <= REXCON)||(LA132_0 >= RSLIST && LA132_0 <= TYPE_QUALIFIER_LIST)) ) {
					alt132=1;
				}

				switch (alt132) {
				case 1 :
					// CivlCParser.g:1634:4: balancedToken
					{
					pushFollow(FOLLOW_balancedToken_in_asmStatement10057);
					balancedToken500=balancedToken();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_balancedToken.add(balancedToken500.getTree());
					}
					break;

				default :
					break loop132;
				}
			}

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

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

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

			root_0 = (Object)adaptor.nil();
			// 1636:4: -> ^( ASM ( VOLATILE )? ( GOTO )? ^( TOKEN_LIST ( balancedToken )* ) )
			{
				// CivlCParser.g:1636: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:1636:13: ( VOLATILE )?
				if ( stream_VOLATILE.hasNext() ) {
					adaptor.addChild(root_1, stream_VOLATILE.nextNode());
				}
				stream_VOLATILE.reset();

				// CivlCParser.g:1636:23: ( GOTO )?
				if ( stream_GOTO.hasNext() ) {
					adaptor.addChild(root_1, stream_GOTO.nextNode());
				}
				stream_GOTO.reset();

				// CivlCParser.g:1636: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:1636: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:1647: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 WHEN503=null;
		Token LPAREN504=null;
		Token RPAREN506=null;
		ParserRuleReturnScope expression505 =null;
		ParserRuleReturnScope statement507 =null;

		Object WHEN503_tree=null;
		Object LPAREN504_tree=null;
		Object RPAREN506_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:1648:2: ( WHEN LPAREN expression RPAREN statement -> ^( WHEN expression statement ) )
			// CivlCParser.g:1648:4: WHEN LPAREN expression RPAREN statement
			{
			WHEN503=(Token)match(input,WHEN,FOLLOW_WHEN_in_whenStatement10100); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_WHEN.add(WHEN503);

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

			pushFollow(FOLLOW_expression_in_whenStatement10104);
			expression505=expression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_expression.add(expression505.getTree());
			RPAREN506=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_whenStatement10106); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN506);

			pushFollow(FOLLOW_statement_in_whenStatement10108);
			statement507=statement();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_statement.add(statement507.getTree());
			// AST REWRITE
			// elements: statement, WHEN, 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();
			// 1649:3: -> ^( WHEN expression statement )
			{
				// CivlCParser.g:1649: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:1658: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 CHOOSE508=null;
		Token LCURLY509=null;
		Token RCURLY511=null;
		ParserRuleReturnScope statement510 =null;

		Object CHOOSE508_tree=null;
		Object LCURLY509_tree=null;
		Object RCURLY511_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:1659:2: ( CHOOSE LCURLY ( statement )+ RCURLY -> ^( CHOOSE ( statement )+ ) )
			// CivlCParser.g:1659:4: CHOOSE LCURLY ( statement )+ RCURLY
			{
			CHOOSE508=(Token)match(input,CHOOSE,FOLLOW_CHOOSE_in_chooseStatement10133); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_CHOOSE.add(CHOOSE508);

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

			// CivlCParser.g:1659:18: ( statement )+
			int cnt133=0;
			loop133:
			while (true) {
				int alt133=2;
				int LA133_0 = input.LA(1);
				if ( (LA133_0==AMPERSAND||LA133_0==CHARACTER_CONSTANT||LA133_0==ELLIPSIS||LA133_0==FLOATING_CONSTANT||(LA133_0 >= IDENTIFIER && LA133_0 <= IF)||LA133_0==INTEGER_CONSTANT||LA133_0==LCURLY||LA133_0==LPAREN||LA133_0==MINUSMINUS||LA133_0==NOT||LA133_0==PLUS||LA133_0==PLUSPLUS||LA133_0==SEMI||LA133_0==STAR||(LA133_0 >= STRING_LITERAL && LA133_0 <= SUB)||LA133_0==TILDE||(LA133_0 >= ALIGNOF && LA133_0 <= ASM)||LA133_0==BIG_O||(LA133_0 >= BREAK && LA133_0 <= CASE)||(LA133_0 >= CHOOSE && LA133_0 <= CIVLFOR)||(LA133_0 >= CONTINUE && LA133_0 <= DEFAULT)||LA133_0==DO||LA133_0==EXISTS||(LA133_0 >= FOR && LA133_0 <= GENERIC)||LA133_0==GOTO||LA133_0==HERE||LA133_0==PARFOR||LA133_0==PROCNULL||(LA133_0 >= RESULT && LA133_0 <= SELF)||(LA133_0 >= SIZEOF && LA133_0 <= SPAWN)||LA133_0==SWITCH||(LA133_0 >= WHEN && LA133_0 <= WHILE)||LA133_0==SUM) ) {
					alt133=1;
				}

				switch (alt133) {
				case 1 :
					// CivlCParser.g:1659:18: statement
					{
					pushFollow(FOLLOW_statement_in_chooseStatement10137);
					statement510=statement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statement.add(statement510.getTree());
					}
					break;

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

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

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

			root_0 = (Object)adaptor.nil();
			// 1659:36: -> ^( CHOOSE ( statement )+ )
			{
				// CivlCParser.g:1659: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:1668: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 CIVLATOMIC512=null;
		ParserRuleReturnScope s =null;

		Object CIVLATOMIC512_tree=null;
		RewriteRuleTokenStream stream_CIVLATOMIC=new RewriteRuleTokenStream(adaptor,"token CIVLATOMIC");
		RewriteRuleSubtreeStream stream_statementWithScope=new RewriteRuleSubtreeStream(adaptor,"rule statementWithScope");

		try {
			// CivlCParser.g:1669:2: ( CIVLATOMIC s= statementWithScope -> ^( CIVLATOMIC $s) )
			// CivlCParser.g:1669:4: CIVLATOMIC s= statementWithScope
			{
			CIVLATOMIC512=(Token)match(input,CIVLATOMIC,FOLLOW_CIVLATOMIC_in_atomicStatement10162); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_CIVLATOMIC.add(CIVLATOMIC512);

			pushFollow(FOLLOW_statementWithScope_in_atomicStatement10166);
			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();
			// 1669:36: -> ^( CIVLATOMIC $s)
			{
				// CivlCParser.g:1669: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:1681: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 declarator513 =null;
		ParserRuleReturnScope contract514 =null;
		ParserRuleReturnScope declarationList_opt515 =null;
		ParserRuleReturnScope compoundStatement516 =null;
		ParserRuleReturnScope declarationSpecifiers517 =null;
		ParserRuleReturnScope declarator518 =null;
		ParserRuleReturnScope contract519 =null;
		ParserRuleReturnScope declarationList_opt520 =null;
		ParserRuleReturnScope compoundStatement521 =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:1691: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 alt134=2;
			switch ( input.LA(1) ) {
			case IDENTIFIER:
				{
				int LA134_1 = input.LA(2);
				if ( (!(((isTypeName(input.LT(1).getText()))))) ) {
					alt134=1;
				}
				else if ( ((isTypeName(input.LT(1).getText()))) ) {
					alt134=2;
				}

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

				}
				break;
			case LPAREN:
			case STAR:
				{
				alt134=1;
				}
				break;
			case ABSTRACT:
			case ALIGNAS:
			case ATOMIC:
			case AUTO:
			case BOOL:
			case CHAR:
			case COMPLEX:
			case CONST:
			case DEVICE:
			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:
				{
				alt134=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 134, 0, input);
				throw nvae;
			}
			switch (alt134) {
				case 1 :
					// CivlCParser.g:1691:4: declarator contract declarationList_opt compoundStatement
					{
					pushFollow(FOLLOW_declarator_in_functionDefinition10204);
					declarator513=declarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declarator.add(declarator513.getTree());
					pushFollow(FOLLOW_contract_in_functionDefinition10209);
					contract514=contract();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_contract.add(contract514.getTree());
					pushFollow(FOLLOW_declarationList_opt_in_functionDefinition10214);
					declarationList_opt515=declarationList_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declarationList_opt.add(declarationList_opt515.getTree());
					pushFollow(FOLLOW_compoundStatement_in_functionDefinition10219);
					compoundStatement516=compoundStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_compoundStatement.add(compoundStatement516.getTree());
					// AST REWRITE
					// elements: declarator, compoundStatement, contract, declarationList_opt
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1695:4: -> ^( FUNCTION_DEFINITION ^( DECLARATION_SPECIFIERS ) declarator declarationList_opt compoundStatement contract )
					{
						// CivlCParser.g:1695: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:1695: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:1698:7: declarationSpecifiers declarator contract declarationList_opt compoundStatement
					{
					pushFollow(FOLLOW_declarationSpecifiers_in_functionDefinition10264);
					declarationSpecifiers517=declarationSpecifiers();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declarationSpecifiers.add(declarationSpecifiers517.getTree());
					pushFollow(FOLLOW_declarator_in_functionDefinition10269);
					declarator518=declarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declarator.add(declarator518.getTree());
					pushFollow(FOLLOW_contract_in_functionDefinition10274);
					contract519=contract();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_contract.add(contract519.getTree());
					pushFollow(FOLLOW_declarationList_opt_in_functionDefinition10279);
					declarationList_opt520=declarationList_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declarationList_opt.add(declarationList_opt520.getTree());
					pushFollow(FOLLOW_compoundStatement_in_functionDefinition10284);
					compoundStatement521=compoundStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_compoundStatement.add(compoundStatement521.getTree());
					// AST REWRITE
					// elements: declarationSpecifiers, declarator, compoundStatement, declarationList_opt, contract
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1703:4: -> ^( FUNCTION_DEFINITION declarationSpecifiers declarator declarationList_opt compoundStatement contract )
					{
						// CivlCParser.g:1703: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:1713: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 declaration522 =null;

		RewriteRuleSubtreeStream stream_declaration=new RewriteRuleSubtreeStream(adaptor,"rule declaration");

		try {
			// CivlCParser.g:1714:2: ( ( declaration )* -> ^( DECLARATION_LIST ( declaration )* ) )
			// CivlCParser.g:1714:4: ( declaration )*
			{
			// CivlCParser.g:1714:4: ( declaration )*
			loop135:
			while (true) {
				int alt135=2;
				int LA135_0 = input.LA(1);
				if ( (LA135_0==IDENTIFIER||(LA135_0 >= ABSTRACT && LA135_0 <= ALIGNAS)||(LA135_0 >= ATOMIC && LA135_0 <= AUTO)||LA135_0==BOOL||LA135_0==CHAR||(LA135_0 >= COMPLEX && LA135_0 <= CONST)||LA135_0==DEVICE||(LA135_0 >= DOMAIN && LA135_0 <= DOUBLE)||LA135_0==ENUM||(LA135_0 >= EXTERN && LA135_0 <= FATOMIC)||LA135_0==FLOAT||LA135_0==GLOBAL||(LA135_0 >= INLINE && LA135_0 <= INT)||(LA135_0 >= LONG && LA135_0 <= NORETURN)||LA135_0==OUTPUT||(LA135_0 >= PURE && LA135_0 <= RANGE)||(LA135_0 >= REAL && LA135_0 <= REGISTER)||LA135_0==RESTRICT||(LA135_0 >= SHARED && LA135_0 <= SIGNED)||(LA135_0 >= STATE_F && LA135_0 <= STRUCT)||LA135_0==SYSTEM||(LA135_0 >= THREADLOCAL && LA135_0 <= TYPEOF)||(LA135_0 >= UNION && LA135_0 <= VOLATILE)) ) {
					alt135=1;
				}

				switch (alt135) {
				case 1 :
					// CivlCParser.g:1714:4: declaration
					{
					pushFollow(FOLLOW_declaration_in_declarationList_opt10333);
					declaration522=declaration();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declaration.add(declaration522.getTree());
					}
					break;

				default :
					break loop135;
				}
			}

			// 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();
			// 1714:17: -> ^( DECLARATION_LIST ( declaration )* )
			{
				// CivlCParser.g:1714: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:1714: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:1722: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 separationLogicItem523 =null;
		ParserRuleReturnScope porItem524 =null;


		try {
			// CivlCParser.g:1723:2: ( separationLogicItem | porItem )
			int alt136=2;
			int LA136_0 = input.LA(1);
			if ( (LA136_0==ENSURES||LA136_0==REQUIRES) ) {
				alt136=1;
			}
			else if ( (LA136_0==ASSIGNS||LA136_0==DEPENDS||LA136_0==GUARD||LA136_0==READS) ) {
				alt136=2;
			}

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

			switch (alt136) {
				case 1 :
					// CivlCParser.g:1723:4: separationLogicItem
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_separationLogicItem_in_contractItem10356);
					separationLogicItem523=separationLogicItem();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, separationLogicItem523.getTree());

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


					pushFollow(FOLLOW_porItem_in_contractItem10364);
					porItem524=porItem();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, porItem524.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:1727: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 REQUIRES525=null;
		Token LCURLY526=null;
		Token RCURLY528=null;
		Token ENSURES529=null;
		Token LCURLY530=null;
		Token RCURLY532=null;
		ParserRuleReturnScope expression527 =null;
		ParserRuleReturnScope expression531 =null;

		Object REQUIRES525_tree=null;
		Object LCURLY526_tree=null;
		Object RCURLY528_tree=null;
		Object ENSURES529_tree=null;
		Object LCURLY530_tree=null;
		Object RCURLY532_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:1728:5: ( REQUIRES LCURLY expression RCURLY -> ^( REQUIRES expression RCURLY ) | ENSURES LCURLY expression RCURLY -> ^( ENSURES expression RCURLY ) )
			int alt137=2;
			int LA137_0 = input.LA(1);
			if ( (LA137_0==REQUIRES) ) {
				alt137=1;
			}
			else if ( (LA137_0==ENSURES) ) {
				alt137=2;
			}

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

			switch (alt137) {
				case 1 :
					// CivlCParser.g:1729:7: REQUIRES LCURLY expression RCURLY
					{
					REQUIRES525=(Token)match(input,REQUIRES,FOLLOW_REQUIRES_in_separationLogicItem10384); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_REQUIRES.add(REQUIRES525);

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

					pushFollow(FOLLOW_expression_in_separationLogicItem10388);
					expression527=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression527.getTree());
					RCURLY528=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_separationLogicItem10390); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY528);

					// AST REWRITE
					// elements: REQUIRES, 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();
					// 1729:41: -> ^( REQUIRES expression RCURLY )
					{
						// CivlCParser.g:1729: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:1730:4: ENSURES LCURLY expression RCURLY
					{
					ENSURES529=(Token)match(input,ENSURES,FOLLOW_ENSURES_in_separationLogicItem10405); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ENSURES.add(ENSURES529);

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

					pushFollow(FOLLOW_expression_in_separationLogicItem10409);
					expression531=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression531.getTree());
					RCURLY532=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_separationLogicItem10411); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY532);

					// AST REWRITE
					// elements: RCURLY, ENSURES, 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();
					// 1730:37: -> ^( ENSURES expression RCURLY )
					{
						// CivlCParser.g:1730: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:1733: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 DEPENDS533=null;
		Token LSQUARE534=null;
		Token RSQUARE536=null;
		Token LCURLY537=null;
		Token RCURLY539=null;
		Token GUARD540=null;
		Token LSQUARE541=null;
		Token RSQUARE543=null;
		Token LCURLY544=null;
		Token RCURLY546=null;
		Token ASSIGNS547=null;
		Token LSQUARE548=null;
		Token RSQUARE550=null;
		Token LCURLY551=null;
		Token RCURLY553=null;
		Token READS554=null;
		Token LSQUARE555=null;
		Token RSQUARE557=null;
		Token LCURLY558=null;
		Token RCURLY560=null;
		ParserRuleReturnScope expression535 =null;
		ParserRuleReturnScope argumentExpressionList538 =null;
		ParserRuleReturnScope expression542 =null;
		ParserRuleReturnScope argumentExpressionList545 =null;
		ParserRuleReturnScope expression549 =null;
		ParserRuleReturnScope argumentExpressionList552 =null;
		ParserRuleReturnScope expression556 =null;
		ParserRuleReturnScope argumentExpressionList559 =null;

		Object DEPENDS533_tree=null;
		Object LSQUARE534_tree=null;
		Object RSQUARE536_tree=null;
		Object LCURLY537_tree=null;
		Object RCURLY539_tree=null;
		Object GUARD540_tree=null;
		Object LSQUARE541_tree=null;
		Object RSQUARE543_tree=null;
		Object LCURLY544_tree=null;
		Object RCURLY546_tree=null;
		Object ASSIGNS547_tree=null;
		Object LSQUARE548_tree=null;
		Object RSQUARE550_tree=null;
		Object LCURLY551_tree=null;
		Object RCURLY553_tree=null;
		Object READS554_tree=null;
		Object LSQUARE555_tree=null;
		Object RSQUARE557_tree=null;
		Object LCURLY558_tree=null;
		Object RCURLY560_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:1734: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 alt142=4;
			switch ( input.LA(1) ) {
			case DEPENDS:
				{
				alt142=1;
				}
				break;
			case GUARD:
				{
				alt142=2;
				}
				break;
			case ASSIGNS:
				{
				alt142=3;
				}
				break;
			case READS:
				{
				alt142=4;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 142, 0, input);
				throw nvae;
			}
			switch (alt142) {
				case 1 :
					// CivlCParser.g:1735:7: DEPENDS ( LSQUARE expression RSQUARE )? LCURLY argumentExpressionList RCURLY
					{
					DEPENDS533=(Token)match(input,DEPENDS,FOLLOW_DEPENDS_in_porItem10444); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_DEPENDS.add(DEPENDS533);

					// CivlCParser.g:1735:15: ( LSQUARE expression RSQUARE )?
					int alt138=2;
					int LA138_0 = input.LA(1);
					if ( (LA138_0==LSQUARE) ) {
						alt138=1;
					}
					switch (alt138) {
						case 1 :
							// CivlCParser.g:1735:16: LSQUARE expression RSQUARE
							{
							LSQUARE534=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_porItem10447); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE534);

							pushFollow(FOLLOW_expression_in_porItem10449);
							expression535=expression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression.add(expression535.getTree());
							RSQUARE536=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_porItem10451); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE536);

							}
							break;

					}

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

					pushFollow(FOLLOW_argumentExpressionList_in_porItem10457);
					argumentExpressionList538=argumentExpressionList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_argumentExpressionList.add(argumentExpressionList538.getTree());
					RCURLY539=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_porItem10459); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY539);

					// AST REWRITE
					// elements: argumentExpressionList, DEPENDS, 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();
					// 1736:7: -> ^( DEPENDS ( expression )? argumentExpressionList )
					{
						// CivlCParser.g:1736:10: ^( DEPENDS ( expression )? argumentExpressionList )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_DEPENDS.nextNode(), root_1);
						// CivlCParser.g:1736: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:1737:7: GUARD ( LSQUARE expression RSQUARE )? LCURLY argumentExpressionList RCURLY
					{
					GUARD540=(Token)match(input,GUARD,FOLLOW_GUARD_in_porItem10484); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_GUARD.add(GUARD540);

					// CivlCParser.g:1737:13: ( LSQUARE expression RSQUARE )?
					int alt139=2;
					int LA139_0 = input.LA(1);
					if ( (LA139_0==LSQUARE) ) {
						alt139=1;
					}
					switch (alt139) {
						case 1 :
							// CivlCParser.g:1737:14: LSQUARE expression RSQUARE
							{
							LSQUARE541=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_porItem10487); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE541);

							pushFollow(FOLLOW_expression_in_porItem10489);
							expression542=expression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression.add(expression542.getTree());
							RSQUARE543=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_porItem10491); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE543);

							}
							break;

					}

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

					pushFollow(FOLLOW_argumentExpressionList_in_porItem10497);
					argumentExpressionList545=argumentExpressionList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_argumentExpressionList.add(argumentExpressionList545.getTree());
					RCURLY546=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_porItem10499); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY546);

					// AST REWRITE
					// elements: GUARD, argumentExpressionList, 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();
					// 1738:7: -> ^( GUARD ( expression )? argumentExpressionList )
					{
						// CivlCParser.g:1738:10: ^( GUARD ( expression )? argumentExpressionList )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_GUARD.nextNode(), root_1);
						// CivlCParser.g:1738: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:1739:7: ASSIGNS ( LSQUARE expression RSQUARE )? LCURLY argumentExpressionList RCURLY
					{
					ASSIGNS547=(Token)match(input,ASSIGNS,FOLLOW_ASSIGNS_in_porItem10524); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ASSIGNS.add(ASSIGNS547);

					// CivlCParser.g:1739:15: ( LSQUARE expression RSQUARE )?
					int alt140=2;
					int LA140_0 = input.LA(1);
					if ( (LA140_0==LSQUARE) ) {
						alt140=1;
					}
					switch (alt140) {
						case 1 :
							// CivlCParser.g:1739:16: LSQUARE expression RSQUARE
							{
							LSQUARE548=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_porItem10527); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE548);

							pushFollow(FOLLOW_expression_in_porItem10529);
							expression549=expression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression.add(expression549.getTree());
							RSQUARE550=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_porItem10531); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE550);

							}
							break;

					}

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

					pushFollow(FOLLOW_argumentExpressionList_in_porItem10537);
					argumentExpressionList552=argumentExpressionList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_argumentExpressionList.add(argumentExpressionList552.getTree());
					RCURLY553=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_porItem10539); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY553);

					// 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();
					// 1740:7: -> ^( ASSIGNS ( expression )? argumentExpressionList )
					{
						// CivlCParser.g:1740:10: ^( ASSIGNS ( expression )? argumentExpressionList )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_ASSIGNS.nextNode(), root_1);
						// CivlCParser.g:1740: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:1741:7: READS ( LSQUARE expression RSQUARE )? LCURLY argumentExpressionList RCURLY
					{
					READS554=(Token)match(input,READS,FOLLOW_READS_in_porItem10564); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_READS.add(READS554);

					// CivlCParser.g:1741:13: ( LSQUARE expression RSQUARE )?
					int alt141=2;
					int LA141_0 = input.LA(1);
					if ( (LA141_0==LSQUARE) ) {
						alt141=1;
					}
					switch (alt141) {
						case 1 :
							// CivlCParser.g:1741:14: LSQUARE expression RSQUARE
							{
							LSQUARE555=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_porItem10567); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE555);

							pushFollow(FOLLOW_expression_in_porItem10569);
							expression556=expression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression.add(expression556.getTree());
							RSQUARE557=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_porItem10571); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE557);

							}
							break;

					}

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

					pushFollow(FOLLOW_argumentExpressionList_in_porItem10577);
					argumentExpressionList559=argumentExpressionList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_argumentExpressionList.add(argumentExpressionList559.getTree());
					RCURLY560=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_porItem10579); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY560);

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

					root_0 = (Object)adaptor.nil();
					// 1742:7: -> ^( READS ( expression )? argumentExpressionList )
					{
						// CivlCParser.g:1742:10: ^( READS ( expression )? argumentExpressionList )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_READS.nextNode(), root_1);
						// CivlCParser.g:1742: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:1751: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 contractItem561 =null;

		RewriteRuleSubtreeStream stream_contractItem=new RewriteRuleSubtreeStream(adaptor,"rule contractItem");

		try {
			// CivlCParser.g:1752:2: ( ( contractItem )* -> ^( CONTRACT ( contractItem )* ) )
			// CivlCParser.g:1752:4: ( contractItem )*
			{
			// CivlCParser.g:1752:4: ( contractItem )*
			loop143:
			while (true) {
				int alt143=2;
				int LA143_0 = input.LA(1);
				if ( (LA143_0==ASSIGNS||LA143_0==DEPENDS||LA143_0==ENSURES||LA143_0==GUARD||LA143_0==READS||LA143_0==REQUIRES) ) {
					alt143=1;
				}

				switch (alt143) {
				case 1 :
					// CivlCParser.g:1752:4: contractItem
					{
					pushFollow(FOLLOW_contractItem_in_contract10613);
					contractItem561=contractItem();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_contractItem.add(contractItem561.getTree());
					}
					break;

				default :
					break loop143;
				}
			}

			// 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();
			// 1752:18: -> ^( CONTRACT ( contractItem )* )
			{
				// CivlCParser.g:1752:21: ^( CONTRACT ( contractItem )* )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(CONTRACT, "CONTRACT"), root_1);
				// CivlCParser.g:1752: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:1759: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 blockItem562 =null;



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

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


			pushFollow(FOLLOW_blockItem_in_blockItemWithScope10647);
			blockItem562=blockItem();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) adaptor.addChild(root_0, blockItem562.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:1771: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 functionDefinition563 =null;
		ParserRuleReturnScope functionDefinition564 =null;
		ParserRuleReturnScope declaration565 =null;
		ParserRuleReturnScope pragma566 =null;
		ParserRuleReturnScope annotation567 =null;
		ParserRuleReturnScope statement568 =null;


		try {
			// CivlCParser.g:1772:2: ( ( declarator contract declarationList_opt LCURLY )=> functionDefinition | ( declarationSpecifiers declarator contract declarationList_opt LCURLY )=> functionDefinition | declaration | pragma | annotation | statement )
			int alt144=6;
			alt144 = dfa144.predict(input);
			switch (alt144) {
				case 1 :
					// CivlCParser.g:1772:4: ( declarator contract declarationList_opt LCURLY )=> functionDefinition
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_functionDefinition_in_blockItem10672);
					functionDefinition563=functionDefinition();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, functionDefinition563.getTree());

					}
					break;
				case 2 :
					// CivlCParser.g:1774:4: ( declarationSpecifiers declarator contract declarationList_opt LCURLY )=> functionDefinition
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_functionDefinition_in_blockItem10693);
					functionDefinition564=functionDefinition();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, functionDefinition564.getTree());

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


					pushFollow(FOLLOW_declaration_in_blockItem10698);
					declaration565=declaration();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, declaration565.getTree());

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


					pushFollow(FOLLOW_pragma_in_blockItem10703);
					pragma566=pragma();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, pragma566.getTree());

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


					pushFollow(FOLLOW_annotation_in_blockItem10708);
					annotation567=annotation();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, annotation567.getTree());

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


					pushFollow(FOLLOW_statement_in_blockItem10713);
					statement568=statement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, statement568.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:1794: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 EOF570=null;
		ParserRuleReturnScope blockItem569 =null;

		Object EOF570_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:1804:2: ( ( blockItem )* EOF -> ^( TRANSLATION_UNIT ( blockItem )* ) )
			// CivlCParser.g:1804:4: ( blockItem )* EOF
			{
			// CivlCParser.g:1804:4: ( blockItem )*
			loop145:
			while (true) {
				int alt145=2;
				int LA145_0 = input.LA(1);
				if ( (LA145_0==AMPERSAND||LA145_0==ANNOTATION_START||LA145_0==CHARACTER_CONSTANT||LA145_0==ELLIPSIS||LA145_0==FLOATING_CONSTANT||(LA145_0 >= IDENTIFIER && LA145_0 <= IF)||LA145_0==INLINE_ANNOTATION_START||LA145_0==INTEGER_CONSTANT||LA145_0==LCURLY||LA145_0==LPAREN||LA145_0==MINUSMINUS||LA145_0==NOT||LA145_0==PLUS||LA145_0==PLUSPLUS||LA145_0==SEMI||LA145_0==STAR||(LA145_0 >= STRING_LITERAL && LA145_0 <= SUB)||LA145_0==TILDE||(LA145_0 >= ABSTRACT && LA145_0 <= ASM)||(LA145_0 >= ATOMIC && LA145_0 <= BIG_O)||(LA145_0 >= BOOL && LA145_0 <= CASE)||(LA145_0 >= CHAR && LA145_0 <= CIVLFOR)||(LA145_0 >= COMPLEX && LA145_0 <= CONST)||(LA145_0 >= CONTINUE && LA145_0 <= DEFAULT)||LA145_0==DEVICE||(LA145_0 >= DO && LA145_0 <= DOUBLE)||(LA145_0 >= ENUM && LA145_0 <= EXISTS)||(LA145_0 >= EXTERN && LA145_0 <= FATOMIC)||(LA145_0 >= FLOAT && LA145_0 <= GOTO)||LA145_0==HERE||(LA145_0 >= INLINE && LA145_0 <= INT)||(LA145_0 >= LONG && LA145_0 <= NORETURN)||LA145_0==OUTPUT||LA145_0==PARFOR||(LA145_0 >= PPRAGMA && LA145_0 <= RANGE)||(LA145_0 >= REAL && LA145_0 <= REGISTER)||(LA145_0 >= RESTRICT && LA145_0 <= SELF)||(LA145_0 >= SHARED && LA145_0 <= SYSTEM)||(LA145_0 >= THREADLOCAL && LA145_0 <= TYPEOF)||(LA145_0 >= UNION && LA145_0 <= WHILE)||LA145_0==SUM) ) {
					alt145=1;
				}

				switch (alt145) {
				case 1 :
					// CivlCParser.g:1804:4: blockItem
					{
					pushFollow(FOLLOW_blockItem_in_translationUnit10743);
					blockItem569=blockItem();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_blockItem.add(blockItem569.getTree());
					}
					break;

				default :
					break loop145;
				}
			}

			EOF570=(Token)match(input,EOF,FOLLOW_EOF_in_translationUnit10746); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_EOF.add(EOF570);

			// 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();
			// 1804:19: -> ^( TRANSLATION_UNIT ( blockItem )* )
			{
				// CivlCParser.g:1804: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:1804: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:336:4: ( LPAREN typeName RPAREN LCURLY )
		// CivlCParser.g:336:5: LPAREN typeName RPAREN LCURLY
		{
		match(input,LPAREN,FOLLOW_LPAREN_in_synpred1_CivlCParser2087); if (state.failed) return;

		pushFollow(FOLLOW_typeName_in_synpred1_CivlCParser2089);
		typeName();
		state._fsp--;
		if (state.failed) return;

		match(input,RPAREN,FOLLOW_RPAREN_in_synpred1_CivlCParser2091); if (state.failed) return;

		match(input,LCURLY,FOLLOW_LCURLY_in_synpred1_CivlCParser2093); if (state.failed) return;

		}

	}
	// $ANTLR end synpred1_CivlCParser

	// $ANTLR start synpred2_CivlCParser
	public final void synpred2_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:369:4: ( SIZEOF LPAREN typeName )
		// CivlCParser.g:369:5: SIZEOF LPAREN typeName
		{
		match(input,SIZEOF,FOLLOW_SIZEOF_in_synpred2_CivlCParser2396); if (state.failed) return;

		match(input,LPAREN,FOLLOW_LPAREN_in_synpred2_CivlCParser2398); if (state.failed) return;

		pushFollow(FOLLOW_typeName_in_synpred2_CivlCParser2400);
		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:427:4: ( LPAREN typeName RPAREN ~ LCURLY )
		// CivlCParser.g:427:5: LPAREN typeName RPAREN ~ LCURLY
		{
		match(input,LPAREN,FOLLOW_LPAREN_in_synpred3_CivlCParser2768); if (state.failed) return;

		pushFollow(FOLLOW_typeName_in_synpred3_CivlCParser2770);
		typeName();
		state._fsp--;
		if (state.failed) return;

		match(input,RPAREN,FOLLOW_RPAREN_in_synpred3_CivlCParser2772); 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:436:11: ( STAR )
		// CivlCParser.g:436:12: STAR
		{
		match(input,STAR,FOLLOW_STAR_in_synpred4_CivlCParser2853); if (state.failed) return;

		}

	}
	// $ANTLR end synpred4_CivlCParser

	// $ANTLR start synpred5_CivlCParser
	public final void synpred5_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:438:11: ( DIV )
		// CivlCParser.g:438:12: DIV
		{
		match(input,DIV,FOLLOW_DIV_in_synpred5_CivlCParser2904); if (state.failed) return;

		}

	}
	// $ANTLR end synpred5_CivlCParser

	// $ANTLR start synpred6_CivlCParser
	public final void synpred6_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:440:11: ( MOD )
		// CivlCParser.g:440:12: MOD
		{
		match(input,MOD,FOLLOW_MOD_in_synpred6_CivlCParser2955); if (state.failed) return;

		}

	}
	// $ANTLR end synpred6_CivlCParser

	// $ANTLR start synpred7_CivlCParser
	public final void synpred7_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:448:11: ( PLUS )
		// CivlCParser.g:448:12: PLUS
		{
		match(input,PLUS,FOLLOW_PLUS_in_synpred7_CivlCParser3036); if (state.failed) return;

		}

	}
	// $ANTLR end synpred7_CivlCParser

	// $ANTLR start synpred8_CivlCParser
	public final void synpred8_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:450:11: ( SUB )
		// CivlCParser.g:450:12: SUB
		{
		match(input,SUB,FOLLOW_SUB_in_synpred8_CivlCParser3085); if (state.failed) return;

		}

	}
	// $ANTLR end synpred8_CivlCParser

	// $ANTLR start synpred9_CivlCParser
	public final void synpred9_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:459:11: ( DOTDOT )
		// CivlCParser.g:459:12: DOTDOT
		{
		match(input,DOTDOT,FOLLOW_DOTDOT_in_synpred9_CivlCParser3160); if (state.failed) return;

		}

	}
	// $ANTLR end synpred9_CivlCParser

	// $ANTLR start synpred10_CivlCParser
	public final void synpred10_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:466:11: ( HASH )
		// CivlCParser.g:466:12: HASH
		{
		match(input,HASH,FOLLOW_HASH_in_synpred10_CivlCParser3237); if (state.failed) return;

		}

	}
	// $ANTLR end synpred10_CivlCParser

	// $ANTLR start synpred11_CivlCParser
	public final void synpred11_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:474:11: ( SHIFTLEFT )
		// CivlCParser.g:474:12: SHIFTLEFT
		{
		match(input,SHIFTLEFT,FOLLOW_SHIFTLEFT_in_synpred11_CivlCParser3313); if (state.failed) return;

		}

	}
	// $ANTLR end synpred11_CivlCParser

	// $ANTLR start synpred12_CivlCParser
	public final void synpred12_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:476:11: ( SHIFTRIGHT )
		// CivlCParser.g:476:12: SHIFTRIGHT
		{
		match(input,SHIFTRIGHT,FOLLOW_SHIFTRIGHT_in_synpred12_CivlCParser3362); if (state.failed) return;

		}

	}
	// $ANTLR end synpred12_CivlCParser

	// $ANTLR start synpred13_CivlCParser
	public final void synpred13_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:484:11: ( relationalOperator )
		// CivlCParser.g:484:12: relationalOperator
		{
		pushFollow(FOLLOW_relationalOperator_in_synpred13_CivlCParser3443);
		relationalOperator();
		state._fsp--;
		if (state.failed) return;

		}

	}
	// $ANTLR end synpred13_CivlCParser

	// $ANTLR start synpred14_CivlCParser
	public final void synpred14_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:499:11: ( equalityOperator )
		// CivlCParser.g:499:12: equalityOperator
		{
		pushFollow(FOLLOW_equalityOperator_in_synpred14_CivlCParser3581);
		equalityOperator();
		state._fsp--;
		if (state.failed) return;

		}

	}
	// $ANTLR end synpred14_CivlCParser

	// $ANTLR start synpred15_CivlCParser
	public final void synpred15_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:514:11: ( AMPERSAND )
		// CivlCParser.g:514:12: AMPERSAND
		{
		match(input,AMPERSAND,FOLLOW_AMPERSAND_in_synpred15_CivlCParser3716); if (state.failed) return;

		}

	}
	// $ANTLR end synpred15_CivlCParser

	// $ANTLR start synpred16_CivlCParser
	public final void synpred16_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:522:11: ( BITXOR )
		// CivlCParser.g:522:12: BITXOR
		{
		match(input,BITXOR,FOLLOW_BITXOR_in_synpred16_CivlCParser3799); if (state.failed) return;

		}

	}
	// $ANTLR end synpred16_CivlCParser

	// $ANTLR start synpred17_CivlCParser
	public final void synpred17_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:530:11: ( BITOR )
		// CivlCParser.g:530:12: BITOR
		{
		match(input,BITOR,FOLLOW_BITOR_in_synpred17_CivlCParser3882); if (state.failed) return;

		}

	}
	// $ANTLR end synpred17_CivlCParser

	// $ANTLR start synpred18_CivlCParser
	public final void synpred18_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:538:11: ( AND )
		// CivlCParser.g:538:12: AND
		{
		match(input,AND,FOLLOW_AND_in_synpred18_CivlCParser3965); if (state.failed) return;

		}

	}
	// $ANTLR end synpred18_CivlCParser

	// $ANTLR start synpred19_CivlCParser
	public final void synpred19_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:546:11: ( OR )
		// CivlCParser.g:546:12: OR
		{
		match(input,OR,FOLLOW_OR_in_synpred19_CivlCParser4056); if (state.failed) return;

		}

	}
	// $ANTLR end synpred19_CivlCParser

	// $ANTLR start synpred20_CivlCParser
	public final void synpred20_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:555:11: ( IMPLIES )
		// CivlCParser.g:555:12: IMPLIES
		{
		match(input,IMPLIES,FOLLOW_IMPLIES_in_synpred20_CivlCParser4150); if (state.failed) return;

		}

	}
	// $ANTLR end synpred20_CivlCParser

	// $ANTLR start synpred21_CivlCParser
	public final void synpred21_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:564:11: ( QMARK )
		// CivlCParser.g:564:12: QMARK
		{
		match(input,QMARK,FOLLOW_QMARK_in_synpred21_CivlCParser4236); if (state.failed) return;

		}

	}
	// $ANTLR end synpred21_CivlCParser

	// $ANTLR start synpred22_CivlCParser
	public final void synpred22_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:580:5: ( LPAREN typeName RPAREN LAMBDA LPAREN boundVariableDeclarationList BITOR )
		// CivlCParser.g:580:6: LPAREN typeName RPAREN LAMBDA LPAREN boundVariableDeclarationList BITOR
		{
		match(input,LPAREN,FOLLOW_LPAREN_in_synpred22_CivlCParser4411); if (state.failed) return;

		pushFollow(FOLLOW_typeName_in_synpred22_CivlCParser4413);
		typeName();
		state._fsp--;
		if (state.failed) return;

		match(input,RPAREN,FOLLOW_RPAREN_in_synpred22_CivlCParser4415); if (state.failed) return;

		match(input,LAMBDA,FOLLOW_LAMBDA_in_synpred22_CivlCParser4417); if (state.failed) return;

		match(input,LPAREN,FOLLOW_LPAREN_in_synpred22_CivlCParser4419); if (state.failed) return;

		pushFollow(FOLLOW_boundVariableDeclarationList_in_synpred22_CivlCParser4437);
		boundVariableDeclarationList();
		state._fsp--;
		if (state.failed) return;

		match(input,BITOR,FOLLOW_BITOR_in_synpred22_CivlCParser4439); if (state.failed) return;

		}

	}
	// $ANTLR end synpred22_CivlCParser

	// $ANTLR start synpred23_CivlCParser
	public final void synpred23_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:616:4: ( arrayLambdaExpression )
		// CivlCParser.g:616:5: arrayLambdaExpression
		{
		pushFollow(FOLLOW_arrayLambdaExpression_in_synpred23_CivlCParser4752);
		arrayLambdaExpression();
		state._fsp--;
		if (state.failed) return;

		}

	}
	// $ANTLR end synpred23_CivlCParser

	// $ANTLR start synpred24_CivlCParser
	public final void synpred24_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:617:4: ( unaryExpression assignmentOperator )
		// CivlCParser.g:617:5: unaryExpression assignmentOperator
		{
		pushFollow(FOLLOW_unaryExpression_in_synpred24_CivlCParser4762);
		unaryExpression();
		state._fsp--;
		if (state.failed) return;

		pushFollow(FOLLOW_assignmentOperator_in_synpred24_CivlCParser4764);
		assignmentOperator();
		state._fsp--;
		if (state.failed) return;

		}

	}
	// $ANTLR end synpred24_CivlCParser

	// $ANTLR start synpred25_CivlCParser
	public final void synpred25_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:641:6: ( COMMA )
		// CivlCParser.g:641:7: COMMA
		{
		match(input,COMMA,FOLLOW_COMMA_in_synpred25_CivlCParser4925); if (state.failed) return;

		}

	}
	// $ANTLR end synpred25_CivlCParser

	// $ANTLR start synpred26_CivlCParser
	public final void synpred26_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:734:4: ( typeSpecifier )
		// CivlCParser.g:734:5: typeSpecifier
		{
		pushFollow(FOLLOW_typeSpecifier_in_synpred26_CivlCParser5190);
		typeSpecifier();
		state._fsp--;
		if (state.failed) return;

		}

	}
	// $ANTLR end synpred26_CivlCParser

	// $ANTLR start synpred27_CivlCParser
	public final void synpred27_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:952:8: ( SYSTEM libraryName )
		// CivlCParser.g:952:9: SYSTEM libraryName
		{
		match(input,SYSTEM,FOLLOW_SYSTEM_in_synpred27_CivlCParser6405); if (state.failed) return;

		pushFollow(FOLLOW_libraryName_in_synpred27_CivlCParser6407);
		libraryName();
		state._fsp--;
		if (state.failed) return;

		}

	}
	// $ANTLR end synpred27_CivlCParser

	// $ANTLR start synpred28_CivlCParser
	public final void synpred28_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:1183:4: ( declarator )
		// CivlCParser.g:1183:5: declarator
		{
		pushFollow(FOLLOW_declarator_in_synpred28_CivlCParser7558);
		declarator();
		state._fsp--;
		if (state.failed) return;

		}

	}
	// $ANTLR end synpred28_CivlCParser

	// $ANTLR start synpred29_CivlCParser
	public final void synpred29_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:1478:11: ( ELSE )
		// CivlCParser.g:1478:12: ELSE
		{
		match(input,ELSE,FOLLOW_ELSE_in_synpred29_CivlCParser9134); if (state.failed) return;

		}

	}
	// $ANTLR end synpred29_CivlCParser

	// $ANTLR start synpred30_CivlCParser
	public final void synpred30_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:1772:4: ( declarator contract declarationList_opt LCURLY )
		// CivlCParser.g:1772:5: declarator contract declarationList_opt LCURLY
		{
		pushFollow(FOLLOW_declarator_in_synpred30_CivlCParser10659);
		declarator();
		state._fsp--;
		if (state.failed) return;

		pushFollow(FOLLOW_contract_in_synpred30_CivlCParser10661);
		contract();
		state._fsp--;
		if (state.failed) return;

		pushFollow(FOLLOW_declarationList_opt_in_synpred30_CivlCParser10663);
		declarationList_opt();
		state._fsp--;
		if (state.failed) return;

		match(input,LCURLY,FOLLOW_LCURLY_in_synpred30_CivlCParser10665); if (state.failed) return;

		}

	}
	// $ANTLR end synpred30_CivlCParser

	// $ANTLR start synpred31_CivlCParser
	public final void synpred31_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:1774:4: ( declarationSpecifiers declarator contract declarationList_opt LCURLY )
		// CivlCParser.g:1774:5: declarationSpecifiers declarator contract declarationList_opt LCURLY
		{
		pushFollow(FOLLOW_declarationSpecifiers_in_synpred31_CivlCParser10678);
		declarationSpecifiers();
		state._fsp--;
		if (state.failed) return;

		pushFollow(FOLLOW_declarator_in_synpred31_CivlCParser10680);
		declarator();
		state._fsp--;
		if (state.failed) return;

		pushFollow(FOLLOW_contract_in_synpred31_CivlCParser10682);
		contract();
		state._fsp--;
		if (state.failed) return;

		pushFollow(FOLLOW_declarationList_opt_in_synpred31_CivlCParser10684);
		declarationList_opt();
		state._fsp--;
		if (state.failed) return;

		match(input,LCURLY,FOLLOW_LCURLY_in_synpred31_CivlCParser10686); if (state.failed) return;

		}

	}
	// $ANTLR end synpred31_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 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 DFA71 dfa71 = new DFA71(this);
	protected DFA80 dfa80 = new DFA80(this);
	protected DFA81 dfa81 = new DFA81(this);
	protected DFA93 dfa93 = new DFA93(this);
	protected DFA97 dfa97 = new DFA97(this);
	protected DFA144 dfa144 = new DFA144(this);
	static final String DFA71_eotS =
		"\35\uffff";
	static final String DFA71_eofS =
		"\35\uffff";
	static final String DFA71_minS =
		"\1\172\5\uffff\1\26\3\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 DFA71_maxS =
		"\1\u00d0\5\uffff\1\u00d9\3\uffff\1\u011b\1\uffff\1\162\1\u011b\1\uffff"+
		"\1\0\1\uffff\1\u011b\1\161\1\u011b\1\161\1\0\1\u011b\1\161\2\0\1\161\2"+
		"\0";
	static final String DFA71_acceptS =
		"\1\uffff\1\1\1\2\1\3\1\4\1\5\1\uffff\1\10\1\11\1\12\1\uffff\1\7\2\uffff"+
		"\1\6\1\uffff\1\6\14\uffff";
	static final String DFA71_specialS =
		"\14\uffff\1\10\1\5\1\uffff\1\0\1\uffff\1\11\1\7\1\12\1\15\1\1\1\13\1\6"+
		"\1\2\1\16\1\14\1\3\1\4}>";
	static final String[] DFA71_transitionS = {
			"\1\3\31\uffff\1\10\11\uffff\1\7\5\uffff\1\11\4\uffff\1\1\6\uffff\1\2"+
			"\10\uffff\1\4\21\uffff\1\5\4\uffff\1\6",
			"",
			"",
			"",
			"",
			"",
			"\1\13\42\uffff\1\13\17\uffff\1\13\1\uffff\1\12\31\uffff\1\13\3\uffff"+
			"\1\13\4\uffff\1\13\13\uffff\2\13\3\uffff\2\13\2\uffff\1\13\4\uffff\1"+
			"\13\4\uffff\2\13\5\uffff\1\13\2\uffff\2\13\1\uffff\1\13\2\uffff\2\13"+
			"\1\uffff\1\13\3\uffff\1\13\4\uffff\3\13\2\uffff\3\13\1\uffff\1\13\6\uffff"+
			"\2\13\1\uffff\2\13\1\uffff\1\13\6\uffff\3\13\2\uffff\2\13\1\uffff\1\13"+
			"\1\uffff\1\13\1\uffff\3\13\1\uffff\4\13",
			"",
			"",
			"",
			"\1\13\17\uffff\1\13\15\uffff\1\13\10\uffff\1\13\15\uffff\1\14\11\uffff"+
			"\1\13\5\uffff\1\13\6\uffff\1\13\4\uffff\1\13\7\uffff\1\13\1\uffff\1\13"+
			"\7\uffff\1\13\6\uffff\1\13\1\uffff\2\13\1\uffff\1\13\10\uffff\1\13\2"+
			"\uffff\1\13\1\uffff\1\13\3\uffff\1\13\10\uffff\1\13\24\uffff\1\13\3\uffff"+
			"\1\13\2\uffff\1\13\7\uffff\1\13\5\uffff\1\13\6\uffff\2\13\2\uffff\2\13"+
			"\4\uffff\2\13\1\uffff\1\13\14\uffff\1\13\101\uffff\1\13",
			"",
			"\2\13\2\uffff\2\13\1\uffff\5\13\12\uffff\4\13\7\uffff\1\13\10\uffff"+
			"\2\13\11\uffff\1\16\3\uffff\1\13\11\uffff\1\13\1\uffff\1\13\1\uffff\3"+
			"\13\2\uffff\4\13\4\uffff\1\13\4\uffff\3\13\2\uffff\1\13\4\uffff\1\17"+
			"\2\uffff\6\13\1\uffff\1\15\1\13",
			"\1\13\17\uffff\1\13\15\uffff\1\13\10\uffff\1\13\15\uffff\1\22\11\uffff"+
			"\1\13\5\uffff\1\13\6\uffff\1\13\4\uffff\1\13\7\uffff\1\13\1\uffff\1\13"+
			"\7\uffff\1\20\6\uffff\1\13\1\uffff\1\13\1\21\1\uffff\1\13\10\uffff\1"+
			"\13\4\uffff\1\13\3\uffff\1\13\35\uffff\1\13\3\uffff\1\13\20\uffff\1\13"+
			"\7\uffff\1\13\2\uffff\2\13\4\uffff\2\13\120\uffff\1\13",
			"",
			"\1\uffff",
			"",
			"\1\13\17\uffff\1\13\15\uffff\1\13\10\uffff\1\13\15\uffff\1\24\11\uffff"+
			"\1\13\5\uffff\1\13\6\uffff\1\13\4\uffff\1\13\7\uffff\1\13\1\uffff\1\13"+
			"\7\uffff\1\20\6\uffff\1\13\1\uffff\1\13\1\23\1\uffff\1\13\10\uffff\1"+
			"\13\4\uffff\1\13\3\uffff\1\13\25\uffff\1\13\6\uffff\2\13\3\uffff\1\13"+
			"\20\uffff\1\13\7\uffff\1\13\2\uffff\2\13\4\uffff\2\13\120\uffff\1\13",
			"\2\13\2\uffff\1\13\3\uffff\1\13\1\uffff\1\13\13\uffff\1\13\1\uffff\2"+
			"\13\7\uffff\1\13\10\uffff\2\13\11\uffff\1\16\3\uffff\1\13\11\uffff\1"+
			"\13\1\uffff\1\13\1\uffff\3\13\2\uffff\2\13\1\uffff\1\13\4\uffff\1\13"+
			"\4\uffff\1\13\1\uffff\1\13\2\uffff\1\13\4\uffff\1\25\2\uffff\1\13\1\uffff"+
			"\1\13\1\uffff\1\13\2\uffff\1\15",
			"\1\13\17\uffff\1\13\15\uffff\1\13\10\uffff\1\13\15\uffff\1\27\11\uffff"+
			"\1\13\5\uffff\1\13\6\uffff\1\13\4\uffff\1\13\7\uffff\1\13\1\uffff\1\13"+
			"\7\uffff\1\20\6\uffff\1\13\1\uffff\1\13\1\26\1\uffff\1\13\10\uffff\1"+
			"\13\4\uffff\1\13\3\uffff\1\13\25\uffff\1\13\6\uffff\2\13\3\uffff\1\13"+
			"\20\uffff\1\13\7\uffff\1\13\2\uffff\2\13\4\uffff\2\13\120\uffff\1\13",
			"\2\13\2\uffff\1\13\3\uffff\1\13\1\uffff\1\13\13\uffff\1\13\1\uffff\2"+
			"\13\7\uffff\1\13\10\uffff\2\13\11\uffff\1\16\3\uffff\1\13\11\uffff\1"+
			"\13\1\uffff\1\13\1\uffff\3\13\2\uffff\2\13\1\uffff\1\13\4\uffff\1\13"+
			"\4\uffff\1\13\1\uffff\1\13\2\uffff\1\13\4\uffff\1\30\2\uffff\1\13\1\uffff"+
			"\1\13\1\uffff\1\13\2\uffff\1\15",
			"\1\uffff",
			"\1\13\17\uffff\1\13\15\uffff\1\13\10\uffff\1\13\15\uffff\1\32\11\uffff"+
			"\1\13\5\uffff\1\13\6\uffff\1\13\4\uffff\1\13\7\uffff\1\13\1\uffff\1\13"+
			"\7\uffff\1\20\6\uffff\1\13\1\uffff\1\13\1\31\1\uffff\1\13\10\uffff\1"+
			"\13\4\uffff\1\13\3\uffff\1\13\25\uffff\1\13\6\uffff\2\13\3\uffff\1\13"+
			"\20\uffff\1\13\7\uffff\1\13\2\uffff\2\13\4\uffff\2\13\120\uffff\1\13",
			"\2\13\2\uffff\1\13\3\uffff\1\13\1\uffff\1\13\13\uffff\1\13\1\uffff\2"+
			"\13\7\uffff\1\13\10\uffff\2\13\11\uffff\1\16\3\uffff\1\13\11\uffff\1"+
			"\13\1\uffff\1\13\1\uffff\3\13\2\uffff\2\13\1\uffff\1\13\4\uffff\1\13"+
			"\4\uffff\1\13\1\uffff\1\13\2\uffff\1\13\4\uffff\1\33\2\uffff\1\13\1\uffff"+
			"\1\13\1\uffff\1\13\2\uffff\1\15",
			"\1\uffff",
			"\1\uffff",
			"\2\13\2\uffff\1\13\3\uffff\1\13\1\uffff\1\13\13\uffff\1\13\1\uffff\2"+
			"\13\7\uffff\1\13\10\uffff\2\13\11\uffff\1\16\3\uffff\1\13\11\uffff\1"+
			"\13\1\uffff\1\13\1\uffff\3\13\2\uffff\2\13\1\uffff\1\13\4\uffff\1\13"+
			"\4\uffff\1\13\1\uffff\1\13\2\uffff\1\13\4\uffff\1\34\2\uffff\1\13\1\uffff"+
			"\1\13\1\uffff\1\13\2\uffff\1\15",
			"\1\uffff",
			"\1\uffff"
	};

	static final short[] DFA71_eot = DFA.unpackEncodedString(DFA71_eotS);
	static final short[] DFA71_eof = DFA.unpackEncodedString(DFA71_eofS);
	static final char[] DFA71_min = DFA.unpackEncodedStringToUnsignedChars(DFA71_minS);
	static final char[] DFA71_max = DFA.unpackEncodedStringToUnsignedChars(DFA71_maxS);
	static final short[] DFA71_accept = DFA.unpackEncodedString(DFA71_acceptS);
	static final short[] DFA71_special = DFA.unpackEncodedString(DFA71_specialS);
	static final short[][] DFA71_transition;

	static {
		int numStates = DFA71_transitionS.length;
		DFA71_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA71_transition[i] = DFA.unpackEncodedString(DFA71_transitionS[i]);
		}
	}

	protected class DFA71 extends DFA {

		public DFA71(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 71;
			this.eot = DFA71_eot;
			this.eof = DFA71_eof;
			this.min = DFA71_min;
			this.max = DFA71_max;
			this.accept = DFA71_accept;
			this.special = DFA71_special;
			this.transition = DFA71_transition;
		}
		@Override
		public String getDescription() {
			return "947:1: functionSpecifier : ( INLINE | NORETURN | abstractSpecifier | PURE -> ^( PURE ) | STATE_F -> ^( STATE_F ) | ( ( SYSTEM libraryName )=> SYSTEM libraryName ) -> ^( SYSTEM libraryName ) | SYSTEM -> ^( SYSTEM ABSENT ) | FATOMIC -> ^( FATOMIC ) | DEVICE | GLOBAL );";
		}
		@Override
		public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
			TokenStream input = (TokenStream)_input;
			int _s = s;
			switch ( s ) {
					case 0 : 
						int LA71_15 = input.LA(1);
						 
						int index71_15 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred27_CivlCParser()) ) {s = 16;}
						else if ( (true) ) {s = 11;}
						 
						input.seek(index71_15);
						if ( s>=0 ) return s;
						break;

					case 1 : 
						int LA71_21 = input.LA(1);
						 
						int index71_21 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred27_CivlCParser()) ) {s = 16;}
						else if ( (true) ) {s = 11;}
						 
						input.seek(index71_21);
						if ( s>=0 ) return s;
						break;

					case 2 : 
						int LA71_24 = input.LA(1);
						 
						int index71_24 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred27_CivlCParser()) ) {s = 16;}
						else if ( (true) ) {s = 11;}
						 
						input.seek(index71_24);
						if ( s>=0 ) return s;
						break;

					case 3 : 
						int LA71_27 = input.LA(1);
						 
						int index71_27 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred27_CivlCParser()) ) {s = 16;}
						else if ( (true) ) {s = 11;}
						 
						input.seek(index71_27);
						if ( s>=0 ) return s;
						break;

					case 4 : 
						int LA71_28 = input.LA(1);
						 
						int index71_28 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred27_CivlCParser()) ) {s = 16;}
						else if ( (true) ) {s = 11;}
						 
						input.seek(index71_28);
						if ( s>=0 ) return s;
						break;

					case 5 : 
						int LA71_13 = input.LA(1);
						 
						int index71_13 = input.index();
						input.rewind();
						s = -1;
						if ( (LA71_13==RSQUARE) && (synpred27_CivlCParser())) {s = 16;}
						else if ( (LA71_13==SUB) ) {s = 17;}
						else if ( (LA71_13==IDENTIFIER) ) {s = 18;}
						else if ( (LA71_13==AMPERSAND||LA71_13==CHARACTER_CONSTANT||LA71_13==ELLIPSIS||LA71_13==FLOATING_CONSTANT||LA71_13==INTEGER_CONSTANT||LA71_13==LPAREN||LA71_13==MINUSMINUS||LA71_13==NOT||LA71_13==PLUS||LA71_13==PLUSPLUS||LA71_13==STAR||LA71_13==STRING_LITERAL||LA71_13==TILDE||LA71_13==ALIGNOF||LA71_13==BIG_O||LA71_13==CALLS||LA71_13==GENERIC||LA71_13==HERE||LA71_13==PROCNULL||LA71_13==RESULT||(LA71_13 >= SCOPEOF && LA71_13 <= SELF)||(LA71_13 >= SIZEOF && LA71_13 <= SPAWN)||LA71_13==SUM) ) {s = 11;}
						 
						input.seek(index71_13);
						if ( s>=0 ) return s;
						break;

					case 6 : 
						int LA71_23 = input.LA(1);
						 
						int index71_23 = input.index();
						input.rewind();
						s = -1;
						if ( (LA71_23==RSQUARE) ) {s = 27;}
						else if ( (LA71_23==SUB) ) {s = 13;}
						else if ( (LA71_23==IDENTIFIER) && (synpred27_CivlCParser())) {s = 14;}
						else if ( ((LA71_23 >= AMPERSAND && LA71_23 <= AND)||LA71_23==ARROW||LA71_23==BITOR||LA71_23==BITXOR||LA71_23==DIV||(LA71_23 >= DOT && LA71_23 <= DOTDOT)||LA71_23==EQUALS||(LA71_23 >= GT && LA71_23 <= GTE)||LA71_23==IMPLIES||LA71_23==LEXCON||LA71_23==LPAREN||(LA71_23 >= LSQUARE && LA71_23 <= LTE)||(LA71_23 >= MINUSMINUS && LA71_23 <= MOD)||LA71_23==NEQ||LA71_23==OR||LA71_23==PLUS||LA71_23==PLUSPLUS||LA71_23==QMARK||LA71_23==SHIFTLEFT||LA71_23==SHIFTRIGHT||LA71_23==STAR) ) {s = 11;}
						 
						input.seek(index71_23);
						if ( s>=0 ) return s;
						break;

					case 7 : 
						int LA71_18 = input.LA(1);
						 
						int index71_18 = input.index();
						input.rewind();
						s = -1;
						if ( (LA71_18==RSQUARE) ) {s = 21;}
						else if ( (LA71_18==SUB) ) {s = 13;}
						else if ( (LA71_18==IDENTIFIER) && (synpred27_CivlCParser())) {s = 14;}
						else if ( ((LA71_18 >= AMPERSAND && LA71_18 <= AND)||LA71_18==ARROW||LA71_18==BITOR||LA71_18==BITXOR||LA71_18==DIV||(LA71_18 >= DOT && LA71_18 <= DOTDOT)||LA71_18==EQUALS||(LA71_18 >= GT && LA71_18 <= GTE)||LA71_18==IMPLIES||LA71_18==LEXCON||LA71_18==LPAREN||(LA71_18 >= LSQUARE && LA71_18 <= LTE)||(LA71_18 >= MINUSMINUS && LA71_18 <= MOD)||LA71_18==NEQ||LA71_18==OR||LA71_18==PLUS||LA71_18==PLUSPLUS||LA71_18==QMARK||LA71_18==SHIFTLEFT||LA71_18==SHIFTRIGHT||LA71_18==STAR) ) {s = 11;}
						 
						input.seek(index71_18);
						if ( s>=0 ) return s;
						break;

					case 8 : 
						int LA71_12 = input.LA(1);
						 
						int index71_12 = input.index();
						input.rewind();
						s = -1;
						if ( (LA71_12==SUB) ) {s = 13;}
						else if ( (LA71_12==IDENTIFIER) && (synpred27_CivlCParser())) {s = 14;}
						else if ( (LA71_12==RSQUARE) ) {s = 15;}
						else if ( ((LA71_12 >= AMPERSAND && LA71_12 <= AND)||(LA71_12 >= ARROW && LA71_12 <= ASSIGN)||(LA71_12 >= BITANDEQ && LA71_12 <= BITXOREQ)||(LA71_12 >= DIV && LA71_12 <= DOTDOT)||LA71_12==EQUALS||(LA71_12 >= GT && LA71_12 <= GTE)||LA71_12==IMPLIES||LA71_12==LEXCON||LA71_12==LPAREN||(LA71_12 >= LSQUARE && LA71_12 <= LTE)||(LA71_12 >= MINUSMINUS && LA71_12 <= NEQ)||LA71_12==OR||(LA71_12 >= PLUS && LA71_12 <= PLUSPLUS)||LA71_12==QMARK||(LA71_12 >= SHIFTLEFT && LA71_12 <= STAREQ)||LA71_12==SUBEQ) ) {s = 11;}
						 
						input.seek(index71_12);
						if ( s>=0 ) return s;
						break;

					case 9 : 
						int LA71_17 = input.LA(1);
						 
						int index71_17 = input.index();
						input.rewind();
						s = -1;
						if ( (LA71_17==RSQUARE) && (synpred27_CivlCParser())) {s = 16;}
						else if ( (LA71_17==SUB) ) {s = 19;}
						else if ( (LA71_17==IDENTIFIER) ) {s = 20;}
						else if ( (LA71_17==AMPERSAND||LA71_17==CHARACTER_CONSTANT||LA71_17==ELLIPSIS||LA71_17==FLOATING_CONSTANT||LA71_17==INTEGER_CONSTANT||LA71_17==LPAREN||LA71_17==MINUSMINUS||LA71_17==NOT||LA71_17==PLUS||LA71_17==PLUSPLUS||LA71_17==STAR||LA71_17==STRING_LITERAL||LA71_17==TILDE||LA71_17==ALIGNOF||LA71_17==BIG_O||LA71_17==CALLS||LA71_17==EXISTS||(LA71_17 >= FORALL && LA71_17 <= GENERIC)||LA71_17==HERE||LA71_17==PROCNULL||LA71_17==RESULT||(LA71_17 >= SCOPEOF && LA71_17 <= SELF)||(LA71_17 >= SIZEOF && LA71_17 <= SPAWN)||LA71_17==SUM) ) {s = 11;}
						 
						input.seek(index71_17);
						if ( s>=0 ) return s;
						break;

					case 10 : 
						int LA71_19 = input.LA(1);
						 
						int index71_19 = input.index();
						input.rewind();
						s = -1;
						if ( (LA71_19==RSQUARE) && (synpred27_CivlCParser())) {s = 16;}
						else if ( (LA71_19==SUB) ) {s = 22;}
						else if ( (LA71_19==IDENTIFIER) ) {s = 23;}
						else if ( (LA71_19==AMPERSAND||LA71_19==CHARACTER_CONSTANT||LA71_19==ELLIPSIS||LA71_19==FLOATING_CONSTANT||LA71_19==INTEGER_CONSTANT||LA71_19==LPAREN||LA71_19==MINUSMINUS||LA71_19==NOT||LA71_19==PLUS||LA71_19==PLUSPLUS||LA71_19==STAR||LA71_19==STRING_LITERAL||LA71_19==TILDE||LA71_19==ALIGNOF||LA71_19==BIG_O||LA71_19==CALLS||LA71_19==EXISTS||(LA71_19 >= FORALL && LA71_19 <= GENERIC)||LA71_19==HERE||LA71_19==PROCNULL||LA71_19==RESULT||(LA71_19 >= SCOPEOF && LA71_19 <= SELF)||(LA71_19 >= SIZEOF && LA71_19 <= SPAWN)||LA71_19==SUM) ) {s = 11;}
						 
						input.seek(index71_19);
						if ( s>=0 ) return s;
						break;

					case 11 : 
						int LA71_22 = input.LA(1);
						 
						int index71_22 = input.index();
						input.rewind();
						s = -1;
						if ( (LA71_22==RSQUARE) && (synpred27_CivlCParser())) {s = 16;}
						else if ( (LA71_22==SUB) ) {s = 25;}
						else if ( (LA71_22==IDENTIFIER) ) {s = 26;}
						else if ( (LA71_22==AMPERSAND||LA71_22==CHARACTER_CONSTANT||LA71_22==ELLIPSIS||LA71_22==FLOATING_CONSTANT||LA71_22==INTEGER_CONSTANT||LA71_22==LPAREN||LA71_22==MINUSMINUS||LA71_22==NOT||LA71_22==PLUS||LA71_22==PLUSPLUS||LA71_22==STAR||LA71_22==STRING_LITERAL||LA71_22==TILDE||LA71_22==ALIGNOF||LA71_22==BIG_O||LA71_22==CALLS||LA71_22==EXISTS||(LA71_22 >= FORALL && LA71_22 <= GENERIC)||LA71_22==HERE||LA71_22==PROCNULL||LA71_22==RESULT||(LA71_22 >= SCOPEOF && LA71_22 <= SELF)||(LA71_22 >= SIZEOF && LA71_22 <= SPAWN)||LA71_22==SUM) ) {s = 11;}
						 
						input.seek(index71_22);
						if ( s>=0 ) return s;
						break;

					case 12 : 
						int LA71_26 = input.LA(1);
						 
						int index71_26 = input.index();
						input.rewind();
						s = -1;
						if ( (LA71_26==RSQUARE) ) {s = 28;}
						else if ( (LA71_26==SUB) ) {s = 13;}
						else if ( (LA71_26==IDENTIFIER) && (synpred27_CivlCParser())) {s = 14;}
						else if ( ((LA71_26 >= AMPERSAND && LA71_26 <= AND)||LA71_26==ARROW||LA71_26==BITOR||LA71_26==BITXOR||LA71_26==DIV||(LA71_26 >= DOT && LA71_26 <= DOTDOT)||LA71_26==EQUALS||(LA71_26 >= GT && LA71_26 <= GTE)||LA71_26==IMPLIES||LA71_26==LEXCON||LA71_26==LPAREN||(LA71_26 >= LSQUARE && LA71_26 <= LTE)||(LA71_26 >= MINUSMINUS && LA71_26 <= MOD)||LA71_26==NEQ||LA71_26==OR||LA71_26==PLUS||LA71_26==PLUSPLUS||LA71_26==QMARK||LA71_26==SHIFTLEFT||LA71_26==SHIFTRIGHT||LA71_26==STAR) ) {s = 11;}
						 
						input.seek(index71_26);
						if ( s>=0 ) return s;
						break;

					case 13 : 
						int LA71_20 = input.LA(1);
						 
						int index71_20 = input.index();
						input.rewind();
						s = -1;
						if ( (LA71_20==RSQUARE) ) {s = 24;}
						else if ( (LA71_20==SUB) ) {s = 13;}
						else if ( (LA71_20==IDENTIFIER) && (synpred27_CivlCParser())) {s = 14;}
						else if ( ((LA71_20 >= AMPERSAND && LA71_20 <= AND)||LA71_20==ARROW||LA71_20==BITOR||LA71_20==BITXOR||LA71_20==DIV||(LA71_20 >= DOT && LA71_20 <= DOTDOT)||LA71_20==EQUALS||(LA71_20 >= GT && LA71_20 <= GTE)||LA71_20==IMPLIES||LA71_20==LEXCON||LA71_20==LPAREN||(LA71_20 >= LSQUARE && LA71_20 <= LTE)||(LA71_20 >= MINUSMINUS && LA71_20 <= MOD)||LA71_20==NEQ||LA71_20==OR||LA71_20==PLUS||LA71_20==PLUSPLUS||LA71_20==QMARK||LA71_20==SHIFTLEFT||LA71_20==SHIFTRIGHT||LA71_20==STAR) ) {s = 11;}
						 
						input.seek(index71_20);
						if ( s>=0 ) return s;
						break;

					case 14 : 
						int LA71_25 = input.LA(1);
						 
						int index71_25 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred27_CivlCParser()) ) {s = 16;}
						else if ( (true) ) {s = 11;}
						 
						input.seek(index71_25);
						if ( s>=0 ) return s;
						break;
			}
			if (state.backtracking>0) {state.failed=true; return -1;}
			NoViableAltException nvae =
				new NoViableAltException(getDescription(), 71, _s, input);
			error(nvae);
			throw nvae;
		}
	}

	static final String DFA80_eotS =
		"\7\uffff";
	static final String DFA80_eofS =
		"\7\uffff";
	static final String DFA80_minS =
		"\2\4\1\uffff\1\4\3\uffff";
	static final String DFA80_maxS =
		"\2\u011b\1\uffff\1\u011b\3\uffff";
	static final String DFA80_acceptS =
		"\2\uffff\1\1\1\uffff\1\2\1\3\1\4";
	static final String DFA80_specialS =
		"\7\uffff}>";
	static final String[] DFA80_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\24\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\4\14\uffff\1\1\101\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\24\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\5\14\uffff\1\1\101\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\25\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\120\uffff\1\2",
			"",
			"",
			""
	};

	static final short[] DFA80_eot = DFA.unpackEncodedString(DFA80_eotS);
	static final short[] DFA80_eof = DFA.unpackEncodedString(DFA80_eofS);
	static final char[] DFA80_min = DFA.unpackEncodedStringToUnsignedChars(DFA80_minS);
	static final char[] DFA80_max = DFA.unpackEncodedStringToUnsignedChars(DFA80_maxS);
	static final short[] DFA80_accept = DFA.unpackEncodedString(DFA80_acceptS);
	static final short[] DFA80_special = DFA.unpackEncodedString(DFA80_specialS);
	static final short[][] DFA80_transition;

	static {
		int numStates = DFA80_transitionS.length;
		DFA80_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA80_transition[i] = DFA.unpackEncodedString(DFA80_transitionS[i]);
		}
	}

	protected class DFA80 extends DFA {

		public DFA80(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 80;
			this.eot = DFA80_eot;
			this.eof = DFA80_eof;
			this.min = DFA80_min;
			this.max = DFA80_max;
			this.accept = DFA80_accept;
			this.special = DFA80_special;
			this.transition = DFA80_transition;
		}
		@Override
		public String getDescription() {
			return "1041: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 DFA81_eotS =
		"\11\uffff";
	static final String DFA81_eofS =
		"\11\uffff";
	static final String DFA81_minS =
		"\1\71\1\uffff\1\26\1\uffff\1\42\1\0\1\26\1\uffff\1\0";
	static final String DFA81_maxS =
		"\1\u00d9\1\uffff\1\u00d9\1\uffff\1\u00d9\1\0\1\u00d9\1\uffff\1\0";
	static final String DFA81_acceptS =
		"\1\uffff\1\1\1\uffff\1\3\3\uffff\1\2\1\uffff";
	static final String DFA81_specialS =
		"\5\uffff\1\0\2\uffff\1\1}>";
	static final String[] DFA81_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\1\1\2\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\2\1\1\uffff\1\1\1\uffff\1\1\1\uffff"+
			"\3\1\1\uffff\4\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"+
			"\1\1\2\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\2\1\1\uffff\1\1\1\uffff\1\1\1\uffff\3\1\1\uffff\4\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\1\1\2\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\2\1\1\uffff\1\1\1\uffff\1\1\1\uffff"+
			"\3\1\1\uffff\4\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"+
			"\1\1\2\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\2\1\1\uffff\1\1\1\uffff\1\1\1\uffff\3\1\1\uffff\4\1",
			"",
			"\1\uffff"
	};

	static final short[] DFA81_eot = DFA.unpackEncodedString(DFA81_eotS);
	static final short[] DFA81_eof = DFA.unpackEncodedString(DFA81_eofS);
	static final char[] DFA81_min = DFA.unpackEncodedStringToUnsignedChars(DFA81_minS);
	static final char[] DFA81_max = DFA.unpackEncodedStringToUnsignedChars(DFA81_maxS);
	static final short[] DFA81_accept = DFA.unpackEncodedString(DFA81_acceptS);
	static final short[] DFA81_special = DFA.unpackEncodedString(DFA81_specialS);
	static final short[][] DFA81_transition;

	static {
		int numStates = DFA81_transitionS.length;
		DFA81_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA81_transition[i] = DFA.unpackEncodedString(DFA81_transitionS[i]);
		}
	}

	protected class DFA81 extends DFA {

		public DFA81(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 81;
			this.eot = DFA81_eot;
			this.eof = DFA81_eof;
			this.min = DFA81_min;
			this.max = DFA81_max;
			this.accept = DFA81_accept;
			this.special = DFA81_special;
			this.transition = DFA81_transition;
		}
		@Override
		public String getDescription() {
			return "1069: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 LA81_5 = input.LA(1);
						 
						int index81_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(index81_5);
						if ( s>=0 ) return s;
						break;

					case 1 : 
						int LA81_8 = input.LA(1);
						 
						int index81_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(index81_8);
						if ( s>=0 ) return s;
						break;
			}
			if (state.backtracking>0) {state.failed=true; return -1;}
			NoViableAltException nvae =
				new NoViableAltException(getDescription(), 81, _s, input);
			error(nvae);
			throw nvae;
		}
	}

	static final String DFA93_eotS =
		"\6\uffff";
	static final String DFA93_eofS =
		"\1\uffff\1\4\1\uffff\1\4\2\uffff";
	static final String DFA93_minS =
		"\1\111\1\25\1\uffff\1\25\2\uffff";
	static final String DFA93_maxS =
		"\1\156\1\u00d9\1\uffff\1\u00d9\2\uffff";
	static final String DFA93_acceptS =
		"\2\uffff\1\2\1\uffff\1\1\1\3";
	static final String DFA93_specialS =
		"\6\uffff}>";
	static final String[] DFA93_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\31\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\31\uffff"+
			"\1\3",
			"",
			""
	};

	static final short[] DFA93_eot = DFA.unpackEncodedString(DFA93_eotS);
	static final short[] DFA93_eof = DFA.unpackEncodedString(DFA93_eofS);
	static final char[] DFA93_min = DFA.unpackEncodedStringToUnsignedChars(DFA93_minS);
	static final char[] DFA93_max = DFA.unpackEncodedStringToUnsignedChars(DFA93_maxS);
	static final short[] DFA93_accept = DFA.unpackEncodedString(DFA93_acceptS);
	static final short[] DFA93_special = DFA.unpackEncodedString(DFA93_specialS);
	static final short[][] DFA93_transition;

	static {
		int numStates = DFA93_transitionS.length;
		DFA93_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA93_transition[i] = DFA.unpackEncodedString(DFA93_transitionS[i]);
		}
	}

	protected class DFA93 extends DFA {

		public DFA93(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 93;
			this.eot = DFA93_eot;
			this.eof = DFA93_eof;
			this.min = DFA93_min;
			this.max = DFA93_max;
			this.accept = DFA93_accept;
			this.special = DFA93_special;
			this.transition = DFA93_transition;
		}
		@Override
		public String getDescription() {
			return "1218:1: abstractDeclarator : ( pointer -> ^( ABSTRACT_DECLARATOR pointer ABSENT ) | directAbstractDeclarator -> ^( ABSTRACT_DECLARATOR ABSENT directAbstractDeclarator ) | pointer directAbstractDeclarator -> ^( ABSTRACT_DECLARATOR pointer directAbstractDeclarator ) );";
		}
	}

	static final String DFA97_eotS =
		"\7\uffff";
	static final String DFA97_eofS =
		"\7\uffff";
	static final String DFA97_minS =
		"\2\4\1\uffff\1\4\3\uffff";
	static final String DFA97_maxS =
		"\2\u011b\1\uffff\1\u011b\3\uffff";
	static final String DFA97_acceptS =
		"\2\uffff\1\1\1\uffff\1\2\1\3\1\4";
	static final String DFA97_specialS =
		"\7\uffff}>";
	static final String[] DFA97_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\24\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\4\14\uffff\1\1\101\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\24\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\5\14\uffff\1\1\101\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\25\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\120\uffff\1\2",
			"",
			"",
			""
	};

	static final short[] DFA97_eot = DFA.unpackEncodedString(DFA97_eotS);
	static final short[] DFA97_eof = DFA.unpackEncodedString(DFA97_eofS);
	static final char[] DFA97_min = DFA.unpackEncodedStringToUnsignedChars(DFA97_minS);
	static final char[] DFA97_max = DFA.unpackEncodedStringToUnsignedChars(DFA97_maxS);
	static final short[] DFA97_accept = DFA.unpackEncodedString(DFA97_acceptS);
	static final short[] DFA97_special = DFA.unpackEncodedString(DFA97_specialS);
	static final short[][] DFA97_transition;

	static {
		int numStates = DFA97_transitionS.length;
		DFA97_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA97_transition[i] = DFA.unpackEncodedString(DFA97_transitionS[i]);
		}
	}

	protected class DFA97 extends DFA {

		public DFA97(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 97;
			this.eot = DFA97_eot;
			this.eof = DFA97_eof;
			this.min = DFA97_min;
			this.max = DFA97_max;
			this.accept = DFA97_accept;
			this.special = DFA97_special;
			this.transition = DFA97_transition;
		}
		@Override
		public String getDescription() {
			return "1286: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 DFA144_eotS =
		"\122\uffff";
	static final String DFA144_eofS =
		"\122\uffff";
	static final String DFA144_minS =
		"\1\4\43\0\56\uffff";
	static final String DFA144_maxS =
		"\1\u011b\43\0\56\uffff";
	static final String DFA144_acceptS =
		"\44\uffff\1\3\1\4\1\5\1\uffff\1\6\47\uffff\1\1\1\2";
	static final String DFA144_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\56\uffff}>";
	static final String[] DFA144_transitionS = {
			"\1\50\2\uffff\1\46\14\uffff\1\50\15\uffff\1\50\10\uffff\1\50\15\uffff"+
			"\1\1\1\50\5\uffff\1\46\2\uffff\1\50\2\uffff\1\50\2\uffff\1\2\6\uffff"+
			"\1\50\4\uffff\1\50\7\uffff\1\50\1\uffff\1\50\11\uffff\1\50\4\uffff\1"+
			"\3\1\uffff\2\50\1\uffff\1\50\6\uffff\1\34\1\43\2\50\1\uffff\1\23\1\5"+
			"\1\50\1\uffff\1\17\3\50\1\uffff\1\7\3\50\1\uffff\1\20\1\31\1\uffff\2"+
			"\50\2\uffff\1\41\1\uffff\1\50\1\26\1\14\1\uffff\1\25\1\50\1\uffff\1\5"+
			"\1\40\1\uffff\1\13\3\50\1\42\1\50\1\uffff\1\50\1\uffff\1\32\1\31\1\11"+
			"\2\uffff\1\12\1\30\1\33\1\uffff\1\31\1\uffff\1\50\2\uffff\1\45\1\50\1"+
			"\35\1\22\1\uffff\1\21\1\5\1\uffff\1\31\5\50\1\uffff\1\5\1\10\1\15\2\50"+
			"\1\36\1\5\1\44\1\24\1\50\1\37\1\uffff\1\5\1\4\1\27\1\uffff\1\24\1\16"+
			"\1\6\1\31\2\50\77\uffff\1\50",
			"\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[] DFA144_eot = DFA.unpackEncodedString(DFA144_eotS);
	static final short[] DFA144_eof = DFA.unpackEncodedString(DFA144_eofS);
	static final char[] DFA144_min = DFA.unpackEncodedStringToUnsignedChars(DFA144_minS);
	static final char[] DFA144_max = DFA.unpackEncodedStringToUnsignedChars(DFA144_maxS);
	static final short[] DFA144_accept = DFA.unpackEncodedString(DFA144_acceptS);
	static final short[] DFA144_special = DFA.unpackEncodedString(DFA144_specialS);
	static final short[][] DFA144_transition;

	static {
		int numStates = DFA144_transitionS.length;
		DFA144_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA144_transition[i] = DFA.unpackEncodedString(DFA144_transitionS[i]);
		}
	}

	protected class DFA144 extends DFA {

		public DFA144(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 144;
			this.eot = DFA144_eot;
			this.eof = DFA144_eof;
			this.min = DFA144_min;
			this.max = DFA144_max;
			this.accept = DFA144_accept;
			this.special = DFA144_special;
			this.transition = DFA144_transition;
		}
		@Override
		public String getDescription() {
			return "1771: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 LA144_1 = input.LA(1);
						 
						int index144_1 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( ((isTypeName(input.LT(1).getText()))) ) {s = 36;}
						else if ( (true) ) {s = 40;}
						 
						input.seek(index144_1);
						if ( s>=0 ) return s;
						break;

					case 1 : 
						int LA144_2 = input.LA(1);
						 
						int index144_2 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 40;}
						 
						input.seek(index144_2);
						if ( s>=0 ) return s;
						break;

					case 2 : 
						int LA144_3 = input.LA(1);
						 
						int index144_3 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 40;}
						 
						input.seek(index144_3);
						if ( s>=0 ) return s;
						break;

					case 3 : 
						int LA144_4 = input.LA(1);
						 
						int index144_4 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_4);
						if ( s>=0 ) return s;
						break;

					case 4 : 
						int LA144_5 = input.LA(1);
						 
						int index144_5 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_5);
						if ( s>=0 ) return s;
						break;

					case 5 : 
						int LA144_6 = input.LA(1);
						 
						int index144_6 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_6);
						if ( s>=0 ) return s;
						break;

					case 6 : 
						int LA144_7 = input.LA(1);
						 
						int index144_7 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_7);
						if ( s>=0 ) return s;
						break;

					case 7 : 
						int LA144_8 = input.LA(1);
						 
						int index144_8 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_8);
						if ( s>=0 ) return s;
						break;

					case 8 : 
						int LA144_9 = input.LA(1);
						 
						int index144_9 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_9);
						if ( s>=0 ) return s;
						break;

					case 9 : 
						int LA144_10 = input.LA(1);
						 
						int index144_10 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_10);
						if ( s>=0 ) return s;
						break;

					case 10 : 
						int LA144_11 = input.LA(1);
						 
						int index144_11 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_11);
						if ( s>=0 ) return s;
						break;

					case 11 : 
						int LA144_12 = input.LA(1);
						 
						int index144_12 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_12);
						if ( s>=0 ) return s;
						break;

					case 12 : 
						int LA144_13 = input.LA(1);
						 
						int index144_13 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_13);
						if ( s>=0 ) return s;
						break;

					case 13 : 
						int LA144_14 = input.LA(1);
						 
						int index144_14 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_14);
						if ( s>=0 ) return s;
						break;

					case 14 : 
						int LA144_15 = input.LA(1);
						 
						int index144_15 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_15);
						if ( s>=0 ) return s;
						break;

					case 15 : 
						int LA144_16 = input.LA(1);
						 
						int index144_16 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_16);
						if ( s>=0 ) return s;
						break;

					case 16 : 
						int LA144_17 = input.LA(1);
						 
						int index144_17 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_17);
						if ( s>=0 ) return s;
						break;

					case 17 : 
						int LA144_18 = input.LA(1);
						 
						int index144_18 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_18);
						if ( s>=0 ) return s;
						break;

					case 18 : 
						int LA144_19 = input.LA(1);
						 
						int index144_19 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_19);
						if ( s>=0 ) return s;
						break;

					case 19 : 
						int LA144_20 = input.LA(1);
						 
						int index144_20 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_20);
						if ( s>=0 ) return s;
						break;

					case 20 : 
						int LA144_21 = input.LA(1);
						 
						int index144_21 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_21);
						if ( s>=0 ) return s;
						break;

					case 21 : 
						int LA144_22 = input.LA(1);
						 
						int index144_22 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_22);
						if ( s>=0 ) return s;
						break;

					case 22 : 
						int LA144_23 = input.LA(1);
						 
						int index144_23 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_23);
						if ( s>=0 ) return s;
						break;

					case 23 : 
						int LA144_24 = input.LA(1);
						 
						int index144_24 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_24);
						if ( s>=0 ) return s;
						break;

					case 24 : 
						int LA144_25 = input.LA(1);
						 
						int index144_25 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_25);
						if ( s>=0 ) return s;
						break;

					case 25 : 
						int LA144_26 = input.LA(1);
						 
						int index144_26 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_26);
						if ( s>=0 ) return s;
						break;

					case 26 : 
						int LA144_27 = input.LA(1);
						 
						int index144_27 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_27);
						if ( s>=0 ) return s;
						break;

					case 27 : 
						int LA144_28 = input.LA(1);
						 
						int index144_28 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_28);
						if ( s>=0 ) return s;
						break;

					case 28 : 
						int LA144_29 = input.LA(1);
						 
						int index144_29 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_29);
						if ( s>=0 ) return s;
						break;

					case 29 : 
						int LA144_30 = input.LA(1);
						 
						int index144_30 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_30);
						if ( s>=0 ) return s;
						break;

					case 30 : 
						int LA144_31 = input.LA(1);
						 
						int index144_31 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_31);
						if ( s>=0 ) return s;
						break;

					case 31 : 
						int LA144_32 = input.LA(1);
						 
						int index144_32 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_32);
						if ( s>=0 ) return s;
						break;

					case 32 : 
						int LA144_33 = input.LA(1);
						 
						int index144_33 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_33);
						if ( s>=0 ) return s;
						break;

					case 33 : 
						int LA144_34 = input.LA(1);
						 
						int index144_34 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_34);
						if ( s>=0 ) return s;
						break;

					case 34 : 
						int LA144_35 = input.LA(1);
						 
						int index144_35 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred30_CivlCParser()) ) {s = 80;}
						else if ( (synpred31_CivlCParser()) ) {s = 81;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index144_35);
						if ( s>=0 ) return s;
						break;
			}
			if (state.backtracking>0) {state.failed=true; return -1;}
			NoViableAltException nvae =
				new NoViableAltException(getDescription(), 144, _s, input);
			error(nvae);
			throw nvae;
		}
	}

	public static final BitSet FOLLOW_quantifier_in_quantifiedExpression1072 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_quantifiedExpression1074 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000003D04180L});
	public static final BitSet FOLLOW_boundVariableDeclarationList_in_quantifiedExpression1076 = new BitSet(new long[]{0x0000000000001000L,0x0000002000000000L});
	public static final BitSet FOLLOW_BITOR_in_quantifiedExpression1088 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_conditionalExpression_in_quantifiedExpression1105 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_quantifiedExpression_in_quantifiedExpression1111 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_quantifiedExpression1126 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_expression_in_quantifiedExpression1142 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_quantifiedExpression1198 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_expression_in_quantifiedExpression1214 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_enumerationConstant_in_constant1280 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INTEGER_CONSTANT_in_constant1285 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FLOATING_CONSTANT_in_constant1290 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CHARACTER_CONSTANT_in_constant1295 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SELF_in_constant1300 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PROCNULL_in_constant1308 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RESULT_in_constant1313 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_HERE_in_constant1318 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ELLIPSIS_in_constant1326 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENTIFIER_in_enumerationConstant1341 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_constant_in_primaryExpression1366 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENTIFIER_in_primaryExpression1371 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STRING_LITERAL_in_primaryExpression1376 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_primaryExpression1384 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_compoundStatement_in_primaryExpression1386 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_primaryExpression1388 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_primaryExpression1413 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_expression_in_primaryExpression1415 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_primaryExpression1417 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_genericSelection_in_primaryExpression1442 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_GENERIC_in_genericSelection1455 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_genericSelection1457 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_genericSelection1459 = new BitSet(new long[]{0x0000000000400000L});
	public static final BitSet FOLLOW_COMMA_in_genericSelection1461 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105826108L,0x0000000003D04180L});
	public static final BitSet FOLLOW_genericAssocList_in_genericSelection1463 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_genericSelection1465 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_genericAssociation_in_genericAssocList1496 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_COMMA_in_genericAssocList1499 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105826108L,0x0000000003D04180L});
	public static final BitSet FOLLOW_genericAssociation_in_genericAssocList1501 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_typeName_in_genericAssociation1533 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_COLON_in_genericAssociation1535 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_genericAssociation1537 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DEFAULT_in_genericAssociation1560 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_COLON_in_genericAssociation1562 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_genericAssociation1564 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_postfixExpressionRoot_in_postfixExpression1596 = new BitSet(new long[]{0x0000000010000102L,0x0000000080010A80L});
	public static final BitSet FOLLOW_LSQUARE_in_postfixExpression1628 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_expression_in_postfixExpression1630 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_postfixExpression1632 = new BitSet(new long[]{0x0000000010000102L,0x0000000080010A80L});
	public static final BitSet FOLLOW_LPAREN_in_postfixExpression1737 = new BitSet(new long[]{0x0200080400100010L,0x100B4020A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_argumentExpressionList_in_postfixExpression1739 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_postfixExpression1741 = new BitSet(new long[]{0x0000000010000102L,0x0000000080010A80L});
	public static final BitSet FOLLOW_LEXCON_in_postfixExpression1813 = new BitSet(new long[]{0x0200080400100010L,0x100B4010A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_argumentExpressionList_in_postfixExpression1817 = new BitSet(new long[]{0x0000000000000000L,0x0000001000000000L});
	public static final BitSet FOLLOW_REXCON_in_postfixExpression1819 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_postfixExpression1833 = new BitSet(new long[]{0x0200080400100010L,0x100B4020A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_argumentExpressionList_in_postfixExpression1837 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_postfixExpression1839 = new BitSet(new long[]{0x0000000010000102L,0x0000000080010A80L});
	public static final BitSet FOLLOW_DOT_in_postfixExpression1884 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_postfixExpression1886 = new BitSet(new long[]{0x0000000010000102L,0x0000000080010A80L});
	public static final BitSet FOLLOW_ARROW_in_postfixExpression1921 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_postfixExpression1923 = new BitSet(new long[]{0x0000000010000102L,0x0000000080010A80L});
	public static final BitSet FOLLOW_PLUSPLUS_in_postfixExpression1960 = new BitSet(new long[]{0x0000000010000102L,0x0000000080010A80L});
	public static final BitSet FOLLOW_MINUSMINUS_in_postfixExpression2018 = new BitSet(new long[]{0x0000000010000102L,0x0000000080010A80L});
	public static final BitSet FOLLOW_LPAREN_in_postfixExpressionRoot2105 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000003D04180L});
	public static final BitSet FOLLOW_typeName_in_postfixExpressionRoot2107 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_postfixExpressionRoot2109 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_postfixExpressionRoot2111 = new BitSet(new long[]{0x0200080410100010L,0x100B4000A0210A48L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_initializerList_in_postfixExpressionRoot2113 = new BitSet(new long[]{0x0000000000400000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_postfixExpressionRoot2119 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_postfixExpressionRoot2125 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_postfixExpressionRoot2127 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_primaryExpression_in_postfixExpressionRoot2158 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_assignmentExpression_in_argumentExpressionList2174 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_argumentExpressionList2180 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_COMMA_in_argumentExpressionList2192 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_argumentExpressionList2197 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_argumentExpressionList2203 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_postfixExpression_in_unaryExpression2262 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PLUSPLUS_in_unaryExpression2269 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_unaryExpression_in_unaryExpression2271 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_MINUSMINUS_in_unaryExpression2313 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_unaryExpression_in_unaryExpression2315 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_unaryOperator_in_unaryExpression2355 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_castExpression_in_unaryExpression2360 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_unaryExpression2366 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SIZEOF_in_unaryExpression2404 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_unaryExpression2406 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000003D04180L});
	public static final BitSet FOLLOW_typeName_in_unaryExpression2408 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_unaryExpression2410 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SIZEOF_in_unaryExpression2433 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_unaryExpression_in_unaryExpression2435 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SCOPEOF_in_unaryExpression2458 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_unaryExpression_in_unaryExpression2460 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ALIGNOF_in_unaryExpression2481 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_unaryExpression2483 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000003D04180L});
	public static final BitSet FOLLOW_typeName_in_unaryExpression2485 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_unaryExpression2487 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_spawnExpression_in_unaryExpression2508 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_callsExpression_in_unaryExpression2516 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_sumExpression_in_unaryExpression2521 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SPAWN_in_spawnExpression2534 = new BitSet(new long[]{0x0200080400100000L,0x0001000000000208L,0x0100008800000000L,0x0000000000000011L});
	public static final BitSet FOLLOW_postfixExpressionRoot_in_spawnExpression2536 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_spawnExpression2538 = new BitSet(new long[]{0x0200080400100010L,0x100B4020A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_argumentExpressionList_in_spawnExpression2540 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_spawnExpression2542 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CALLS_in_callsExpression2591 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_callsExpression2593 = new BitSet(new long[]{0x0200080400100000L,0x0001000000000208L,0x0100008800000000L,0x0000000000000011L});
	public static final BitSet FOLLOW_postfixExpressionRoot_in_callsExpression2595 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_callsExpression2597 = new BitSet(new long[]{0x0200080400100010L,0x100B4020A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_argumentExpressionList_in_callsExpression2607 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_callsExpression2609 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_callsExpression2611 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SUM_in_sumExpression2669 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_sumExpression2671 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000003D04180L});
	public static final BitSet FOLLOW_boundVariableDeclarationList_in_sumExpression2673 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_sumExpression2675 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_sumExpression2685 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_sumExpression2691 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_castExpression2789 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000003D04180L});
	public static final BitSet FOLLOW_typeName_in_castExpression2791 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_castExpression2793 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_castExpression_in_castExpression2795 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_unaryExpression_in_castExpression2821 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_castExpression_in_multiplicativeExpression2835 = new BitSet(new long[]{0x0000000004000002L,0x0000400000020000L});
	public static final BitSet FOLLOW_STAR_in_multiplicativeExpression2857 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_castExpression_in_multiplicativeExpression2861 = new BitSet(new long[]{0x0000000004000002L,0x0000400000020000L});
	public static final BitSet FOLLOW_DIV_in_multiplicativeExpression2908 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_castExpression_in_multiplicativeExpression2912 = new BitSet(new long[]{0x0000000004000002L,0x0000400000020000L});
	public static final BitSet FOLLOW_MOD_in_multiplicativeExpression2959 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_castExpression_in_multiplicativeExpression2963 = new BitSet(new long[]{0x0000000004000002L,0x0000400000020000L});
	public static final BitSet FOLLOW_multiplicativeExpression_in_additiveExpression3018 = new BitSet(new long[]{0x0000000000000002L,0x0002000020000000L});
	public static final BitSet FOLLOW_PLUS_in_additiveExpression3040 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_multiplicativeExpression_in_additiveExpression3044 = new BitSet(new long[]{0x0000000000000002L,0x0002000020000000L});
	public static final BitSet FOLLOW_SUB_in_additiveExpression3089 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_multiplicativeExpression_in_additiveExpression3093 = new BitSet(new long[]{0x0000000000000002L,0x0002000020000000L});
	public static final BitSet FOLLOW_additiveExpression_in_rangeExpression3147 = new BitSet(new long[]{0x0000000020000002L});
	public static final BitSet FOLLOW_DOTDOT_in_rangeExpression3164 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_rangeSuffix_in_rangeExpression3168 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_additiveExpression_in_rangeSuffix3224 = new BitSet(new long[]{0x0001000000000002L});
	public static final BitSet FOLLOW_HASH_in_rangeSuffix3241 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_additiveExpression_in_rangeSuffix3245 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_rangeExpression_in_shiftExpression3295 = new BitSet(new long[]{0x0000000000000002L,0x0000140000000000L});
	public static final BitSet FOLLOW_SHIFTLEFT_in_shiftExpression3317 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_rangeExpression_in_shiftExpression3321 = new BitSet(new long[]{0x0000000000000002L,0x0000140000000000L});
	public static final BitSet FOLLOW_SHIFTRIGHT_in_shiftExpression3366 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_rangeExpression_in_shiftExpression3370 = new BitSet(new long[]{0x0000000000000002L,0x0000140000000000L});
	public static final BitSet FOLLOW_shiftExpression_in_relationalExpression3424 = new BitSet(new long[]{0x0000C00000000002L,0x0000000000003000L});
	public static final BitSet FOLLOW_relationalOperator_in_relationalExpression3447 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_shiftExpression_in_relationalExpression3464 = new BitSet(new long[]{0x0000C00000000002L,0x0000000000003000L});
	public static final BitSet FOLLOW_relationalExpression_in_equalityExpression3562 = new BitSet(new long[]{0x0000002000000002L,0x0000000000080000L});
	public static final BitSet FOLLOW_equalityOperator_in_equalityExpression3584 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_relationalExpression_in_equalityExpression3601 = new BitSet(new long[]{0x0000002000000002L,0x0000000000080000L});
	public static final BitSet FOLLOW_quantifiedExpression_in_equalityExpression3607 = new BitSet(new long[]{0x0000002000000002L,0x0000000000080000L});
	public static final BitSet FOLLOW_equalityExpression_in_andExpression3697 = new BitSet(new long[]{0x0000000000000012L});
	public static final BitSet FOLLOW_AMPERSAND_in_andExpression3720 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_equalityExpression_in_andExpression3724 = new BitSet(new long[]{0x0000000000000012L});
	public static final BitSet FOLLOW_andExpression_in_exclusiveOrExpression3780 = new BitSet(new long[]{0x0000000000004002L});
	public static final BitSet FOLLOW_BITXOR_in_exclusiveOrExpression3803 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_andExpression_in_exclusiveOrExpression3807 = new BitSet(new long[]{0x0000000000004002L});
	public static final BitSet FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression3863 = new BitSet(new long[]{0x0000000000001002L});
	public static final BitSet FOLLOW_BITOR_in_inclusiveOrExpression3886 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression3890 = new BitSet(new long[]{0x0000000000001002L});
	public static final BitSet FOLLOW_inclusiveOrExpression_in_logicalAndExpression3946 = new BitSet(new long[]{0x0000000000000022L});
	public static final BitSet FOLLOW_AND_in_logicalAndExpression3969 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_inclusiveOrExpression_in_logicalAndExpression3974 = new BitSet(new long[]{0x0000000000000022L});
	public static final BitSet FOLLOW_quantifiedExpression_in_logicalAndExpression3980 = new BitSet(new long[]{0x0000000000000022L});
	public static final BitSet FOLLOW_logicalAndExpression_in_logicalOrExpression4037 = new BitSet(new long[]{0x0000000000000002L,0x0000000001000000L});
	public static final BitSet FOLLOW_OR_in_logicalOrExpression4060 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_logicalAndExpression_in_logicalOrExpression4065 = new BitSet(new long[]{0x0000000000000002L,0x0000000001000000L});
	public static final BitSet FOLLOW_quantifiedExpression_in_logicalOrExpression4071 = new BitSet(new long[]{0x0000000000000002L,0x0000000001000000L});
	public static final BitSet FOLLOW_logicalOrExpression_in_logicalImpliesExpression4130 = new BitSet(new long[]{0x2000000000000002L});
	public static final BitSet FOLLOW_IMPLIES_in_logicalImpliesExpression4154 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_logicalImpliesExpression_in_logicalImpliesExpression4159 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_logicalImpliesExpression4165 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_logicalImpliesExpression_in_conditionalExpression4223 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
	public static final BitSet FOLLOW_QMARK_in_conditionalExpression4240 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_expression_in_conditionalExpression4242 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_COLON_in_conditionalExpression4244 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_conditionalExpression_in_conditionalExpression4261 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_conditionalExpression4267 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_arrayLambdaExpression4456 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000003D04180L});
	public static final BitSet FOLLOW_typeName_in_arrayLambdaExpression4458 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_arrayLambdaExpression4460 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000200000000000L});
	public static final BitSet FOLLOW_LAMBDA_in_arrayLambdaExpression4462 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_arrayLambdaExpression4464 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000003D04180L});
	public static final BitSet FOLLOW_boundVariableDeclarationList_in_arrayLambdaExpression4478 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_BITOR_in_arrayLambdaExpression4480 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_conditionalExpression_in_arrayLambdaExpression4497 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_quantifiedExpression_in_arrayLambdaExpression4503 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_arrayLambdaExpression4518 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_arrayLambdaExpression4535 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_arrayLambdaExpression4541 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_arrayLambdaExpression4575 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000003D04180L});
	public static final BitSet FOLLOW_typeName_in_arrayLambdaExpression4577 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_arrayLambdaExpression4579 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000200000000000L});
	public static final BitSet FOLLOW_LAMBDA_in_arrayLambdaExpression4581 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_arrayLambdaExpression4583 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000003D04180L});
	public static final BitSet FOLLOW_boundVariableDeclarationList_in_arrayLambdaExpression4593 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_arrayLambdaExpression4595 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_arrayLambdaExpression4608 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_arrayLambdaExpression4614 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeName_in_boundVariableDeclarationSubList4647 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_boundVariableDeclarationSubList4649 = new BitSet(new long[]{0x0000000000600002L});
	public static final BitSet FOLLOW_COMMA_in_boundVariableDeclarationSubList4652 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_boundVariableDeclarationSubList4654 = new BitSet(new long[]{0x0000000000600002L});
	public static final BitSet FOLLOW_COLON_in_boundVariableDeclarationSubList4659 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_rangeExpression_in_boundVariableDeclarationSubList4661 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_boundVariableDeclarationSubList_in_boundVariableDeclarationList4712 = new BitSet(new long[]{0x0000000000000002L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_boundVariableDeclarationList4715 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000003D04180L});
	public static final BitSet FOLLOW_boundVariableDeclarationSubList_in_boundVariableDeclarationList4717 = new BitSet(new long[]{0x0000000000000002L,0x0000020000000000L});
	public static final BitSet FOLLOW_arrayLambdaExpression_in_assignmentExpression4756 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_unaryExpression_in_assignmentExpression4778 = new BitSet(new long[]{0x000000000800AA00L,0x0004A80040040000L});
	public static final BitSet FOLLOW_assignmentOperator_in_assignmentExpression4790 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_assignmentExpression4803 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_assignmentExpression4809 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_conditionalExpression_in_assignmentExpression4842 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_assignmentExpression_in_commaExpression4911 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_COMMA_in_commaExpression4929 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_commaExpression4933 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_expression4978 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_commaExpression_in_expression4982 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_conditionalExpression_in_constantExpression4995 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarationSpecifiers_in_declaration5024 = new BitSet(new long[]{0x0200000000000000L,0x0000420000000200L});
	public static final BitSet FOLLOW_initDeclaratorList_in_declaration5038 = new BitSet(new long[]{0x0000000000000000L,0x4000020000000000L,0x4800004002040000L});
	public static final BitSet FOLLOW_contract_in_declaration5040 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_declaration5042 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SEMI_in_declaration5068 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_staticAssertDeclaration_in_declaration5096 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarationSpecifierList_in_declarationSpecifiers5110 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarationSpecifier_in_declarationSpecifierList5135 = new BitSet(new long[]{0x0200000000000002L,0x8C00000000000000L,0xB605CE1165906109L,0x0000000003DD59C0L});
	public static final BitSet FOLLOW_declarationSpecifier_in_declarationSpecifierList5147 = new BitSet(new long[]{0x0200000000000002L,0x8C00000000000000L,0xB605CE1165906109L,0x0000000003DD59C0L});
	public static final BitSet FOLLOW_storageClassSpecifier_in_declarationSpecifier5161 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeSpecifierOrQualifier_in_declarationSpecifier5166 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_functionSpecifier_in_declarationSpecifier5171 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_alignmentSpecifier_in_declarationSpecifier5176 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeSpecifier_in_typeSpecifierOrQualifier5194 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeQualifier_in_typeSpecifierOrQualifier5204 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_initDeclarator_in_initDeclaratorList5219 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_COMMA_in_initDeclaratorList5222 = new BitSet(new long[]{0x0200000000000000L,0x0000400000000200L});
	public static final BitSet FOLLOW_initDeclarator_in_initDeclaratorList5226 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_declarator_in_initDeclarator5256 = new BitSet(new long[]{0x0000000000000202L});
	public static final BitSet FOLLOW_ASSIGN_in_initDeclarator5281 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210248L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_initializer_in_initDeclarator5285 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_TYPEDEF_in_storageClassSpecifier5316 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_set_in_storageClassSpecifier5323 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_VOID_in_typeSpecifier5358 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CHAR_in_typeSpecifier5362 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SHORT_in_typeSpecifier5366 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INT_in_typeSpecifier5370 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LONG_in_typeSpecifier5374 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FLOAT_in_typeSpecifier5378 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DOUBLE_in_typeSpecifier5382 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SIGNED_in_typeSpecifier5387 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_UNSIGNED_in_typeSpecifier5391 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_BOOL_in_typeSpecifier5395 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COMPLEX_in_typeSpecifier5399 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_REAL_in_typeSpecifier5403 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RANGE_in_typeSpecifier5407 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_atomicTypeSpecifier_in_typeSpecifier5412 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_structOrUnionSpecifier_in_typeSpecifier5417 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_enumSpecifier_in_typeSpecifier5422 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typedefName_in_typeSpecifier5427 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_domainSpecifier_in_typeSpecifier5432 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeofSpecifier_in_typeSpecifier5440 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_memSpecifier_in_typeSpecifier5448 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_TYPEOF_in_typeofSpecifier5464 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_typeofSpecifier5466 = new BitSet(new long[]{0x0200080400100010L,0x900B4000A0210208L,0x9504CC890580612AL,0x0000000003D04799L,0x0000000008000000L});
	public static final BitSet FOLLOW_commaExpression_in_typeofSpecifier5478 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_typeofSpecifier5480 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeName_in_typeofSpecifier5514 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_typeofSpecifier5516 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_structOrUnion_in_structOrUnionSpecifier5564 = new BitSet(new long[]{0x0200000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_IDENTIFIER_in_structOrUnionSpecifier5573 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_structOrUnionSpecifier5575 = new BitSet(new long[]{0x0200000000000000L,0x8000000800000000L,0x9404CC0105806108L,0x0000000003D06180L});
	public static final BitSet FOLLOW_structDeclarationList_in_structOrUnionSpecifier5577 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_structOrUnionSpecifier5579 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LCURLY_in_structOrUnionSpecifier5607 = new BitSet(new long[]{0x0200000000000000L,0x8000000800000000L,0x9404CC0105806108L,0x0000000003D06180L});
	public static final BitSet FOLLOW_structDeclarationList_in_structOrUnionSpecifier5609 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_structOrUnionSpecifier5611 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENTIFIER_in_structOrUnionSpecifier5639 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_structDeclaration_in_structDeclarationList5693 = new BitSet(new long[]{0x0200000000000002L,0x8000000000000000L,0x9404CC0105806108L,0x0000000003D06180L});
	public static final BitSet FOLLOW_specifierQualifierList_in_structDeclaration5734 = new BitSet(new long[]{0x0200000000200000L,0x0000420000000200L});
	public static final BitSet FOLLOW_structDeclaratorList_in_structDeclaration5763 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_structDeclaration5798 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_staticAssertDeclaration_in_structDeclaration5806 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeSpecifierOrQualifier_in_specifierQualifierList5825 = new BitSet(new long[]{0x0200000000000002L,0x8000000000000000L,0x9404CC0105806108L,0x0000000003D04180L});
	public static final BitSet FOLLOW_structDeclarator_in_structDeclaratorList5862 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_COMMA_in_structDeclaratorList5865 = new BitSet(new long[]{0x0200000000200000L,0x0000400000000200L});
	public static final BitSet FOLLOW_structDeclarator_in_structDeclaratorList5869 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_declarator_in_structDeclarator5906 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_COLON_in_structDeclarator5935 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_constantExpression_in_structDeclarator5937 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COLON_in_structDeclarator5972 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_constantExpression_in_structDeclarator5974 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ENUM_in_enumSpecifier6009 = new BitSet(new long[]{0x0200000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_IDENTIFIER_in_enumSpecifier6021 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENTIFIER_in_enumSpecifier6053 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_enumSpecifier6055 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_enumeratorList_in_enumSpecifier6057 = new BitSet(new long[]{0x0000000000400000L,0x0000000800000000L});
	public static final BitSet FOLLOW_COMMA_in_enumSpecifier6059 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_enumSpecifier6062 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LCURLY_in_enumSpecifier6094 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_enumeratorList_in_enumSpecifier6096 = new BitSet(new long[]{0x0000000000400000L,0x0000000800000000L});
	public static final BitSet FOLLOW_COMMA_in_enumSpecifier6098 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_enumSpecifier6101 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_enumerator_in_enumeratorList6150 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_COMMA_in_enumeratorList6153 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_enumerator_in_enumeratorList6155 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_IDENTIFIER_in_enumerator6188 = new BitSet(new long[]{0x0000000000000202L});
	public static final BitSet FOLLOW_ASSIGN_in_enumerator6229 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_constantExpression_in_enumerator6231 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ATOMIC_in_atomicTypeSpecifier6277 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_atomicTypeSpecifier6279 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000003D04180L});
	public static final BitSet FOLLOW_typeName_in_atomicTypeSpecifier6281 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_atomicTypeSpecifier6283 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INLINE_in_functionSpecifier6355 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NORETURN_in_functionSpecifier6359 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_abstractSpecifier_in_functionSpecifier6367 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PURE_in_functionSpecifier6375 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STATE_F_in_functionSpecifier6389 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SYSTEM_in_functionSpecifier6412 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000800L});
	public static final BitSet FOLLOW_libraryName_in_functionSpecifier6414 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SYSTEM_in_functionSpecifier6431 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FATOMIC_in_functionSpecifier6448 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DEVICE_in_functionSpecifier6462 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_GLOBAL_in_functionSpecifier6470 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ABSTRACT_in_abstractSpecifier6487 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_abstractSpecifier6515 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_STRING_LITERAL_in_abstractSpecifier6517 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_abstractSpecifier6519 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LSQUARE_in_libraryName6575 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_libraryName6579 = new BitSet(new long[]{0x0200000000000000L,0x0002008000000000L});
	public static final BitSet FOLLOW_SUB_in_libraryName6584 = new BitSet(new long[]{0x0200000000000000L,0x0002008000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_libraryName6588 = new BitSet(new long[]{0x0200000000000000L,0x0002008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_libraryName6592 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ALIGNAS_in_alignmentSpecifier6625 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_alignmentSpecifier6627 = new BitSet(new long[]{0x0200080400100010L,0x900B4000A0210208L,0x9504CC890580612AL,0x0000000003D04799L,0x0000000008000000L});
	public static final BitSet FOLLOW_typeName_in_alignmentSpecifier6639 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_alignmentSpecifier6641 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_constantExpression_in_alignmentSpecifier6673 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_alignmentSpecifier6675 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_directDeclarator_in_declarator6723 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pointer_in_declarator6742 = new BitSet(new long[]{0x0200000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_directDeclarator_in_declarator6746 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_directDeclaratorPrefix_in_directDeclarator6775 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000A00L});
	public static final BitSet FOLLOW_directDeclaratorSuffix_in_directDeclarator6798 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000A00L});
	public static final BitSet FOLLOW_IDENTIFIER_in_directDeclaratorPrefix6830 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_directDeclaratorPrefix6839 = new BitSet(new long[]{0x0200000000000000L,0x0000400000000200L});
	public static final BitSet FOLLOW_declarator_in_directDeclaratorPrefix6842 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_directDeclaratorPrefix6844 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_directDeclaratorArraySuffix_in_directDeclaratorSuffix6857 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_directDeclaratorFunctionSuffix_in_directDeclaratorSuffix6862 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LSQUARE_in_directDeclaratorArraySuffix6875 = new BitSet(new long[]{0x0200080400100010L,0x900B4080A0210208L,0x8104048800004022L,0x0000000002001619L,0x0000000008000000L});
	public static final BitSet FOLLOW_typeQualifierList_opt_in_directDeclaratorArraySuffix6882 = new BitSet(new long[]{0x0200080400100010L,0x100B4080A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_assignmentExpression_opt_in_directDeclaratorArraySuffix6884 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_directDeclaratorArraySuffix6886 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STATIC_in_directDeclaratorArraySuffix6924 = new BitSet(new long[]{0x0200080400100010L,0x900B4000A0210208L,0x8104048800004022L,0x0000000002000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_typeQualifierList_opt_in_directDeclaratorArraySuffix6926 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_directDeclaratorArraySuffix6928 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_directDeclaratorArraySuffix6930 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeQualifierList_in_directDeclaratorArraySuffix6970 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000001000L});
	public static final BitSet FOLLOW_STATIC_in_directDeclaratorArraySuffix6972 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_directDeclaratorArraySuffix6974 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_directDeclaratorArraySuffix6976 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeQualifierList_opt_in_directDeclaratorArraySuffix7016 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
	public static final BitSet FOLLOW_STAR_in_directDeclaratorArraySuffix7018 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_directDeclaratorArraySuffix7020 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_directDeclaratorFunctionSuffix7079 = new BitSet(new long[]{0x0200000000000000L,0x8C00002000000000L,0xB605CE1165906109L,0x0000000003DD59C0L});
	public static final BitSet FOLLOW_parameterTypeList_in_directDeclaratorFunctionSuffix7086 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_directDeclaratorFunctionSuffix7088 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_identifierList_in_directDeclaratorFunctionSuffix7113 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_directDeclaratorFunctionSuffix7115 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_directDeclaratorFunctionSuffix7139 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeQualifier_in_typeQualifierList_opt7169 = new BitSet(new long[]{0x0000000000000002L,0x8000000000000000L,0x8004040000004000L,0x0000000002000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_assignmentExpression_opt7200 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pointer_part_in_pointer7216 = new BitSet(new long[]{0x0000000000000002L,0x0000400000000000L});
	public static final BitSet FOLLOW_STAR_in_pointer_part7242 = new BitSet(new long[]{0x0000000000000000L,0x8000000000000000L,0x8004040000004000L,0x0000000002000000L});
	public static final BitSet FOLLOW_typeQualifierList_opt_in_pointer_part7244 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeQualifier_in_typeQualifierList7268 = new BitSet(new long[]{0x0000000000000002L,0x8000000000000000L,0x8004040000004000L,0x0000000002000000L});
	public static final BitSet FOLLOW_parameterTypeListWithoutScope_in_parameterTypeList7297 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_parameterTypeListWithScope_in_parameterTypeList7304 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_parameterTypeListWithoutScope_in_parameterTypeListWithScope7325 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_parameterList_in_parameterTypeListWithoutScope7339 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_COMMA_in_parameterTypeListWithoutScope7367 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_ELLIPSIS_in_parameterTypeListWithoutScope7369 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_parameterDeclaration_in_parameterList7414 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_COMMA_in_parameterList7417 = new BitSet(new long[]{0x0200000000000000L,0x8C00000000000000L,0xB605CE1165906109L,0x0000000003DD59C0L});
	public static final BitSet FOLLOW_parameterDeclaration_in_parameterList7419 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_declarationSpecifiers_in_parameterDeclaration7465 = new BitSet(new long[]{0x0200000000000002L,0x0000400000000A00L});
	public static final BitSet FOLLOW_declaratorOrAbstractDeclarator_in_parameterDeclaration7497 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarator_in_declaratorOrAbstractDeclarator7562 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_abstractDeclarator_in_declaratorOrAbstractDeclarator7567 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENTIFIER_in_identifierList7584 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_COMMA_in_identifierList7588 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_identifierList7590 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_specifierQualifierList_in_typeName7621 = new BitSet(new long[]{0x0000000000000002L,0x0000400000000A00L});
	public static final BitSet FOLLOW_abstractDeclarator_in_typeName7649 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pointer_in_abstractDeclarator7694 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_directAbstractDeclarator_in_abstractDeclarator7718 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pointer_in_abstractDeclarator7742 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000A00L});
	public static final BitSet FOLLOW_directAbstractDeclarator_in_abstractDeclarator7744 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_directAbstractDeclarator7779 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000A00L});
	public static final BitSet FOLLOW_abstractDeclarator_in_directAbstractDeclarator7781 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_directAbstractDeclarator7783 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000A00L});
	public static final BitSet FOLLOW_directAbstractDeclaratorSuffix_in_directAbstractDeclarator7785 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000A00L});
	public static final BitSet FOLLOW_directAbstractDeclaratorSuffix_in_directAbstractDeclarator7822 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000A00L});
	public static final BitSet FOLLOW_IDENTIFIER_in_typedefName7862 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LSQUARE_in_directAbstractDeclaratorSuffix7895 = new BitSet(new long[]{0x0200080400100010L,0x900B4080A0210208L,0x8104048800004022L,0x0000000002001619L,0x0000000008000000L});
	public static final BitSet FOLLOW_typeQualifierList_opt_in_directAbstractDeclaratorSuffix7905 = new BitSet(new long[]{0x0200080400100010L,0x100B4080A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_assignmentExpression_opt_in_directAbstractDeclaratorSuffix7907 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_directAbstractDeclaratorSuffix7909 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STATIC_in_directAbstractDeclaratorSuffix7954 = new BitSet(new long[]{0x0200080400100010L,0x900B4000A0210208L,0x8104048800004022L,0x0000000002000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_typeQualifierList_opt_in_directAbstractDeclaratorSuffix7956 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_directAbstractDeclaratorSuffix7958 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_directAbstractDeclaratorSuffix7960 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeQualifierList_in_directAbstractDeclaratorSuffix8005 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000001000L});
	public static final BitSet FOLLOW_STATIC_in_directAbstractDeclaratorSuffix8007 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_directAbstractDeclaratorSuffix8009 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_directAbstractDeclaratorSuffix8011 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STAR_in_directAbstractDeclaratorSuffix8043 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_directAbstractDeclaratorSuffix8045 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_directAbstractDeclaratorSuffix8083 = new BitSet(new long[]{0x0200000000000000L,0x8C00002000000000L,0xB605CE1165906109L,0x0000000003DD59C0L});
	public static final BitSet FOLLOW_parameterTypeList_in_directAbstractDeclaratorSuffix8093 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_directAbstractDeclaratorSuffix8095 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_directAbstractDeclaratorSuffix8125 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_assignmentExpression_in_initializer8172 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LCURLY_in_initializer8188 = new BitSet(new long[]{0x0200080410100010L,0x100B4000A0210A48L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_initializerList_in_initializer8190 = new BitSet(new long[]{0x0000000000400000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_initializer8204 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_initializer8218 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_initializer8220 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_designatedInitializer_in_initializerList8259 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_COMMA_in_initializerList8262 = new BitSet(new long[]{0x0200080410100010L,0x100B4000A0210A48L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_designatedInitializer_in_initializerList8264 = new BitSet(new long[]{0x0000000000400002L});
	public static final BitSet FOLLOW_initializer_in_designatedInitializer8295 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_designation_in_designatedInitializer8313 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210248L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_initializer_in_designatedInitializer8315 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_designatorList_in_designation8344 = new BitSet(new long[]{0x0000000000000200L});
	public static final BitSet FOLLOW_ASSIGN_in_designation8346 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_designator_in_designatorList8373 = new BitSet(new long[]{0x0000000010000002L,0x0000000000000800L});
	public static final BitSet FOLLOW_LSQUARE_in_designator8393 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_constantExpression_in_designator8395 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_designator8397 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DOT_in_designator8419 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_designator8421 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STATICASSERT_in_staticAssertDeclaration8454 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_staticAssertDeclaration8456 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_constantExpression_in_staticAssertDeclaration8458 = new BitSet(new long[]{0x0000000000400000L});
	public static final BitSet FOLLOW_COMMA_in_staticAssertDeclaration8460 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_STRING_LITERAL_in_staticAssertDeclaration8462 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_staticAssertDeclaration8470 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_staticAssertDeclaration8472 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DOMAIN_in_domainSpecifier8504 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_domainSpecifier8522 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_INTEGER_CONSTANT_in_domainSpecifier8524 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_domainSpecifier8526 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_MEM_TYPE_in_memSpecifier8557 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_labeledStatement_in_statement8581 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_compoundStatement_in_statement8597 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expressionStatement_in_statement8613 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_selectionStatement_in_statement8629 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_iterationStatement_in_statement8645 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_jumpStatement_in_statement8661 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_whenStatement_in_statement8677 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_chooseStatement_in_statement8693 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_atomicStatement_in_statement8709 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_runStatement_in_statement8725 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_asmStatement_in_statement8741 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_statement_in_statementWithScope8773 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pragma_in_statementWithScope8778 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019000AE08430E72L,0x000000000C00861FL,0x0000000008000000L});
	public static final BitSet FOLLOW_statement_in_statementWithScope8781 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENTIFIER_in_labeledStatement8820 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_COLON_in_labeledStatement8822 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x011000AE08430E72L,0x000000000C00861FL,0x0000000008000000L});
	public static final BitSet FOLLOW_statement_in_labeledStatement8824 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CASE_in_labeledStatement8848 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008800000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_constantExpression_in_labeledStatement8850 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_COLON_in_labeledStatement8852 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x011000AE08430E72L,0x000000000C00861FL,0x0000000008000000L});
	public static final BitSet FOLLOW_statement_in_labeledStatement8854 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DEFAULT_in_labeledStatement8880 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_COLON_in_labeledStatement8882 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x011000AE08430E72L,0x000000000C00861FL,0x0000000008000000L});
	public static final BitSet FOLLOW_statement_in_labeledStatement8884 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LCURLY_in_compoundStatement8934 = new BitSet(new long[]{0x0600080400100090L,0xBC0B4208A0210249L,0xB795CEBF6DD36F7BL,0x000000000FDDFFDFL,0x0000000008000000L});
	public static final BitSet FOLLOW_RCURLY_in_compoundStatement8944 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_blockItemList_in_compoundStatement8974 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_compoundStatement8976 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_blockItem_in_blockItemList9023 = new BitSet(new long[]{0x0600080400100092L,0xBC0B4200A0210249L,0xB795CEBF6DD36F7BL,0x000000000FDDFFDFL,0x0000000008000000L});
	public static final BitSet FOLLOW_expression_in_expressionStatement9052 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_expressionStatement9054 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SEMI_in_expressionStatement9072 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IF_in_selectionStatement9111 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_selectionStatement9113 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_expression_in_selectionStatement9115 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_selectionStatement9117 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019000AE08430E72L,0x000000000C00861FL,0x0000000008000000L});
	public static final BitSet FOLLOW_statementWithScope_in_selectionStatement9121 = new BitSet(new long[]{0x0000000800000002L});
	public static final BitSet FOLLOW_ELSE_in_selectionStatement9138 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019000AE08430E72L,0x000000000C00861FL,0x0000000008000000L});
	public static final BitSet FOLLOW_statementWithScope_in_selectionStatement9142 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SWITCH_in_selectionStatement9207 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_selectionStatement9209 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_expression_in_selectionStatement9211 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_selectionStatement9213 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019000AE08430E72L,0x000000000C00861FL,0x0000000008000000L});
	public static final BitSet FOLLOW_statementWithScope_in_selectionStatement9217 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_WHILE_in_iterationStatement9260 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_iterationStatement9262 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_expression_in_iterationStatement9264 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_iterationStatement9266 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019010AE08430E72L,0x000000000C00861FL,0x0000000008000000L});
	public static final BitSet FOLLOW_invariant_opt_in_iterationStatement9268 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019000AE08430E72L,0x000000000C00861FL,0x0000000008000000L});
	public static final BitSet FOLLOW_statementWithScope_in_iterationStatement9275 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DO_in_iterationStatement9296 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019000AE08430E72L,0x000000000C00861FL,0x0000000008000000L});
	public static final BitSet FOLLOW_statementWithScope_in_iterationStatement9300 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000008000000L});
	public static final BitSet FOLLOW_WHILE_in_iterationStatement9302 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_iterationStatement9304 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_expression_in_iterationStatement9306 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_iterationStatement9308 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L,0x0000100000000000L});
	public static final BitSet FOLLOW_invariant_opt_in_iterationStatement9313 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_iterationStatement9315 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FOR_in_iterationStatement9336 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_iterationStatement9338 = new BitSet(new long[]{0x0200080400100010L,0x9C0B4200A0210208L,0xB705CE9D6D90612BL,0x0000000003DD7FD9L,0x0000000008000000L});
	public static final BitSet FOLLOW_declaration_in_iterationStatement9352 = new BitSet(new long[]{0x0200080400100010L,0x100B4200A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_expression_opt_in_iterationStatement9356 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_iterationStatement9358 = new BitSet(new long[]{0x0200080400100010L,0x100B4020A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_expression_opt_in_iterationStatement9362 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_iterationStatement9369 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019010AE08430E72L,0x000000000C00861FL,0x0000000008000000L});
	public static final BitSet FOLLOW_invariant_opt_in_iterationStatement9373 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019000AE08430E72L,0x000000000C00861FL,0x0000000008000000L});
	public static final BitSet FOLLOW_statementWithScope_in_iterationStatement9377 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expression_opt_in_iterationStatement9412 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_iterationStatement9414 = new BitSet(new long[]{0x0200080400100010L,0x100B4200A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_expression_opt_in_iterationStatement9418 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_iterationStatement9420 = new BitSet(new long[]{0x0200080400100010L,0x100B4020A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_expression_opt_in_iterationStatement9429 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_iterationStatement9431 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019010AE08430E72L,0x000000000C00861FL,0x0000000008000000L});
	public static final BitSet FOLLOW_invariant_opt_in_iterationStatement9435 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019000AE08430E72L,0x000000000C00861FL,0x0000000008000000L});
	public static final BitSet FOLLOW_statementWithScope_in_iterationStatement9444 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CIVLFOR_in_iterationStatement9483 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_PARFOR_in_iterationStatement9489 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_iterationStatement9492 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000003D04180L});
	public static final BitSet FOLLOW_typeName_opt_in_iterationStatement9501 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_identifierList_in_iterationStatement9505 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_COLON_in_iterationStatement9507 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_expression_in_iterationStatement9511 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_iterationStatement9513 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019010AE08430E72L,0x000000000C00861FL,0x0000000008000000L});
	public static final BitSet FOLLOW_invariant_opt_in_iterationStatement9522 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019000AE08430E72L,0x000000000C00861FL,0x0000000008000000L});
	public static final BitSet FOLLOW_statementWithScope_in_iterationStatement9526 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expression_in_expression_opt9564 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INVARIANT_in_invariant_opt9589 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_invariant_opt9591 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_expression_in_invariant_opt9593 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_invariant_opt9595 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeName_in_typeName_opt9616 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_GOTO_in_jumpStatement9639 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_jumpStatement9641 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_jumpStatement9643 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CONTINUE_in_jumpStatement9661 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_jumpStatement9663 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_BREAK_in_jumpStatement9679 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_jumpStatement9681 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RETURN_in_jumpStatement9697 = new BitSet(new long[]{0x0200080400100010L,0x100B4200A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_expression_opt_in_jumpStatement9699 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_jumpStatement9701 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PPRAGMA_in_pragma9730 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_pragma9732 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
	public static final BitSet FOLLOW_NEWLINE_in_pragma9734 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PPRAGMA_in_pragma9764 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_pragma9766 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFEFFFFFL,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x0000000FFFFFFFFFL});
	public static final BitSet FOLLOW_inlineList_in_pragma9768 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
	public static final BitSet FOLLOW_NEWLINE_in_pragma9770 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INLINE_ANNOTATION_START_in_annotation9826 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x0000000FFFFFFFFFL});
	public static final BitSet FOLLOW_NEWLINE_in_annotation9835 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_inlineList_in_annotation9865 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
	public static final BitSet FOLLOW_NEWLINE_in_annotation9867 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ANNOTATION_START_in_annotation9904 = new BitSet(new long[]{0x0000000000000040L});
	public static final BitSet FOLLOW_ANNOTATION_END_in_annotation9906 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ANNOTATION_START_in_annotation9934 = new BitSet(new long[]{0xFFFFFFFFFFFFFFB0L,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x0000000FFFFFFFFFL});
	public static final BitSet FOLLOW_annotationBody_in_annotation9936 = new BitSet(new long[]{0x0000000000000040L});
	public static final BitSet FOLLOW_ANNOTATION_END_in_annotation9938 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RUN_in_runStatement9992 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x011000AE08430E72L,0x000000000C00861FL,0x0000000008000000L});
	public static final BitSet FOLLOW_statement_in_runStatement9994 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_set_in_balancedToken10016 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_balancedToken10028 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x0000000FFFFFFFFFL});
	public static final BitSet FOLLOW_balancedToken_in_balancedToken10030 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x0000000FFFFFFFFFL});
	public static final BitSet FOLLOW_RPAREN_in_balancedToken10033 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ASM_in_asmStatement10044 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L,0x0000002000000000L,0x0000000002000000L});
	public static final BitSet FOLLOW_VOLATILE_in_asmStatement10046 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L,0x0000002000000000L});
	public static final BitSet FOLLOW_GOTO_in_asmStatement10049 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_asmStatement10052 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x0000000FFFFFFFFFL});
	public static final BitSet FOLLOW_balancedToken_in_asmStatement10057 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x0000000FFFFFFFFFL});
	public static final BitSet FOLLOW_RPAREN_in_asmStatement10063 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_SEMI_in_asmStatement10065 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_WHEN_in_whenStatement10100 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_whenStatement10102 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_expression_in_whenStatement10104 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_whenStatement10106 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x011000AE08430E72L,0x000000000C00861FL,0x0000000008000000L});
	public static final BitSet FOLLOW_statement_in_whenStatement10108 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CHOOSE_in_chooseStatement10133 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_chooseStatement10135 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x011000AE08430E72L,0x000000000C00861FL,0x0000000008000000L});
	public static final BitSet FOLLOW_statement_in_chooseStatement10137 = new BitSet(new long[]{0x0600080400100010L,0x300B4208A0210248L,0x011000AE08430E72L,0x000000000C00861FL,0x0000000008000000L});
	public static final BitSet FOLLOW_RCURLY_in_chooseStatement10140 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CIVLATOMIC_in_atomicStatement10162 = new BitSet(new long[]{0x0600080400100010L,0x300B4200A0210248L,0x019000AE08430E72L,0x000000000C00861FL,0x0000000008000000L});
	public static final BitSet FOLLOW_statementWithScope_in_atomicStatement10166 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarator_in_functionDefinition10204 = new BitSet(new long[]{0x0200000000000000L,0xCC00000000000040L,0xFE05CE5167946109L,0x0000000003DD79C0L});
	public static final BitSet FOLLOW_contract_in_functionDefinition10209 = new BitSet(new long[]{0x0200000000000000L,0x8C00000000000040L,0xB605CE1165906109L,0x0000000003DD79C0L});
	public static final BitSet FOLLOW_declarationList_opt_in_functionDefinition10214 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_compoundStatement_in_functionDefinition10219 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarationSpecifiers_in_functionDefinition10264 = new BitSet(new long[]{0x0200000000000000L,0x0000400000000200L});
	public static final BitSet FOLLOW_declarator_in_functionDefinition10269 = new BitSet(new long[]{0x0200000000000000L,0xCC00000000000040L,0xFE05CE5167946109L,0x0000000003DD79C0L});
	public static final BitSet FOLLOW_contract_in_functionDefinition10274 = new BitSet(new long[]{0x0200000000000000L,0x8C00000000000040L,0xB605CE1165906109L,0x0000000003DD79C0L});
	public static final BitSet FOLLOW_declarationList_opt_in_functionDefinition10279 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_compoundStatement_in_functionDefinition10284 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declaration_in_declarationList_opt10333 = new BitSet(new long[]{0x0200000000000002L,0x8C00000000000000L,0xB605CE1165906109L,0x0000000003DD79C0L});
	public static final BitSet FOLLOW_separationLogicItem_in_contractItem10356 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_porItem_in_contractItem10364 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_REQUIRES_in_separationLogicItem10384 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_separationLogicItem10386 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_expression_in_separationLogicItem10388 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_separationLogicItem10390 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ENSURES_in_separationLogicItem10405 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_separationLogicItem10407 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_expression_in_separationLogicItem10409 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_separationLogicItem10411 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DEPENDS_in_porItem10444 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000840L});
	public static final BitSet FOLLOW_LSQUARE_in_porItem10447 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_expression_in_porItem10449 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_porItem10451 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_porItem10455 = new BitSet(new long[]{0x0200080400100010L,0x100B4008A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_argumentExpressionList_in_porItem10457 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_porItem10459 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_GUARD_in_porItem10484 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000840L});
	public static final BitSet FOLLOW_LSQUARE_in_porItem10487 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_expression_in_porItem10489 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_porItem10491 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_porItem10495 = new BitSet(new long[]{0x0200080400100010L,0x100B4008A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_argumentExpressionList_in_porItem10497 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_porItem10499 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ASSIGNS_in_porItem10524 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000840L});
	public static final BitSet FOLLOW_LSQUARE_in_porItem10527 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_expression_in_porItem10529 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_porItem10531 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_porItem10535 = new BitSet(new long[]{0x0200080400100010L,0x100B4008A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_argumentExpressionList_in_porItem10537 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_porItem10539 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_READS_in_porItem10564 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000840L});
	public static final BitSet FOLLOW_LSQUARE_in_porItem10567 = new BitSet(new long[]{0x0200080400100010L,0x100B4000A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_expression_in_porItem10569 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_porItem10571 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_porItem10575 = new BitSet(new long[]{0x0200080400100010L,0x100B4008A0210208L,0x0100008C08000022L,0x0000000000000619L,0x0000000008000000L});
	public static final BitSet FOLLOW_argumentExpressionList_in_porItem10577 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RCURLY_in_porItem10579 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_contractItem_in_contract10613 = new BitSet(new long[]{0x0000000000000002L,0x4000000000000000L,0x4800004002040000L});
	public static final BitSet FOLLOW_blockItem_in_blockItemWithScope10647 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_functionDefinition_in_blockItem10672 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_functionDefinition_in_blockItem10693 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declaration_in_blockItem10698 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pragma_in_blockItem10703 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_annotation_in_blockItem10708 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_statement_in_blockItem10713 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_blockItem_in_translationUnit10743 = new BitSet(new long[]{0x0600080400100090L,0xBC0B4200A0210249L,0xB795CEBF6DD36F7BL,0x000000000FDDFFDFL,0x0000000008000000L});
	public static final BitSet FOLLOW_EOF_in_translationUnit10746 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_synpred1_CivlCParser2087 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000003D04180L});
	public static final BitSet FOLLOW_typeName_in_synpred1_CivlCParser2089 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_synpred1_CivlCParser2091 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_synpred1_CivlCParser2093 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SIZEOF_in_synpred2_CivlCParser2396 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_synpred2_CivlCParser2398 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000003D04180L});
	public static final BitSet FOLLOW_typeName_in_synpred2_CivlCParser2400 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_synpred3_CivlCParser2768 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000003D04180L});
	public static final BitSet FOLLOW_typeName_in_synpred3_CivlCParser2770 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_synpred3_CivlCParser2772 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFBFL,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x0000000FFFFFFFFFL});
	public static final BitSet FOLLOW_set_in_synpred3_CivlCParser2774 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STAR_in_synpred4_CivlCParser2853 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DIV_in_synpred5_CivlCParser2904 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_MOD_in_synpred6_CivlCParser2955 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PLUS_in_synpred7_CivlCParser3036 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SUB_in_synpred8_CivlCParser3085 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DOTDOT_in_synpred9_CivlCParser3160 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_HASH_in_synpred10_CivlCParser3237 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SHIFTLEFT_in_synpred11_CivlCParser3313 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SHIFTRIGHT_in_synpred12_CivlCParser3362 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_relationalOperator_in_synpred13_CivlCParser3443 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_equalityOperator_in_synpred14_CivlCParser3581 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_AMPERSAND_in_synpred15_CivlCParser3716 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_BITXOR_in_synpred16_CivlCParser3799 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_BITOR_in_synpred17_CivlCParser3882 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_AND_in_synpred18_CivlCParser3965 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_OR_in_synpred19_CivlCParser4056 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IMPLIES_in_synpred20_CivlCParser4150 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_QMARK_in_synpred21_CivlCParser4236 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_synpred22_CivlCParser4411 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000003D04180L});
	public static final BitSet FOLLOW_typeName_in_synpred22_CivlCParser4413 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RPAREN_in_synpred22_CivlCParser4415 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000200000000000L});
	public static final BitSet FOLLOW_LAMBDA_in_synpred22_CivlCParser4417 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_synpred22_CivlCParser4419 = new BitSet(new long[]{0x0200000000000000L,0x8000000000000000L,0x9404CC0105806108L,0x0000000003D04180L});
	public static final BitSet FOLLOW_boundVariableDeclarationList_in_synpred22_CivlCParser4437 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_BITOR_in_synpred22_CivlCParser4439 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_arrayLambdaExpression_in_synpred23_CivlCParser4752 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_unaryExpression_in_synpred24_CivlCParser4762 = new BitSet(new long[]{0x000000000800AA00L,0x0004A80040040000L});
	public static final BitSet FOLLOW_assignmentOperator_in_synpred24_CivlCParser4764 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_synpred25_CivlCParser4925 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeSpecifier_in_synpred26_CivlCParser5190 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SYSTEM_in_synpred27_CivlCParser6405 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000800L});
	public static final BitSet FOLLOW_libraryName_in_synpred27_CivlCParser6407 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarator_in_synpred28_CivlCParser7558 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ELSE_in_synpred29_CivlCParser9134 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarator_in_synpred30_CivlCParser10659 = new BitSet(new long[]{0x0200000000000000L,0xCC00000000000040L,0xFE05CE5167946109L,0x0000000003DD79C0L});
	public static final BitSet FOLLOW_contract_in_synpred30_CivlCParser10661 = new BitSet(new long[]{0x0200000000000000L,0x8C00000000000040L,0xB605CE1165906109L,0x0000000003DD79C0L});
	public static final BitSet FOLLOW_declarationList_opt_in_synpred30_CivlCParser10663 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_synpred30_CivlCParser10665 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarationSpecifiers_in_synpred31_CivlCParser10678 = new BitSet(new long[]{0x0200000000000000L,0x0000400000000200L});
	public static final BitSet FOLLOW_declarator_in_synpred31_CivlCParser10680 = new BitSet(new long[]{0x0200000000000000L,0xCC00000000000040L,0xFE05CE5167946109L,0x0000000003DD79C0L});
	public static final BitSet FOLLOW_contract_in_synpred31_CivlCParser10682 = new BitSet(new long[]{0x0200000000000000L,0x8C00000000000040L,0xB605CE1165906109L,0x0000000003DD79C0L});
	public static final BitSet FOLLOW_declarationList_opt_in_synpred31_CivlCParser10684 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_LCURLY_in_synpred31_CivlCParser10686 = new BitSet(new long[]{0x0000000000000002L});
}