Package com.icona.antlr.main

Source Code of com.icona.antlr.main.ObjectiveCParser

// $ANTLR 3.4 C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g 2012-01-29 03:29:52

  package com.icona.antlr.main; 
  import com.icona.tree.nodes.BasicModifier;
  import com.icona.tree.nodes.Declaration;
  import com.icona.tree.nodes.Expression;
  import com.icona.tree.nodes.Expression.AssignmentExpression;
  import com.icona.tree.nodes.Expression.BinaryExpression;
  import com.icona.tree.nodes.Expression.ListExpression;
  import com.icona.tree.nodes.Expression.PostfixExpression;
  import com.icona.tree.nodes.Expression.PrimaryExpression;
  import com.icona.tree.nodes.Expression.TertiaryExpression;
  import com.icona.tree.nodes.Expression.UnaryExpression;
  import com.icona.tree.nodes.GenericRef.RefType;
  import com.icona.tree.nodes.Identifier;
  import com.icona.tree.nodes.Node;
  import com.icona.tree.nodes.Operator.AssignmentOperator;
  import com.icona.tree.nodes.Operator.AssignmentOperator.AssignmentSymbol;
  import com.icona.tree.nodes.Operator.BinaryOperator;
  import com.icona.tree.nodes.Operator.BinaryOperator.BinarySymbol;
  import com.icona.tree.nodes.Operator.UnaryOperator;
  import com.icona.tree.nodes.Operator.UnaryOperator.UnarySymbol;
  import com.icona.tree.nodes.SourceFile;
  import com.icona.tree.nodes.Specifier;
  import com.icona.tree.nodes.Statement;
  import com.icona.tree.nodes.Statement.ListDeclaration;
  import com.icona.tree.nodes.Type;
  import com.icona.tree.nodes.Type.ArrayType;
  import com.icona.tree.nodes.Type.BasicDataType;
  import com.icona.tree.nodes.MethodType;
  import com.icona.tree.nodes.FunctionDefinition;
  import com.icona.tree.nodes.Protocol;


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

@SuppressWarnings({"all", "warnings", "unchecked"})
public class ObjectiveCParser extends Parser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "CHARACTER_LITERAL", "DECIMAL_LITERAL", "EscapeSequence", "Exponent", "FLOATING_POINT_LITERAL", "FloatTypeSuffix", "HEX_LITERAL", "HexDigit", "IDENTIFIER", "IntegerTypeSuffix", "LETTER", "OCTAL_LITERAL", "OctalEscape", "STRING_LITERAL", "UnicodeEscape", "WS", "'!'", "'!='", "'%'", "'%='", "'&&'", "'&'", "'&='", "'('", "')'", "'*'", "'*='", "'+'", "'++'", "'+='", "','", "'-'", "'--'", "'-='", "'...'", "'/'", "'/='", "':'", "';'", "'<'", "'<<'", "'<<='", "'<='", "'='", "'=='", "'>'", "'>='", "'>>'", "'>>='", "'?'", "'@end'", "'@implementation'", "'@interface'", "'@optional'", "'@package'", "'@private'", "'@protected'", "'@protocol'", "'@public'", "'@required'", "'BOOL'", "'['", "']'", "'^'", "'^='", "'auto'", "'case'", "'char'", "'const'", "'default'", "'do'", "'double'", "'else'", "'extern'", "'float'", "'for'", "'if'", "'int'", "'long'", "'register'", "'short'", "'signed'", "'static'", "'switch'", "'unichar'", "'unsigned'", "'void'", "'volatile'", "'while'", "'{'", "'|'", "'|='", "'||'", "'}'", "'~'"
    };

    public static final int EOF=-1;
    public static final int T__20=20;
    public static final int T__21=21;
    public static final int T__22=22;
    public static final int T__23=23;
    public static final int T__24=24;
    public static final int T__25=25;
    public static final int T__26=26;
    public static final int T__27=27;
    public static final int T__28=28;
    public static final int T__29=29;
    public static final int T__30=30;
    public static final int T__31=31;
    public static final int T__32=32;
    public static final int T__33=33;
    public static final int T__34=34;
    public static final int T__35=35;
    public static final int T__36=36;
    public static final int T__37=37;
    public static final int T__38=38;
    public static final int T__39=39;
    public static final int T__40=40;
    public static final int T__41=41;
    public static final int T__42=42;
    public static final int T__43=43;
    public static final int T__44=44;
    public static final int T__45=45;
    public static final int T__46=46;
    public static final int T__47=47;
    public static final int T__48=48;
    public static final int T__49=49;
    public static final int T__50=50;
    public static final int T__51=51;
    public static final int T__52=52;
    public static final int T__53=53;
    public static final int T__54=54;
    public static final int T__55=55;
    public static final int T__56=56;
    public static final int T__57=57;
    public static final int T__58=58;
    public static final int T__59=59;
    public static final int T__60=60;
    public static final int T__61=61;
    public static final int T__62=62;
    public static final int T__63=63;
    public static final int T__64=64;
    public static final int T__65=65;
    public static final int T__66=66;
    public static final int T__67=67;
    public static final int T__68=68;
    public static final int T__69=69;
    public static final int T__70=70;
    public static final int T__71=71;
    public static final int T__72=72;
    public static final int T__73=73;
    public static final int T__74=74;
    public static final int T__75=75;
    public static final int T__76=76;
    public static final int T__77=77;
    public static final int T__78=78;
    public static final int T__79=79;
    public static final int T__80=80;
    public static final int T__81=81;
    public static final int T__82=82;
    public static final int T__83=83;
    public static final int T__84=84;
    public static final int T__85=85;
    public static final int T__86=86;
    public static final int T__87=87;
    public static final int T__88=88;
    public static final int T__89=89;
    public static final int T__90=90;
    public static final int T__91=91;
    public static final int T__92=92;
    public static final int T__93=93;
    public static final int T__94=94;
    public static final int T__95=95;
    public static final int T__96=96;
    public static final int T__97=97;
    public static final int T__98=98;
    public static final int CHARACTER_LITERAL=4;
    public static final int DECIMAL_LITERAL=5;
    public static final int EscapeSequence=6;
    public static final int Exponent=7;
    public static final int FLOATING_POINT_LITERAL=8;
    public static final int FloatTypeSuffix=9;
    public static final int HEX_LITERAL=10;
    public static final int HexDigit=11;
    public static final int IDENTIFIER=12;
    public static final int IntegerTypeSuffix=13;
    public static final int LETTER=14;
    public static final int OCTAL_LITERAL=15;
    public static final int OctalEscape=16;
    public static final int STRING_LITERAL=17;
    public static final int UnicodeEscape=18;
    public static final int WS=19;

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

    // delegators


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

    public String[] getTokenNames() { return ObjectiveCParser.tokenNames; }
    public String getGrammarFileName() { return "C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g"; }


      SourceFile src=new SourceFile(null,-1);
     
      public SourceFile getSrc(){
        return src;
      }
      private Declaration mergeAndCreateDeclaration(Declaration declaration,Identifier identifier,ArrayType arrayType, Expression initializations){
        Declaration decl=(Declaration)declaration.clone();
        decl.setIdentifier(identifier);
        decl.setArrayDimensions(arrayType);
        decl.setListExpression(initializations);
       
        return decl;
      }
     
      private BinaryExpression createAndMergeBinaryExpression(Expression parent,int line_no,BinarySymbol op,Expression prev,BinaryExpression addTo,Expression newExpression){
        BinaryExpression temp=new BinaryExpression(parent,line_no,op);
       
        temp.setLhs((Expression)prev);
        temp.setRhs((Expression)newExpression);
        addTo.setRhs((Expression)temp);
       
        return temp;
      }
     
      private AssignmentExpression createAndMergeAssignmentExpression(Expression parent,int line_no,AssignmentSymbol op,Expression prev,AssignmentExpression addTo,Expression newExpression){
        AssignmentExpression temp=new AssignmentExpression(parent,line_no,op);
       
        temp.setTarget((Expression)prev);
        temp.setValue((Expression)newExpression);
        addTo.setValue((Expression)temp);
       
        return temp;
      }



    // $ANTLR start "translation_unit"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:84:1: translation_unit : (ed= external_declaration )+ EOF ;
    public final void translation_unit() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:85:2: ( (ed= external_declaration )+ EOF )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:86:3: (ed= external_declaration )+ EOF
            {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:86:3: (ed= external_declaration )+
            int cnt1=0;
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

                if ( ((LA1_0 >= CHARACTER_LITERAL && LA1_0 <= DECIMAL_LITERAL)||LA1_0==FLOATING_POINT_LITERAL||LA1_0==HEX_LITERAL||LA1_0==IDENTIFIER||LA1_0==OCTAL_LITERAL||LA1_0==STRING_LITERAL||LA1_0==20||LA1_0==25||LA1_0==27||LA1_0==29||LA1_0==32||(LA1_0 >= 35 && LA1_0 <= 36)||LA1_0==42||(LA1_0 >= 55 && LA1_0 <= 56)||LA1_0==61||LA1_0==64||(LA1_0 >= 69 && LA1_0 <= 75)||(LA1_0 >= 77 && LA1_0 <= 93)||LA1_0==98) ) {
                    alt1=1;
                }


                switch (alt1) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:87:4: ed= external_declaration
                  {
                  pushFollow(FOLLOW_external_declaration_in_translation_unit66);
                  external_declaration();

                  state._fsp--;
                  if (state.failed) return ;

                  }
                  break;

              default :
                  if ( cnt1 >= 1 ) break loop1;
                  if (state.backtracking>0) {state.failed=true; return ;}
                        EarlyExitException eee =
                            new EarlyExitException(1, input);
                        throw eee;
                }
                cnt1++;
            } while (true);


            match(input,EOF,FOLLOW_EOF_in_translation_unit74); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "translation_unit"



    // $ANTLR start "external_declaration"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:90:1: external_declaration : (d= declaration |stmt= statement | class_interface | class_implementation | protocol_declaration | protocol_declaration_list );
    public final void external_declaration() throws RecognitionException {
        ListDeclaration d =null;

        Statement stmt =null;


        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:92:2: (d= declaration |stmt= statement | class_interface | class_implementation | protocol_declaration | protocol_declaration_list )
            int alt2=6;
            switch ( input.LA(1) ) {
            case 69:
                {
                int LA2_1 = input.LA(2);

                if ( (synpred2_ObjectiveC()) ) {
                    alt2=1;
                }
                else if ( (synpred3_ObjectiveC()) ) {
                    alt2=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 1, input);

                    throw nvae;

                }
                }
                break;
            case 83:
                {
                int LA2_2 = input.LA(2);

                if ( (synpred2_ObjectiveC()) ) {
                    alt2=1;
                }
                else if ( (synpred3_ObjectiveC()) ) {
                    alt2=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 2, input);

                    throw nvae;

                }
                }
                break;
            case 86:
                {
                int LA2_3 = input.LA(2);

                if ( (synpred2_ObjectiveC()) ) {
                    alt2=1;
                }
                else if ( (synpred3_ObjectiveC()) ) {
                    alt2=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 3, input);

                    throw nvae;

                }
                }
                break;
            case 77:
                {
                int LA2_4 = input.LA(2);

                if ( (synpred2_ObjectiveC()) ) {
                    alt2=1;
                }
                else if ( (synpred3_ObjectiveC()) ) {
                    alt2=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 4, input);

                    throw nvae;

                }
                }
                break;
            case 90:
                {
                int LA2_5 = input.LA(2);

                if ( (synpred2_ObjectiveC()) ) {
                    alt2=1;
                }
                else if ( (synpred3_ObjectiveC()) ) {
                    alt2=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 5, input);

                    throw nvae;

                }
                }
                break;
            case 71:
                {
                int LA2_6 = input.LA(2);

                if ( (synpred2_ObjectiveC()) ) {
                    alt2=1;
                }
                else if ( (synpred3_ObjectiveC()) ) {
                    alt2=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 6, input);

                    throw nvae;

                }
                }
                break;
            case 84:
                {
                int LA2_7 = input.LA(2);

                if ( (synpred2_ObjectiveC()) ) {
                    alt2=1;
                }
                else if ( (synpred3_ObjectiveC()) ) {
                    alt2=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 7, input);

                    throw nvae;

                }
                }
                break;
            case 82:
                {
                int LA2_8 = input.LA(2);

                if ( (synpred2_ObjectiveC()) ) {
                    alt2=1;
                }
                else if ( (synpred3_ObjectiveC()) ) {
                    alt2=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 8, input);

                    throw nvae;

                }
                }
                break;
            case 81:
                {
                int LA2_9 = input.LA(2);

                if ( (synpred2_ObjectiveC()) ) {
                    alt2=1;
                }
                else if ( (synpred3_ObjectiveC()) ) {
                    alt2=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 9, input);

                    throw nvae;

                }
                }
                break;
            case 78:
                {
                int LA2_10 = input.LA(2);

                if ( (synpred2_ObjectiveC()) ) {
                    alt2=1;
                }
                else if ( (synpred3_ObjectiveC()) ) {
                    alt2=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 10, input);

                    throw nvae;

                }
                }
                break;
            case 75:
                {
                int LA2_11 = input.LA(2);

                if ( (synpred2_ObjectiveC()) ) {
                    alt2=1;
                }
                else if ( (synpred3_ObjectiveC()) ) {
                    alt2=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 11, input);

                    throw nvae;

                }
                }
                break;
            case 64:
                {
                int LA2_12 = input.LA(2);

                if ( (synpred2_ObjectiveC()) ) {
                    alt2=1;
                }
                else if ( (synpred3_ObjectiveC()) ) {
                    alt2=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 12, input);

                    throw nvae;

                }
                }
                break;
            case 85:
                {
                int LA2_13 = input.LA(2);

                if ( (synpred2_ObjectiveC()) ) {
                    alt2=1;
                }
                else if ( (synpred3_ObjectiveC()) ) {
                    alt2=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 13, input);

                    throw nvae;

                }
                }
                break;
            case 89:
                {
                int LA2_14 = input.LA(2);

                if ( (synpred2_ObjectiveC()) ) {
                    alt2=1;
                }
                else if ( (synpred3_ObjectiveC()) ) {
                    alt2=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 14, input);

                    throw nvae;

                }
                }
                break;
            case 88:
                {
                int LA2_15 = input.LA(2);

                if ( (synpred2_ObjectiveC()) ) {
                    alt2=1;
                }
                else if ( (synpred3_ObjectiveC()) ) {
                    alt2=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 15, input);

                    throw nvae;

                }
                }
                break;
            case 72:
                {
                int LA2_16 = input.LA(2);

                if ( (synpred2_ObjectiveC()) ) {
                    alt2=1;
                }
                else if ( (synpred3_ObjectiveC()) ) {
                    alt2=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 16, input);

                    throw nvae;

                }
                }
                break;
            case 91:
                {
                int LA2_17 = input.LA(2);

                if ( (synpred2_ObjectiveC()) ) {
                    alt2=1;
                }
                else if ( (synpred3_ObjectiveC()) ) {
                    alt2=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 17, input);

                    throw nvae;

                }
                }
                break;
            case CHARACTER_LITERAL:
            case DECIMAL_LITERAL:
            case FLOATING_POINT_LITERAL:
            case HEX_LITERAL:
            case IDENTIFIER:
            case OCTAL_LITERAL:
            case STRING_LITERAL:
            case 20:
            case 25:
            case 27:
            case 29:
            case 32:
            case 35:
            case 36:
            case 42:
            case 70:
            case 73:
            case 74:
            case 79:
            case 80:
            case 87:
            case 92:
            case 93:
            case 98:
                {
                alt2=2;
                }
                break;
            case 56:
                {
                alt2=3;
                }
                break;
            case 55:
                {
                alt2=4;
                }
                break;
            case 61:
                {
                int LA2_40 = input.LA(2);

                if ( (synpred6_ObjectiveC()) ) {
                    alt2=5;
                }
                else if ( (true) ) {
                    alt2=6;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 40, input);

                    throw nvae;

                }
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("", 2, 0, input);

                throw nvae;

            }

            switch (alt2) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:93:3: d= declaration
                    {
                    pushFollow(FOLLOW_declaration_in_external_declaration89);
                    d=declaration();

                    state._fsp--;
                    if (state.failed) return ;

                    }
                    break;
                case 2 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:94:5: stmt= statement
                    {
                    pushFollow(FOLLOW_statement_in_external_declaration97);
                    stmt=statement();

                    state._fsp--;
                    if (state.failed) return ;

                    if ( state.backtracking==0 ) {src.addChild((Statement)stmt);}

                    }
                    break;
                case 3 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:95:5: class_interface
                    {
                    pushFollow(FOLLOW_class_interface_in_external_declaration106);
                    class_interface();

                    state._fsp--;
                    if (state.failed) return ;

                    }
                    break;
                case 4 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:96:5: class_implementation
                    {
                    pushFollow(FOLLOW_class_implementation_in_external_declaration112);
                    class_implementation();

                    state._fsp--;
                    if (state.failed) return ;

                    }
                    break;
                case 5 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:97:5: protocol_declaration
                    {
                    pushFollow(FOLLOW_protocol_declaration_in_external_declaration119);
                    protocol_declaration();

                    state._fsp--;
                    if (state.failed) return ;

                    }
                    break;
                case 6 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:98:8: protocol_declaration_list
                    {
                    pushFollow(FOLLOW_protocol_declaration_list_in_external_declaration128);
                    protocol_declaration_list();

                    state._fsp--;
                    if (state.failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "external_declaration"



    // $ANTLR start "class_name"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:102:1: class_name : IDENTIFIER ;
    public final void class_name() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:102:11: ( IDENTIFIER )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:103:2: IDENTIFIER
            {
            match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_class_name141); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "class_name"



    // $ANTLR start "superclass_name"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:105:1: superclass_name : IDENTIFIER ;
    public final void superclass_name() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:105:16: ( IDENTIFIER )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:106:2: IDENTIFIER
            {
            match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_superclass_name149); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "superclass_name"



    // $ANTLR start "class_interface"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:112:1: class_interface : '@interface' ( class_name ( ':' superclass_name )? ( instance_variables )? ( interface_declaration_list )? ) '@end' ;
    public final void class_interface() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:112:16: ( '@interface' ( class_name ( ':' superclass_name )? ( instance_variables )? ( interface_declaration_list )? ) '@end' )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:114:2: '@interface' ( class_name ( ':' superclass_name )? ( instance_variables )? ( interface_declaration_list )? ) '@end'
            {
            match(input,56,FOLLOW_56_in_class_interface167); if (state.failed) return ;

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:115:2: ( class_name ( ':' superclass_name )? ( instance_variables )? ( interface_declaration_list )? )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:116:2: class_name ( ':' superclass_name )? ( instance_variables )? ( interface_declaration_list )?
            {
            pushFollow(FOLLOW_class_name_in_class_interface173);
            class_name();

            state._fsp--;
            if (state.failed) return ;

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:116:13: ( ':' superclass_name )?
            int alt3=2;
            int LA3_0 = input.LA(1);

            if ( (LA3_0==41) ) {
                alt3=1;
            }
            switch (alt3) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:116:14: ':' superclass_name
                    {
                    match(input,41,FOLLOW_41_in_class_interface176); if (state.failed) return ;

                    pushFollow(FOLLOW_superclass_name_in_class_interface178);
                    superclass_name();

                    state._fsp--;
                    if (state.failed) return ;

                    }
                    break;

            }


            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:118:2: ( instance_variables )?
            int alt4=2;
            int LA4_0 = input.LA(1);

            if ( (LA4_0==93) ) {
                alt4=1;
            }
            switch (alt4) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:118:4: instance_variables
                    {
                    pushFollow(FOLLOW_instance_variables_in_class_interface187);
                    instance_variables();

                    state._fsp--;
                    if (state.failed) return ;

                    }
                    break;

            }


            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:119:2: ( interface_declaration_list )?
            int alt5=2;
            int LA5_0 = input.LA(1);

            if ( (LA5_0==31||LA5_0==35||LA5_0==64||LA5_0==69||(LA5_0 >= 71 && LA5_0 <= 72)||LA5_0==75||(LA5_0 >= 77 && LA5_0 <= 78)||(LA5_0 >= 81 && LA5_0 <= 86)||(LA5_0 >= 88 && LA5_0 <= 91)) ) {
                alt5=1;
            }
            switch (alt5) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:119:4: interface_declaration_list
                    {
                    pushFollow(FOLLOW_interface_declaration_list_in_class_interface195);
                    interface_declaration_list();

                    state._fsp--;
                    if (state.failed) return ;

                    }
                    break;

            }


            }


            match(input,54,FOLLOW_54_in_class_interface204); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "class_interface"



    // $ANTLR start "interface_declaration_list"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:123:1: interface_declaration_list : ( declaration | class_method_declaration | instance_method_declaration )+ ;
    public final void interface_declaration_list() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:123:27: ( ( declaration | class_method_declaration | instance_method_declaration )+ )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:124:2: ( declaration | class_method_declaration | instance_method_declaration )+
            {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:124:2: ( declaration | class_method_declaration | instance_method_declaration )+
            int cnt6=0;
            loop6:
            do {
                int alt6=4;
                switch ( input.LA(1) ) {
                case 69:
                    {
                    int LA6_2 = input.LA(2);

                    if ( (synpred10_ObjectiveC()) ) {
                        alt6=1;
                    }


                    }
                    break;
                case 83:
                    {
                    int LA6_3 = input.LA(2);

                    if ( (synpred10_ObjectiveC()) ) {
                        alt6=1;
                    }


                    }
                    break;
                case 86:
                    {
                    int LA6_4 = input.LA(2);

                    if ( (synpred10_ObjectiveC()) ) {
                        alt6=1;
                    }


                    }
                    break;
                case 77:
                    {
                    int LA6_5 = input.LA(2);

                    if ( (synpred10_ObjectiveC()) ) {
                        alt6=1;
                    }


                    }
                    break;
                case 90:
                    {
                    int LA6_6 = input.LA(2);

                    if ( (synpred10_ObjectiveC()) ) {
                        alt6=1;
                    }


                    }
                    break;
                case 71:
                    {
                    int LA6_7 = input.LA(2);

                    if ( (synpred10_ObjectiveC()) ) {
                        alt6=1;
                    }


                    }
                    break;
                case 84:
                    {
                    int LA6_8 = input.LA(2);

                    if ( (synpred10_ObjectiveC()) ) {
                        alt6=1;
                    }


                    }
                    break;
                case 82:
                    {
                    int LA6_9 = input.LA(2);

                    if ( (synpred10_ObjectiveC()) ) {
                        alt6=1;
                    }


                    }
                    break;
                case 81:
                    {
                    int LA6_10 = input.LA(2);

                    if ( (synpred10_ObjectiveC()) ) {
                        alt6=1;
                    }


                    }
                    break;
                case 78:
                    {
                    int LA6_11 = input.LA(2);

                    if ( (synpred10_ObjectiveC()) ) {
                        alt6=1;
                    }


                    }
                    break;
                case 75:
                    {
                    int LA6_12 = input.LA(2);

                    if ( (synpred10_ObjectiveC()) ) {
                        alt6=1;
                    }


                    }
                    break;
                case 64:
                    {
                    int LA6_13 = input.LA(2);

                    if ( (synpred10_ObjectiveC()) ) {
                        alt6=1;
                    }


                    }
                    break;
                case 85:
                    {
                    int LA6_14 = input.LA(2);

                    if ( (synpred10_ObjectiveC()) ) {
                        alt6=1;
                    }


                    }
                    break;
                case 89:
                    {
                    int LA6_15 = input.LA(2);

                    if ( (synpred10_ObjectiveC()) ) {
                        alt6=1;
                    }


                    }
                    break;
                case 88:
                    {
                    int LA6_16 = input.LA(2);

                    if ( (synpred10_ObjectiveC()) ) {
                        alt6=1;
                    }


                    }
                    break;
                case 72:
                    {
                    int LA6_17 = input.LA(2);

                    if ( (synpred10_ObjectiveC()) ) {
                        alt6=1;
                    }


                    }
                    break;
                case 91:
                    {
                    int LA6_18 = input.LA(2);

                    if ( (synpred10_ObjectiveC()) ) {
                        alt6=1;
                    }


                    }
                    break;
                case 31:
                    {
                    int LA6_19 = input.LA(2);

                    if ( (synpred11_ObjectiveC()) ) {
                        alt6=2;
                    }


                    }
                    break;
                case 35:
                    {
                    int LA6_20 = input.LA(2);

                    if ( (synpred12_ObjectiveC()) ) {
                        alt6=3;
                    }


                    }
                    break;

                }

                switch (alt6) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:124:3: declaration
                  {
                  pushFollow(FOLLOW_declaration_in_interface_declaration_list214);
                  declaration();

                  state._fsp--;
                  if (state.failed) return ;

                  }
                  break;
              case 2 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:124:17: class_method_declaration
                  {
                  pushFollow(FOLLOW_class_method_declaration_in_interface_declaration_list218);
                  class_method_declaration();

                  state._fsp--;
                  if (state.failed) return ;

                  }
                  break;
              case 3 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:124:44: instance_method_declaration
                  {
                  pushFollow(FOLLOW_instance_method_declaration_in_interface_declaration_list222);
                  instance_method_declaration();

                  state._fsp--;
                  if (state.failed) return ;

                  }
                  break;

              default :
                  if ( cnt6 >= 1 ) break loop6;
                  if (state.backtracking>0) {state.failed=true; return ;}
                        EarlyExitException eee =
                            new EarlyExitException(6, input);
                        throw eee;
                }
                cnt6++;
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "interface_declaration_list"



    // $ANTLR start "class_method_declaration"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:127:1: class_method_declaration : ( '+' method_declaration ) ;
    public final void class_method_declaration() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:127:25: ( ( '+' method_declaration ) )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:128:2: ( '+' method_declaration )
            {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:128:2: ( '+' method_declaration )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:128:3: '+' method_declaration
            {
            match(input,31,FOLLOW_31_in_class_method_declaration237); if (state.failed) return ;

            pushFollow(FOLLOW_method_declaration_in_class_method_declaration239);
            method_declaration();

            state._fsp--;
            if (state.failed) return ;

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "class_method_declaration"



    // $ANTLR start "instance_method_declaration"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:131:1: instance_method_declaration : ( '-' method_declaration ) ;
    public final void instance_method_declaration() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:131:28: ( ( '-' method_declaration ) )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:132:2: ( '-' method_declaration )
            {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:132:2: ( '-' method_declaration )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:132:3: '-' method_declaration
            {
            match(input,35,FOLLOW_35_in_instance_method_declaration251); if (state.failed) return ;

            pushFollow(FOLLOW_method_declaration_in_instance_method_declaration253);
            method_declaration();

            state._fsp--;
            if (state.failed) return ;

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "instance_method_declaration"



    // $ANTLR start "method_declaration"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:135:1: method_declaration : ( method_type )? method_selector ';' ;
    public final void method_declaration() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:135:19: ( ( method_type )? method_selector ';' )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:136:2: ( method_type )? method_selector ';'
            {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:136:2: ( method_type )?
            int alt7=2;
            int LA7_0 = input.LA(1);

            if ( (LA7_0==27) ) {
                alt7=1;
            }
            switch (alt7) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:136:4: method_type
                    {
                    pushFollow(FOLLOW_method_type_in_method_declaration266);
                    method_type();

                    state._fsp--;
                    if (state.failed) return ;

                    }
                    break;

            }


            pushFollow(FOLLOW_method_selector_in_method_declaration271);
            method_selector();

            state._fsp--;
            if (state.failed) return ;

            match(input,42,FOLLOW_42_in_method_declaration273); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "method_declaration"



    // $ANTLR start "instance_variables"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:139:1: instance_variables : '{' instance_variable_declaration '}' ;
    public final void instance_variables() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:139:19: ( '{' instance_variable_declaration '}' )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:140:2: '{' instance_variable_declaration '}'
            {
            match(input,93,FOLLOW_93_in_instance_variables284); if (state.failed) return ;

            pushFollow(FOLLOW_instance_variable_declaration_in_instance_variables286);
            instance_variable_declaration();

            state._fsp--;
            if (state.failed) return ;

            match(input,97,FOLLOW_97_in_instance_variables288); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "instance_variables"



    // $ANTLR start "instance_variable_declaration"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:143:1: instance_variable_declaration : ( visibility_specification | struct_declarator_list instance_variables )+ ;
    public final void instance_variable_declaration() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:143:30: ( ( visibility_specification | struct_declarator_list instance_variables )+ )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:144:2: ( visibility_specification | struct_declarator_list instance_variables )+
            {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:144:2: ( visibility_specification | struct_declarator_list instance_variables )+
            int cnt8=0;
            loop8:
            do {
                int alt8=3;
                int LA8_0 = input.LA(1);

                if ( ((LA8_0 >= 58 && LA8_0 <= 60)||LA8_0==62) ) {
                    alt8=1;
                }
                else if ( (LA8_0==IDENTIFIER||LA8_0==41) ) {
                    alt8=2;
                }


                switch (alt8) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:144:3: visibility_specification
                  {
                  pushFollow(FOLLOW_visibility_specification_in_instance_variable_declaration300);
                  visibility_specification();

                  state._fsp--;
                  if (state.failed) return ;

                  }
                  break;
              case 2 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:144:30: struct_declarator_list instance_variables
                  {
                  pushFollow(FOLLOW_struct_declarator_list_in_instance_variable_declaration304);
                  struct_declarator_list();

                  state._fsp--;
                  if (state.failed) return ;

                  pushFollow(FOLLOW_instance_variables_in_instance_variable_declaration306);
                  instance_variables();

                  state._fsp--;
                  if (state.failed) return ;

                  }
                  break;

              default :
                  if ( cnt8 >= 1 ) break loop8;
                  if (state.backtracking>0) {state.failed=true; return ;}
                        EarlyExitException eee =
                            new EarlyExitException(8, input);
                        throw eee;
                }
                cnt8++;
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "instance_variable_declaration"



    // $ANTLR start "visibility_specification"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:147:1: visibility_specification : ( '@private' | '@protected' | '@package' | '@public' );
    public final void visibility_specification() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:147:25: ( '@private' | '@protected' | '@package' | '@public' )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:
            {
            if ( (input.LA(1) >= 58 && input.LA(1) <= 60)||input.LA(1)==62 ) {
                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;
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "visibility_specification"



    // $ANTLR start "struct_declarator_list"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:154:1: struct_declarator_list : struct_declarator ( ',' struct_declarator )* ;
    public final void struct_declarator_list() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:154:24: ( struct_declarator ( ',' struct_declarator )* )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:154:26: struct_declarator ( ',' struct_declarator )*
            {
            pushFollow(FOLLOW_struct_declarator_in_struct_declarator_list344);
            struct_declarator();

            state._fsp--;
            if (state.failed) return ;

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:154:44: ( ',' struct_declarator )*
            loop9:
            do {
                int alt9=2;
                int LA9_0 = input.LA(1);

                if ( (LA9_0==34) ) {
                    alt9=1;
                }


                switch (alt9) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:154:45: ',' struct_declarator
                  {
                  match(input,34,FOLLOW_34_in_struct_declarator_list347); if (state.failed) return ;

                  pushFollow(FOLLOW_struct_declarator_in_struct_declarator_list349);
                  struct_declarator();

                  state._fsp--;
                  if (state.failed) return ;

                  }
                  break;

              default :
                  break loop9;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "struct_declarator_list"



    // $ANTLR start "struct_declarator"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:156:1: struct_declarator : ( declarator | ( declarator )? ':' constant );
    public final void struct_declarator() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:156:19: ( declarator | ( declarator )? ':' constant )
            int alt11=2;
            int LA11_0 = input.LA(1);

            if ( (LA11_0==IDENTIFIER) ) {
                int LA11_1 = input.LA(2);

                if ( (synpred20_ObjectiveC()) ) {
                    alt11=1;
                }
                else if ( (true) ) {
                    alt11=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 11, 1, input);

                    throw nvae;

                }
            }
            else if ( (LA11_0==41) ) {
                alt11=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("", 11, 0, input);

                throw nvae;

            }
            switch (alt11) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:156:21: declarator
                    {
                    pushFollow(FOLLOW_declarator_in_struct_declarator360);
                    declarator();

                    state._fsp--;
                    if (state.failed) return ;

                    }
                    break;
                case 2 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:156:34: ( declarator )? ':' constant
                    {
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:156:34: ( declarator )?
                    int alt10=2;
                    int LA10_0 = input.LA(1);

                    if ( (LA10_0==IDENTIFIER) ) {
                        alt10=1;
                    }
                    switch (alt10) {
                        case 1 :
                            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:156:34: declarator
                            {
                            pushFollow(FOLLOW_declarator_in_struct_declarator364);
                            declarator();

                            state._fsp--;
                            if (state.failed) return ;

                            }
                            break;

                    }


                    match(input,41,FOLLOW_41_in_struct_declarator367); if (state.failed) return ;

                    pushFollow(FOLLOW_constant_in_struct_declarator369);
                    constant();

                    state._fsp--;
                    if (state.failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "struct_declarator"



    // $ANTLR start "class_implementation"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:158:1: class_implementation : '@implementation' ( class_name ( ':' superclass_name )? ( implementation_definition_list )? ) '@end' ;
    public final void class_implementation() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:158:21: ( '@implementation' ( class_name ( ':' superclass_name )? ( implementation_definition_list )? ) '@end' )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:159:2: '@implementation' ( class_name ( ':' superclass_name )? ( implementation_definition_list )? ) '@end'
            {
            match(input,55,FOLLOW_55_in_class_implementation378); if (state.failed) return ;

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:160:2: ( class_name ( ':' superclass_name )? ( implementation_definition_list )? )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:161:2: class_name ( ':' superclass_name )? ( implementation_definition_list )?
            {
            pushFollow(FOLLOW_class_name_in_class_implementation384);
            class_name();

            state._fsp--;
            if (state.failed) return ;

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:161:13: ( ':' superclass_name )?
            int alt12=2;
            int LA12_0 = input.LA(1);

            if ( (LA12_0==41) ) {
                alt12=1;
            }
            switch (alt12) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:161:15: ':' superclass_name
                    {
                    match(input,41,FOLLOW_41_in_class_implementation388); if (state.failed) return ;

                    pushFollow(FOLLOW_superclass_name_in_class_implementation390);
                    superclass_name();

                    state._fsp--;
                    if (state.failed) return ;

                    }
                    break;

            }


            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:162:2: ( implementation_definition_list )?
            int alt13=2;
            int LA13_0 = input.LA(1);

            if ( (LA13_0==31||LA13_0==35||LA13_0==64||LA13_0==69||(LA13_0 >= 71 && LA13_0 <= 72)||LA13_0==75||(LA13_0 >= 77 && LA13_0 <= 78)||(LA13_0 >= 81 && LA13_0 <= 86)||(LA13_0 >= 88 && LA13_0 <= 91)) ) {
                alt13=1;
            }
            switch (alt13) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:162:4: implementation_definition_list
                    {
                    pushFollow(FOLLOW_implementation_definition_list_in_class_implementation398);
                    implementation_definition_list();

                    state._fsp--;
                    if (state.failed) return ;

                    }
                    break;

            }


            }


            match(input,54,FOLLOW_54_in_class_implementation407); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "class_implementation"



    // $ANTLR start "implementation_definition_list"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:167:1: implementation_definition_list : ( function_definition | declaration | class_method_definition | instance_method_definition )+ ;
    public final void implementation_definition_list() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:167:31: ( ( function_definition | declaration | class_method_definition | instance_method_definition )+ )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:168:2: ( function_definition | declaration | class_method_definition | instance_method_definition )+
            {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:168:2: ( function_definition | declaration | class_method_definition | instance_method_definition )+
            int cnt14=0;
            loop14:
            do {
                int alt14=5;
                switch ( input.LA(1) ) {
                case 69:
                    {
                    int LA14_3 = input.LA(2);

                    if ( (synpred24_ObjectiveC()) ) {
                        alt14=1;
                    }
                    else if ( (synpred25_ObjectiveC()) ) {
                        alt14=2;
                    }


                    }
                    break;
                case 83:
                    {
                    int LA14_4 = input.LA(2);

                    if ( (synpred24_ObjectiveC()) ) {
                        alt14=1;
                    }
                    else if ( (synpred25_ObjectiveC()) ) {
                        alt14=2;
                    }


                    }
                    break;
                case 86:
                    {
                    int LA14_5 = input.LA(2);

                    if ( (synpred24_ObjectiveC()) ) {
                        alt14=1;
                    }
                    else if ( (synpred25_ObjectiveC()) ) {
                        alt14=2;
                    }


                    }
                    break;
                case 77:
                    {
                    int LA14_6 = input.LA(2);

                    if ( (synpred24_ObjectiveC()) ) {
                        alt14=1;
                    }
                    else if ( (synpred25_ObjectiveC()) ) {
                        alt14=2;
                    }


                    }
                    break;
                case 90:
                    {
                    int LA14_7 = input.LA(2);

                    if ( (synpred24_ObjectiveC()) ) {
                        alt14=1;
                    }
                    else if ( (synpred25_ObjectiveC()) ) {
                        alt14=2;
                    }


                    }
                    break;
                case 71:
                    {
                    int LA14_8 = input.LA(2);

                    if ( (synpred24_ObjectiveC()) ) {
                        alt14=1;
                    }
                    else if ( (synpred25_ObjectiveC()) ) {
                        alt14=2;
                    }


                    }
                    break;
                case 84:
                    {
                    int LA14_9 = input.LA(2);

                    if ( (synpred24_ObjectiveC()) ) {
                        alt14=1;
                    }
                    else if ( (synpred25_ObjectiveC()) ) {
                        alt14=2;
                    }


                    }
                    break;
                case 82:
                    {
                    int LA14_10 = input.LA(2);

                    if ( (synpred24_ObjectiveC()) ) {
                        alt14=1;
                    }
                    else if ( (synpred25_ObjectiveC()) ) {
                        alt14=2;
                    }


                    }
                    break;
                case 81:
                    {
                    int LA14_11 = input.LA(2);

                    if ( (synpred24_ObjectiveC()) ) {
                        alt14=1;
                    }
                    else if ( (synpred25_ObjectiveC()) ) {
                        alt14=2;
                    }


                    }
                    break;
                case 78:
                    {
                    int LA14_12 = input.LA(2);

                    if ( (synpred24_ObjectiveC()) ) {
                        alt14=1;
                    }
                    else if ( (synpred25_ObjectiveC()) ) {
                        alt14=2;
                    }


                    }
                    break;
                case 75:
                    {
                    int LA14_13 = input.LA(2);

                    if ( (synpred24_ObjectiveC()) ) {
                        alt14=1;
                    }
                    else if ( (synpred25_ObjectiveC()) ) {
                        alt14=2;
                    }


                    }
                    break;
                case 64:
                    {
                    int LA14_14 = input.LA(2);

                    if ( (synpred24_ObjectiveC()) ) {
                        alt14=1;
                    }
                    else if ( (synpred25_ObjectiveC()) ) {
                        alt14=2;
                    }


                    }
                    break;
                case 85:
                    {
                    int LA14_15 = input.LA(2);

                    if ( (synpred24_ObjectiveC()) ) {
                        alt14=1;
                    }
                    else if ( (synpred25_ObjectiveC()) ) {
                        alt14=2;
                    }


                    }
                    break;
                case 89:
                    {
                    int LA14_16 = input.LA(2);

                    if ( (synpred24_ObjectiveC()) ) {
                        alt14=1;
                    }
                    else if ( (synpred25_ObjectiveC()) ) {
                        alt14=2;
                    }


                    }
                    break;
                case 88:
                    {
                    int LA14_17 = input.LA(2);

                    if ( (synpred24_ObjectiveC()) ) {
                        alt14=1;
                    }
                    else if ( (synpred25_ObjectiveC()) ) {
                        alt14=2;
                    }


                    }
                    break;
                case 72:
                    {
                    int LA14_18 = input.LA(2);

                    if ( (synpred24_ObjectiveC()) ) {
                        alt14=1;
                    }
                    else if ( (synpred25_ObjectiveC()) ) {
                        alt14=2;
                    }


                    }
                    break;
                case 91:
                    {
                    int LA14_19 = input.LA(2);

                    if ( (synpred24_ObjectiveC()) ) {
                        alt14=1;
                    }
                    else if ( (synpred25_ObjectiveC()) ) {
                        alt14=2;
                    }


                    }
                    break;
                case 31:
                    {
                    alt14=3;
                    }
                    break;
                case 35:
                    {
                    alt14=4;
                    }
                    break;

                }

                switch (alt14) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:168:3: function_definition
                  {
                  pushFollow(FOLLOW_function_definition_in_implementation_definition_list419);
                  function_definition();

                  state._fsp--;
                  if (state.failed) return ;

                  }
                  break;
              case 2 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:168:25: declaration
                  {
                  pushFollow(FOLLOW_declaration_in_implementation_definition_list423);
                  declaration();

                  state._fsp--;
                  if (state.failed) return ;

                  }
                  break;
              case 3 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:168:39: class_method_definition
                  {
                  pushFollow(FOLLOW_class_method_definition_in_implementation_definition_list427);
                  class_method_definition();

                  state._fsp--;
                  if (state.failed) return ;

                  }
                  break;
              case 4 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:168:65: instance_method_definition
                  {
                  pushFollow(FOLLOW_instance_method_definition_in_implementation_definition_list431);
                  instance_method_definition();

                  state._fsp--;
                  if (state.failed) return ;

                  }
                  break;

              default :
                  if ( cnt14 >= 1 ) break loop14;
                  if (state.backtracking>0) {state.failed=true; return ;}
                        EarlyExitException eee =
                            new EarlyExitException(14, input);
                        throw eee;
                }
                cnt14++;
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "implementation_definition_list"



    // $ANTLR start "class_method_definition"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:170:1: class_method_definition : ( '+' method_definition ) ;
    public final void class_method_definition() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:170:24: ( ( '+' method_definition ) )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:171:2: ( '+' method_definition )
            {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:171:2: ( '+' method_definition )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:171:3: '+' method_definition
            {
            match(input,31,FOLLOW_31_in_class_method_definition442); if (state.failed) return ;

            pushFollow(FOLLOW_method_definition_in_class_method_definition444);
            method_definition();

            state._fsp--;
            if (state.failed) return ;

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "class_method_definition"



    // $ANTLR start "instance_method_definition"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:174:1: instance_method_definition : ( '-' method_definition ) ;
    public final void instance_method_definition() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:174:27: ( ( '-' method_definition ) )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:175:2: ( '-' method_definition )
            {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:175:2: ( '-' method_definition )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:175:3: '-' method_definition
            {
            match(input,35,FOLLOW_35_in_instance_method_definition456); if (state.failed) return ;

            pushFollow(FOLLOW_method_definition_in_instance_method_definition458);
            method_definition();

            state._fsp--;
            if (state.failed) return ;

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "instance_method_definition"



    // $ANTLR start "method_definition"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:178:1: method_definition : ( method_type )? method_selector compound_statement ;
    public final void method_definition() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:178:18: ( ( method_type )? method_selector compound_statement )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:179:2: ( method_type )? method_selector compound_statement
            {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:179:2: ( method_type )?
            int alt15=2;
            int LA15_0 = input.LA(1);

            if ( (LA15_0==27) ) {
                alt15=1;
            }
            switch (alt15) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:179:3: method_type
                    {
                    pushFollow(FOLLOW_method_type_in_method_definition471);
                    method_type();

                    state._fsp--;
                    if (state.failed) return ;

                    }
                    break;

            }


            pushFollow(FOLLOW_method_selector_in_method_definition475);
            method_selector();

            state._fsp--;
            if (state.failed) return ;

            pushFollow(FOLLOW_compound_statement_in_method_definition479);
            compound_statement();

            state._fsp--;
            if (state.failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "method_definition"



    // $ANTLR start "method_selector"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:181:1: method_selector : ( selector | ( ( keyword_declarator )+ ( parameter_list )? ) );
    public final void method_selector() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:181:16: ( selector | ( ( keyword_declarator )+ ( parameter_list )? ) )
            int alt18=2;
            int LA18_0 = input.LA(1);

            if ( (LA18_0==IDENTIFIER) ) {
                int LA18_1 = input.LA(2);

                if ( (LA18_1==42||LA18_1==93) ) {
                    alt18=1;
                }
                else if ( (LA18_1==41) ) {
                    alt18=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 18, 1, input);

                    throw nvae;

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

                throw nvae;

            }
            switch (alt18) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:182:2: selector
                    {
                    pushFollow(FOLLOW_selector_in_method_selector489);
                    selector();

                    state._fsp--;
                    if (state.failed) return ;

                    }
                    break;
                case 2 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:182:12: ( ( keyword_declarator )+ ( parameter_list )? )
                    {
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:182:12: ( ( keyword_declarator )+ ( parameter_list )? )
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:182:13: ( keyword_declarator )+ ( parameter_list )?
                    {
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:182:13: ( keyword_declarator )+
                    int cnt16=0;
                    loop16:
                    do {
                        int alt16=2;
                        int LA16_0 = input.LA(1);

                        if ( (LA16_0==IDENTIFIER||LA16_0==41) ) {
                            alt16=1;
                        }


                        switch (alt16) {
                      case 1 :
                          // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:182:13: keyword_declarator
                          {
                          pushFollow(FOLLOW_keyword_declarator_in_method_selector493);
                          keyword_declarator();

                          state._fsp--;
                          if (state.failed) return ;

                          }
                          break;

                      default :
                          if ( cnt16 >= 1 ) break loop16;
                          if (state.backtracking>0) {state.failed=true; return ;}
                                EarlyExitException eee =
                                    new EarlyExitException(16, input);
                                throw eee;
                        }
                        cnt16++;
                    } while (true);


                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:182:33: ( parameter_list )?
                    int alt17=2;
                    int LA17_0 = input.LA(1);

                    if ( (LA17_0==64||LA17_0==69||(LA17_0 >= 71 && LA17_0 <= 72)||LA17_0==75||(LA17_0 >= 77 && LA17_0 <= 78)||(LA17_0 >= 81 && LA17_0 <= 86)||(LA17_0 >= 88 && LA17_0 <= 91)) ) {
                        alt17=1;
                    }
                    switch (alt17) {
                        case 1 :
                            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:182:34: parameter_list
                            {
                            pushFollow(FOLLOW_parameter_list_in_method_selector497);
                            parameter_list();

                            state._fsp--;
                            if (state.failed) return ;

                            }
                            break;

                    }


                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "method_selector"



    // $ANTLR start "keyword_declarator"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:185:1: keyword_declarator : ( selector )? ':' ( method_type )* IDENTIFIER ;
    public final void keyword_declarator() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:185:19: ( ( selector )? ':' ( method_type )* IDENTIFIER )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:186:2: ( selector )? ':' ( method_type )* IDENTIFIER
            {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:186:2: ( selector )?
            int alt19=2;
            int LA19_0 = input.LA(1);

            if ( (LA19_0==IDENTIFIER) ) {
                alt19=1;
            }
            switch (alt19) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:186:2: selector
                    {
                    pushFollow(FOLLOW_selector_in_keyword_declarator511);
                    selector();

                    state._fsp--;
                    if (state.failed) return ;

                    }
                    break;

            }


            match(input,41,FOLLOW_41_in_keyword_declarator514); if (state.failed) return ;

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:186:16: ( method_type )*
            loop20:
            do {
                int alt20=2;
                int LA20_0 = input.LA(1);

                if ( (LA20_0==27) ) {
                    alt20=1;
                }


                switch (alt20) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:186:16: method_type
                  {
                  pushFollow(FOLLOW_method_type_in_keyword_declarator516);
                  method_type();

                  state._fsp--;
                  if (state.failed) return ;

                  }
                  break;

              default :
                  break loop20;
                }
            } while (true);


            match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_keyword_declarator519); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "keyword_declarator"



    // $ANTLR start "parameter_list"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:189:1: parameter_list : parameter_declaration_list ( ',' '...' )? ;
    public final void parameter_list() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:189:16: ( parameter_declaration_list ( ',' '...' )? )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:190:2: parameter_declaration_list ( ',' '...' )?
            {
            pushFollow(FOLLOW_parameter_declaration_list_in_parameter_list531);
            parameter_declaration_list();

            state._fsp--;
            if (state.failed) return ;

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:190:29: ( ',' '...' )?
            int alt21=2;
            int LA21_0 = input.LA(1);

            if ( (LA21_0==34) ) {
                alt21=1;
            }
            switch (alt21) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:190:31: ',' '...'
                    {
                    match(input,34,FOLLOW_34_in_parameter_list535); if (state.failed) return ;

                    match(input,38,FOLLOW_38_in_parameter_list537); if (state.failed) return ;

                    }
                    break;

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "parameter_list"



    // $ANTLR start "parameter_declaration"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:193:1: parameter_declaration : declaration_specifiers ( ( declarator )? | abstract_declarator ) ;
    public final void parameter_declaration() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:194:3: ( declaration_specifiers ( ( declarator )? | abstract_declarator ) )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:194:5: declaration_specifiers ( ( declarator )? | abstract_declarator )
            {
            pushFollow(FOLLOW_declaration_specifiers_in_parameter_declaration554);
            declaration_specifiers();

            state._fsp--;
            if (state.failed) return ;

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:194:28: ( ( declarator )? | abstract_declarator )
            int alt23=2;
            switch ( input.LA(1) ) {
            case IDENTIFIER:
                {
                alt23=1;
                }
                break;
            case 34:
                {
                int LA23_2 = input.LA(2);

                if ( (synpred36_ObjectiveC()) ) {
                    alt23=1;
                }
                else if ( (true) ) {
                    alt23=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 23, 2, input);

                    throw nvae;

                }
                }
                break;
            case 42:
                {
                int LA23_3 = input.LA(2);

                if ( (synpred36_ObjectiveC()) ) {
                    alt23=1;
                }
                else if ( (true) ) {
                    alt23=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 23, 3, input);

                    throw nvae;

                }
                }
                break;
            case 93:
                {
                int LA23_4 = input.LA(2);

                if ( (synpred36_ObjectiveC()) ) {
                    alt23=1;
                }
                else if ( (true) ) {
                    alt23=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 23, 4, input);

                    throw nvae;

                }
                }
                break;
            case 28:
                {
                int LA23_5 = input.LA(2);

                if ( (synpred36_ObjectiveC()) ) {
                    alt23=1;
                }
                else if ( (true) ) {
                    alt23=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 23, 5, input);

                    throw nvae;

                }
                }
                break;
            case EOF:
                {
                int LA23_6 = input.LA(2);

                if ( (synpred36_ObjectiveC()) ) {
                    alt23=1;
                }
                else if ( (true) ) {
                    alt23=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 23, 6, input);

                    throw nvae;

                }
                }
                break;
            case 65:
                {
                alt23=2;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("", 23, 0, input);

                throw nvae;

            }

            switch (alt23) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:194:29: ( declarator )?
                    {
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:194:29: ( declarator )?
                    int alt22=2;
                    int LA22_0 = input.LA(1);

                    if ( (LA22_0==IDENTIFIER) ) {
                        alt22=1;
                    }
                    switch (alt22) {
                        case 1 :
                            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:194:29: declarator
                            {
                            pushFollow(FOLLOW_declarator_in_parameter_declaration557);
                            declarator();

                            state._fsp--;
                            if (state.failed) return ;

                            }
                            break;

                    }


                    }
                    break;
                case 2 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:194:43: abstract_declarator
                    {
                    pushFollow(FOLLOW_abstract_declarator_in_parameter_declaration562);
                    abstract_declarator();

                    state._fsp--;
                    if (state.failed) return ;

                    }
                    break;

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "parameter_declaration"



    // $ANTLR start "parameter_declaration_list"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:197:1: parameter_declaration_list : parameter_declaration ( ',' parameter_declaration )* ;
    public final void parameter_declaration_list() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:198:3: ( parameter_declaration ( ',' parameter_declaration )* )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:198:5: parameter_declaration ( ',' parameter_declaration )*
            {
            pushFollow(FOLLOW_parameter_declaration_in_parameter_declaration_list577);
            parameter_declaration();

            state._fsp--;
            if (state.failed) return ;

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:198:27: ( ',' parameter_declaration )*
            loop24:
            do {
                int alt24=2;
                int LA24_0 = input.LA(1);

                if ( (LA24_0==34) ) {
                    int LA24_1 = input.LA(2);

                    if ( (LA24_1==64||LA24_1==69||(LA24_1 >= 71 && LA24_1 <= 72)||LA24_1==75||(LA24_1 >= 77 && LA24_1 <= 78)||(LA24_1 >= 81 && LA24_1 <= 86)||(LA24_1 >= 88 && LA24_1 <= 91)) ) {
                        alt24=1;
                    }


                }


                switch (alt24) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:198:29: ',' parameter_declaration
                  {
                  match(input,34,FOLLOW_34_in_parameter_declaration_list581); if (state.failed) return ;

                  pushFollow(FOLLOW_parameter_declaration_in_parameter_declaration_list583);
                  parameter_declaration();

                  state._fsp--;
                  if (state.failed) return ;

                  }
                  break;

              default :
                  break loop24;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "parameter_declaration_list"



    // $ANTLR start "abstract_declarator"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:201:1: abstract_declarator returns [ArrayType arrayType] : ( ( '[' (c= constant_expression )? ']' )+ |);
    public final ArrayType abstract_declarator() throws RecognitionException {
        ArrayType arrayType = null;


        Expression c =null;



          arrayType =null;
          Expression dimension=null;

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:208:3: ( ( '[' (c= constant_expression )? ']' )+ |)
            int alt27=2;
            int LA27_0 = input.LA(1);

            if ( (LA27_0==65) ) {
                alt27=1;
            }
            else if ( (LA27_0==EOF||LA27_0==28||LA27_0==34||LA27_0==42||LA27_0==93) ) {
                alt27=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return arrayType;}
                NoViableAltException nvae =
                    new NoViableAltException("", 27, 0, input);

                throw nvae;

            }
            switch (alt27) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:216:3: ( '[' (c= constant_expression )? ']' )+
                    {
                    if ( state.backtracking==0 ) { arrayType =new ArrayType(); }

                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:217:4: ( '[' (c= constant_expression )? ']' )+
                    int cnt26=0;
                    loop26:
                    do {
                        int alt26=2;
                        int LA26_0 = input.LA(1);

                        if ( (LA26_0==65) ) {
                            alt26=1;
                        }


                        switch (alt26) {
                      case 1 :
                          // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:217:5: '[' (c= constant_expression )? ']'
                          {
                          match(input,65,FOLLOW_65_in_abstract_declarator639); if (state.failed) return arrayType;

                          if ( state.backtracking==0 ) {dimension=null;}

                          // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:219:4: (c= constant_expression )?
                          int alt25=2;
                          int LA25_0 = input.LA(1);

                          if ( ((LA25_0 >= CHARACTER_LITERAL && LA25_0 <= DECIMAL_LITERAL)||LA25_0==FLOATING_POINT_LITERAL||LA25_0==HEX_LITERAL||LA25_0==IDENTIFIER||LA25_0==OCTAL_LITERAL||LA25_0==STRING_LITERAL||LA25_0==20||LA25_0==25||LA25_0==27||LA25_0==29||LA25_0==32||(LA25_0 >= 35 && LA25_0 <= 36)||LA25_0==98) ) {
                              alt25=1;
                          }
                          switch (alt25) {
                              case 1 :
                                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:219:5: c= constant_expression
                                  {
                                  pushFollow(FOLLOW_constant_expression_in_abstract_declarator653);
                                  c=constant_expression();

                                  state._fsp--;
                                  if (state.failed) return arrayType;

                                  if ( state.backtracking==0 ) {
                                        dimension=c; 
                                      }

                                  }
                                  break;

                          }


                          if ( state.backtracking==0 ) {arrayType.addDimensionExpression(dimension);}

                          match(input,66,FOLLOW_66_in_abstract_declarator667); if (state.failed) return arrayType;

                          }
                          break;

                      default :
                          if ( cnt26 >= 1 ) break loop26;
                          if (state.backtracking>0) {state.failed=true; return arrayType;}
                                EarlyExitException eee =
                                    new EarlyExitException(26, input);
                                throw eee;
                        }
                        cnt26++;
                    } while (true);


                    }
                    break;
                case 2 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:224:5:
                    {
                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return arrayType;
    }
    // $ANTLR end "abstract_declarator"



    // $ANTLR start "abstract_declarator_suffix"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:226:1: abstract_declarator_suffix : ( '[' ( constant_expression )? ']' | '(' ( parameter_declaration_list )? ')' );
    public final void abstract_declarator_suffix() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:229:3: ( '[' ( constant_expression )? ']' | '(' ( parameter_declaration_list )? ')' )
            int alt30=2;
            int LA30_0 = input.LA(1);

            if ( (LA30_0==65) ) {
                alt30=1;
            }
            else if ( (LA30_0==27) ) {
                alt30=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("", 30, 0, input);

                throw nvae;

            }
            switch (alt30) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:229:5: '[' ( constant_expression )? ']'
                    {
                    match(input,65,FOLLOW_65_in_abstract_declarator_suffix689); if (state.failed) return ;

                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:229:9: ( constant_expression )?
                    int alt28=2;
                    int LA28_0 = input.LA(1);

                    if ( ((LA28_0 >= CHARACTER_LITERAL && LA28_0 <= DECIMAL_LITERAL)||LA28_0==FLOATING_POINT_LITERAL||LA28_0==HEX_LITERAL||LA28_0==IDENTIFIER||LA28_0==OCTAL_LITERAL||LA28_0==STRING_LITERAL||LA28_0==20||LA28_0==25||LA28_0==27||LA28_0==29||LA28_0==32||(LA28_0 >= 35 && LA28_0 <= 36)||LA28_0==98) ) {
                        alt28=1;
                    }
                    switch (alt28) {
                        case 1 :
                            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:229:9: constant_expression
                            {
                            pushFollow(FOLLOW_constant_expression_in_abstract_declarator_suffix691);
                            constant_expression();

                            state._fsp--;
                            if (state.failed) return ;

                            }
                            break;

                    }


                    match(input,66,FOLLOW_66_in_abstract_declarator_suffix694); if (state.failed) return ;

                    }
                    break;
                case 2 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:230:5: '(' ( parameter_declaration_list )? ')'
                    {
                    match(input,27,FOLLOW_27_in_abstract_declarator_suffix700); if (state.failed) return ;

                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:230:10: ( parameter_declaration_list )?
                    int alt29=2;
                    int LA29_0 = input.LA(1);

                    if ( (LA29_0==64||LA29_0==69||(LA29_0 >= 71 && LA29_0 <= 72)||LA29_0==75||(LA29_0 >= 77 && LA29_0 <= 78)||(LA29_0 >= 81 && LA29_0 <= 86)||(LA29_0 >= 88 && LA29_0 <= 91)) ) {
                        alt29=1;
                    }
                    switch (alt29) {
                        case 1 :
                            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:230:10: parameter_declaration_list
                            {
                            pushFollow(FOLLOW_parameter_declaration_list_in_abstract_declarator_suffix703);
                            parameter_declaration_list();

                            state._fsp--;
                            if (state.failed) return ;

                            }
                            break;

                    }


                    match(input,28,FOLLOW_28_in_abstract_declarator_suffix706); if (state.failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "abstract_declarator_suffix"



    // $ANTLR start "selector"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:232:1: selector : IDENTIFIER ;
    public final void selector() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:232:9: ( IDENTIFIER )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:233:1: IDENTIFIER
            {
            match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_selector716); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "selector"



    // $ANTLR start "method_type"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:235:1: method_type : '(' type_name ')' ;
    public final void method_type() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:235:12: ( '(' type_name ')' )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:236:1: '(' type_name ')'
            {
            match(input,27,FOLLOW_27_in_method_type723); if (state.failed) return ;

            pushFollow(FOLLOW_type_name_in_method_type725);
            type_name();

            state._fsp--;
            if (state.failed) return ;

            match(input,28,FOLLOW_28_in_method_type727); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "method_type"



    // $ANTLR start "type_name"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:238:1: type_name returns [MethodType methodType] : sql= specifier_qualifier_list ad= abstract_declarator ;
    public final MethodType type_name() throws RecognitionException {
        MethodType methodType = null;


        ObjectiveCParser.specifier_qualifier_list_return sql =null;

        ArrayType ad =null;



          methodType =new MethodType(null,-1);

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:244:2: (sql= specifier_qualifier_list ad= abstract_declarator )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:245:2: sql= specifier_qualifier_list ad= abstract_declarator
            {
            pushFollow(FOLLOW_specifier_qualifier_list_in_type_name750);
            sql=specifier_qualifier_list();

            state._fsp--;
            if (state.failed) return methodType;

            if ( state.backtracking==0 ) {
                methodType.setModifier((sql!=null?sql.modifier:null));
                methodType.setSpecifier((sql!=null?sql.specifier:null));
                methodType.setDataType((sql!=null?sql.dataType:null));

              }

            pushFollow(FOLLOW_abstract_declarator_in_type_name760);
            ad=abstract_declarator();

            state._fsp--;
            if (state.failed) return methodType;

            if ( state.backtracking==0 ) {
                  methodType.setArrayType(ad);
                }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return methodType;
    }
    // $ANTLR end "type_name"


    public static class specifier_qualifier_list_return extends ParserRuleReturnScope {
        public BasicModifier modifier;
        public Specifier specifier;
        public BasicDataType dataType;
    };


    // $ANTLR start "specifier_qualifier_list"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:258:1: specifier_qualifier_list returns [BasicModifier modifier,Specifier specifier,BasicDataType dataType] : (ts= type_specifier |tq= type_qualifier )+ ;
    public final ObjectiveCParser.specifier_qualifier_list_return specifier_qualifier_list() throws RecognitionException {
        ObjectiveCParser.specifier_qualifier_list_return retval = new ObjectiveCParser.specifier_qualifier_list_return();
        retval.start = input.LT(1);


        ObjectiveCParser.type_specifier_return ts =null;

        int tq =0;


        
        //Setting parent to null as its parent rule can define itself who the parent is
          retval.modifier =new BasicModifier(null);
          retval.specifier =new Specifier(null);
          retval.dataType =new BasicDataType();

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:266:2: ( (ts= type_specifier |tq= type_qualifier )+ )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:267:3: (ts= type_specifier |tq= type_qualifier )+
            {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:267:3: (ts= type_specifier |tq= type_qualifier )+
            int cnt31=0;
            loop31:
            do {
                int alt31=3;
                int LA31_0 = input.LA(1);

                if ( (LA31_0==64||LA31_0==71||LA31_0==75||LA31_0==78||(LA31_0 >= 81 && LA31_0 <= 82)||(LA31_0 >= 84 && LA31_0 <= 85)||(LA31_0 >= 88 && LA31_0 <= 90)) ) {
                    alt31=1;
                }
                else if ( (LA31_0==72||LA31_0==91) ) {
                    alt31=2;
                }


                switch (alt31) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:268:3: ts= type_specifier
                  {
                  pushFollow(FOLLOW_type_specifier_in_specifier_qualifier_list794);
                  ts=type_specifier();

                  state._fsp--;
                  if (state.failed) return retval;

                  if ( state.backtracking==0 ) {
                       
                        if((ts!=null?ts.nativeType:null)!=null){
                          retval.dataType.setDataType((ts!=null?ts.nativeType:null));
                          //((declaration_scope)declaration_stack.peek()).tempDecl.dataType.setDataType((ts!=null?ts.nativeType:null));
                        }
                        else
                          retval.specifier.setSpecifier((ts!=null?ts.nativeSpecifier:null));
                          //((declaration_scope)declaration_stack.peek()).tempDecl.specifier.setSpecifier((ts!=null?ts.nativeSpecifier:null));
                        }
                      }

                  }
                  break;
              case 2 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:281:5: tq= type_qualifier
                  {
                  pushFollow(FOLLOW_type_qualifier_in_specifier_qualifier_list811);
                  tq=type_qualifier();

                  state._fsp--;
                  if (state.failed) return retval;

                  if ( state.backtracking==0 ) {
                        retval.modifier.setModifier(tq);
                        //((declaration_scope)declaration_stack.peek()).tempDecl.modifier.setModifier(tq);
                     }

                  }
                  break;

              default :
                  if ( cnt31 >= 1 ) break loop31;
                  if (state.backtracking>0) {state.failed=true; return retval;}
                        EarlyExitException eee =
                            new EarlyExitException(31, input);
                        throw eee;
                }
                cnt31++;
            } while (true);


            }

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


        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "specifier_qualifier_list"



    // $ANTLR start "function_definition"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:290:1: function_definition returns [FunctionDefinition functionDefinition] : ds= declaration_specifiers declarator c= compound_statement ;
    public final FunctionDefinition function_definition() throws RecognitionException {
        FunctionDefinition functionDefinition = null;


        ObjectiveCParser.declaration_specifiers_return ds =null;

        Statement.CompoundStatement c =null;

        ObjectiveCParser.declarator_return declarator1 =null;



          functionDefinition =new FunctionDefinition(null,-1);

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:297:2: (ds= declaration_specifiers declarator c= compound_statement )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:298:2: ds= declaration_specifiers declarator c= compound_statement
            {
            pushFollow(FOLLOW_declaration_specifiers_in_function_definition853);
            ds=declaration_specifiers();

            state._fsp--;
            if (state.failed) return functionDefinition;

            if ( state.backtracking==0 ) {
                functionDefinition.setModifier((ds!=null?ds.modifier:null));
                functionDefinition.setDataType((ds!=null?ds.dataType:null));
                functionDefinition.setSpecifier((ds!=null?ds.specifier:null));
              }

            pushFollow(FOLLOW_declarator_in_function_definition857);
            declarator1=declarator();

            state._fsp--;
            if (state.failed) return functionDefinition;

            if ( state.backtracking==0 ) {
                functionDefinition.setIdentifier((declarator1!=null?declarator1.identifier:null));
                functionDefinition.setArrayType((declarator1!=null?declarator1.arrayType:null));
              }

            pushFollow(FOLLOW_compound_statement_in_function_definition865);
            c=compound_statement();

            state._fsp--;
            if (state.failed) return functionDefinition;

            if ( state.backtracking==0 ) {
                functionDefinition.setCompoundStatement(c);
              }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return functionDefinition;
    }
    // $ANTLR end "function_definition"



    // $ANTLR start "protocol_interface_declaration"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:316:1: protocol_interface_declaration : ( interface_declaration_list )* ( qualified_protocol_interface_declaration )* ;
    public final void protocol_interface_declaration() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:316:31: ( ( interface_declaration_list )* ( qualified_protocol_interface_declaration )* )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:317:6: ( interface_declaration_list )* ( qualified_protocol_interface_declaration )*
            {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:317:6: ( interface_declaration_list )*
            loop32:
            do {
                int alt32=2;
                int LA32_0 = input.LA(1);

                if ( (LA32_0==31||LA32_0==35||LA32_0==64||LA32_0==69||(LA32_0 >= 71 && LA32_0 <= 72)||LA32_0==75||(LA32_0 >= 77 && LA32_0 <= 78)||(LA32_0 >= 81 && LA32_0 <= 86)||(LA32_0 >= 88 && LA32_0 <= 91)) ) {
                    alt32=1;
                }


                switch (alt32) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:317:6: interface_declaration_list
                  {
                  pushFollow(FOLLOW_interface_declaration_list_in_protocol_interface_declaration883);
                  interface_declaration_list();

                  state._fsp--;
                  if (state.failed) return ;

                  }
                  break;

              default :
                  break loop32;
                }
            } while (true);


            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:317:34: ( qualified_protocol_interface_declaration )*
            loop33:
            do {
                int alt33=2;
                int LA33_0 = input.LA(1);

                if ( (LA33_0==57||LA33_0==63) ) {
                    alt33=1;
                }


                switch (alt33) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:317:34: qualified_protocol_interface_declaration
                  {
                  pushFollow(FOLLOW_qualified_protocol_interface_declaration_in_protocol_interface_declaration886);
                  qualified_protocol_interface_declaration();

                  state._fsp--;
                  if (state.failed) return ;

                  }
                  break;

              default :
                  break loop33;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "protocol_interface_declaration"



    // $ANTLR start "qualified_protocol_interface_declaration"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:319:1: qualified_protocol_interface_declaration : ( '@optional' ( interface_declaration_list )* | '@required' ( interface_declaration_list )* );
    public final void qualified_protocol_interface_declaration() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:319:41: ( '@optional' ( interface_declaration_list )* | '@required' ( interface_declaration_list )* )
            int alt36=2;
            int LA36_0 = input.LA(1);

            if ( (LA36_0==57) ) {
                alt36=1;
            }
            else if ( (LA36_0==63) ) {
                alt36=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("", 36, 0, input);

                throw nvae;

            }
            switch (alt36) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:320:7: '@optional' ( interface_declaration_list )*
                    {
                    match(input,57,FOLLOW_57_in_qualified_protocol_interface_declaration901); if (state.failed) return ;

                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:320:19: ( interface_declaration_list )*
                    loop34:
                    do {
                        int alt34=2;
                        int LA34_0 = input.LA(1);

                        if ( (LA34_0==31||LA34_0==35||LA34_0==64||LA34_0==69||(LA34_0 >= 71 && LA34_0 <= 72)||LA34_0==75||(LA34_0 >= 77 && LA34_0 <= 78)||(LA34_0 >= 81 && LA34_0 <= 86)||(LA34_0 >= 88 && LA34_0 <= 91)) ) {
                            alt34=1;
                        }


                        switch (alt34) {
                      case 1 :
                          // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:320:19: interface_declaration_list
                          {
                          pushFollow(FOLLOW_interface_declaration_list_in_qualified_protocol_interface_declaration903);
                          interface_declaration_list();

                          state._fsp--;
                          if (state.failed) return ;

                          }
                          break;

                      default :
                          break loop34;
                        }
                    } while (true);


                    }
                    break;
                case 2 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:321:7: '@required' ( interface_declaration_list )*
                    {
                    match(input,63,FOLLOW_63_in_qualified_protocol_interface_declaration912); if (state.failed) return ;

                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:321:19: ( interface_declaration_list )*
                    loop35:
                    do {
                        int alt35=2;
                        int LA35_0 = input.LA(1);

                        if ( (LA35_0==31||LA35_0==35||LA35_0==64||LA35_0==69||(LA35_0 >= 71 && LA35_0 <= 72)||LA35_0==75||(LA35_0 >= 77 && LA35_0 <= 78)||(LA35_0 >= 81 && LA35_0 <= 86)||(LA35_0 >= 88 && LA35_0 <= 91)) ) {
                            alt35=1;
                        }


                        switch (alt35) {
                      case 1 :
                          // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:321:19: interface_declaration_list
                          {
                          pushFollow(FOLLOW_interface_declaration_list_in_qualified_protocol_interface_declaration914);
                          interface_declaration_list();

                          state._fsp--;
                          if (state.failed) return ;

                          }
                          break;

                      default :
                          break loop35;
                        }
                    } while (true);


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "qualified_protocol_interface_declaration"



    // $ANTLR start "protocol_declaration"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:324:1: protocol_declaration returns [Protocol protocol] : '@protocol' pName= protocol_name (pList= protocol_reference_list )? ( protocol_interface_declaration )? '@end' ;
    public final Protocol protocol_declaration() throws RecognitionException {
        Protocol protocol = null;


        String pName =null;

        ObjectiveCParser.protocol_reference_list_return pList =null;



          
            protocol = new Protocol(null, -1);
           
           
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:333:5: ( '@protocol' pName= protocol_name (pList= protocol_reference_list )? ( protocol_interface_declaration )? '@end' )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:335:2: '@protocol' pName= protocol_name (pList= protocol_reference_list )? ( protocol_interface_declaration )? '@end'
            {
            match(input,61,FOLLOW_61_in_protocol_declaration952); if (state.failed) return protocol;

            pushFollow(FOLLOW_protocol_name_in_protocol_declaration962);
            pName=protocol_name();

            state._fsp--;
            if (state.failed) return protocol;

            if ( state.backtracking==0 ) { protocol.setProtocolName( pName ); }

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:339:2: (pList= protocol_reference_list )?
            int alt37=2;
            int LA37_0 = input.LA(1);

            if ( (LA37_0==43) ) {
                alt37=1;
            }
            switch (alt37) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:339:4: pList= protocol_reference_list
                    {
                    pushFollow(FOLLOW_protocol_reference_list_in_protocol_declaration975);
                    pList=protocol_reference_list();

                    state._fsp--;
                    if (state.failed) return protocol;

                    }
                    break;

            }


            if ( state.backtracking==0 ) { protocol.setProtocolList((pList!=null?input.toString(pList.start,pList.stop):null)); }

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:341:2: ( protocol_interface_declaration )?
            int alt38=2;
            int LA38_0 = input.LA(1);

            if ( (LA38_0==31||LA38_0==35||LA38_0==57||(LA38_0 >= 63 && LA38_0 <= 64)||LA38_0==69||(LA38_0 >= 71 && LA38_0 <= 72)||LA38_0==75||(LA38_0 >= 77 && LA38_0 <= 78)||(LA38_0 >= 81 && LA38_0 <= 86)||(LA38_0 >= 88 && LA38_0 <= 91)) ) {
                alt38=1;
            }
            else if ( (LA38_0==54) ) {
                int LA38_2 = input.LA(2);

                if ( (synpred52_ObjectiveC()) ) {
                    alt38=1;
                }
            }
            switch (alt38) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:341:4: protocol_interface_declaration
                    {
                    pushFollow(FOLLOW_protocol_interface_declaration_in_protocol_declaration987);
                    protocol_interface_declaration();

                    state._fsp--;
                    if (state.failed) return protocol;

                    }
                    break;

            }


            match(input,54,FOLLOW_54_in_protocol_declaration996); if (state.failed) return protocol;

            if ( state.backtracking==0 ) { System.out.println( protocol.toString()  ); }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return protocol;
    }
    // $ANTLR end "protocol_declaration"



    // $ANTLR start "protocol_declaration_list"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:347:1: protocol_declaration_list : ( '@protocol' protocol_list ';' ) ;
    public final void protocol_declaration_list() throws RecognitionException {
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:347:26: ( ( '@protocol' protocol_list ';' ) )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:348:2: ( '@protocol' protocol_list ';' )
            {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:348:2: ( '@protocol' protocol_list ';' )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:348:3: '@protocol' protocol_list ';'
            {
            match(input,61,FOLLOW_61_in_protocol_declaration_list1011); if (state.failed) return ;

            pushFollow(FOLLOW_protocol_list_in_protocol_declaration_list1013);
            protocol_list();

            state._fsp--;
            if (state.failed) return ;

            match(input,42,FOLLOW_42_in_protocol_declaration_list1014); if (state.failed) return ;

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "protocol_declaration_list"


    public static class protocol_reference_list_return extends ParserRuleReturnScope {
        public String pList;
    };


    // $ANTLR start "protocol_reference_list"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:351:1: protocol_reference_list returns [String pList] : '<' pNames= protocol_list '>' ;
    public final ObjectiveCParser.protocol_reference_list_return protocol_reference_list() throws RecognitionException {
        ObjectiveCParser.protocol_reference_list_return retval = new ObjectiveCParser.protocol_reference_list_return();
        retval.start = input.LT(1);


        ObjectiveCParser.protocol_list_return pNames =null;




          retval.pList = null;
         
        
        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:363:2: ( '<' pNames= protocol_list '>' )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:364:3: '<' pNames= protocol_list '>'
            {
            match(input,43,FOLLOW_43_in_protocol_reference_list1044); if (state.failed) return retval;

            pushFollow(FOLLOW_protocol_list_in_protocol_reference_list1052);
            pNames=protocol_list();

            state._fsp--;
            if (state.failed) return retval;

            match(input,49,FOLLOW_49_in_protocol_reference_list1055); if (state.failed) return retval;

            }

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


            if ( state.backtracking==0 ) {
             
              retval.pList = (pNames!=null?input.toString(pNames.start,pNames.stop):null);
            
             }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "protocol_reference_list"


    public static class protocol_list_return extends ParserRuleReturnScope {
        public String pNames;
    };


    // $ANTLR start "protocol_list"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:366:1: protocol_list returns [String pNames] : name= protocol_name ( ',' protocol_name )* ;
    public final ObjectiveCParser.protocol_list_return protocol_list() throws RecognitionException {
        ObjectiveCParser.protocol_list_return retval = new ObjectiveCParser.protocol_list_return();
        retval.start = input.LT(1);


        String name =null;


        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:368:2: (name= protocol_name ( ',' protocol_name )* )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:369:2: name= protocol_name ( ',' protocol_name )*
            {
            pushFollow(FOLLOW_protocol_name_in_protocol_list1075);
            name=protocol_name();

            state._fsp--;
            if (state.failed) return retval;

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:369:23: ( ',' protocol_name )*
            loop39:
            do {
                int alt39=2;
                int LA39_0 = input.LA(1);

                if ( (LA39_0==34) ) {
                    alt39=1;
                }


                switch (alt39) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:369:24: ',' protocol_name
                  {
                  match(input,34,FOLLOW_34_in_protocol_list1078); if (state.failed) return retval;

                  pushFollow(FOLLOW_protocol_name_in_protocol_list1080);
                  protocol_name();

                  state._fsp--;
                  if (state.failed) return retval;

                  }
                  break;

              default :
                  break loop39;
                }
            } while (true);


            if ( state.backtracking==0 ) { retval.pNames = name;  }

            }

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


        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "protocol_list"



    // $ANTLR start "protocol_name"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:371:1: protocol_name returns [String text] : v= IDENTIFIER ;
    public final String protocol_name() throws RecognitionException {
        String text = null;


        Token v=null;

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:373:2: (v= IDENTIFIER )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:374:2: v= IDENTIFIER
            {
            v=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_protocol_name1104); if (state.failed) return text;

            if ( state.backtracking==0 ) {text = (v!=null?v.getText():null);}

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return text;
    }
    // $ANTLR end "protocol_name"


    protected static class declaration_scope {
        ListDeclaration arrDeclarations;
        Declaration tempDecl;
    }
    protected Stack declaration_stack = new Stack();



    // $ANTLR start "declaration"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:376:1: declaration returns [ListDeclaration declarations] : ds= declaration_specifiers (idl= init_declarator_list[$declaration::tempDecl] )? ';' ;
    public final ListDeclaration declaration() throws RecognitionException {
        declaration_stack.push(new declaration_scope());
        ListDeclaration declarations = null;


        ObjectiveCParser.declaration_specifiers_return ds =null;

        ListDeclaration idl =null;



          ((declaration_scope)declaration_stack.peek()).arrDeclarations =new ListDeclaration(null,-1);
          ((declaration_scope)declaration_stack.peek()).tempDecl =new Declaration((Node)src,-1);
         

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:390:2: (ds= declaration_specifiers (idl= init_declarator_list[$declaration::tempDecl] )? ';' )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:391:2: ds= declaration_specifiers (idl= init_declarator_list[$declaration::tempDecl] )? ';'
            {
            pushFollow(FOLLOW_declaration_specifiers_in_declaration1138);
            ds=declaration_specifiers();

            state._fsp--;
            if (state.failed) return declarations;

            if ( state.backtracking==0 ) {
             
                (ds!=null?ds.modifier:null).setParent((Statement)((declaration_scope)declaration_stack.peek()).tempDecl);
                (ds!=null?ds.specifier:null).setParent((Statement)((declaration_scope)declaration_stack.peek()).tempDecl);
               
                ((declaration_scope)declaration_stack.peek()).tempDecl.setModifier((ds!=null?ds.modifier:null));
                ((declaration_scope)declaration_stack.peek()).tempDecl.setSpecifier((ds!=null?ds.specifier:null));
                ((declaration_scope)declaration_stack.peek()).tempDecl.setDataType((ds!=null?ds.dataType:null));
               
              }

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:402:2: (idl= init_declarator_list[$declaration::tempDecl] )?
            int alt40=2;
            int LA40_0 = input.LA(1);

            if ( (LA40_0==IDENTIFIER) ) {
                alt40=1;
            }
            switch (alt40) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:403:3: idl= init_declarator_list[$declaration::tempDecl]
                    {
                    pushFollow(FOLLOW_init_declarator_list_in_declaration1150);
                    idl=init_declarator_list(((declaration_scope)declaration_stack.peek()).tempDecl);

                    state._fsp--;
                    if (state.failed) return declarations;

                    if ( state.backtracking==0 ) {
                         
                        }

                    }
                    break;

            }


            match(input,42,FOLLOW_42_in_declaration1161); if (state.failed) return declarations;

            }

            if ( state.backtracking==0 ) {
              declarations =((declaration_scope)declaration_stack.peek()).arrDeclarations;
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
            declaration_stack.pop();
        }
        return declarations;
    }
    // $ANTLR end "declaration"


    public static class declaration_specifiers_return extends ParserRuleReturnScope {
        public BasicModifier modifier;
        public Specifier specifier;
        public BasicDataType dataType;
    };


    // $ANTLR start "declaration_specifiers"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:410:1: declaration_specifiers returns [BasicModifier modifier,Specifier specifier,BasicDataType dataType] : (s= storage_class_specifier |ts= type_specifier |tq= type_qualifier )+ ;
    public final ObjectiveCParser.declaration_specifiers_return declaration_specifiers() throws RecognitionException {
        ObjectiveCParser.declaration_specifiers_return retval = new ObjectiveCParser.declaration_specifiers_return();
        retval.start = input.LT(1);


        int s =0;

        ObjectiveCParser.type_specifier_return ts =null;

        int tq =0;


        
        //Setting parent to null as its parent rule can define itself who the parent is
          retval.modifier =new BasicModifier(null);
          retval.specifier =new Specifier(null);
          retval.dataType =new BasicDataType();

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:419:2: ( (s= storage_class_specifier |ts= type_specifier |tq= type_qualifier )+ )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:420:2: (s= storage_class_specifier |ts= type_specifier |tq= type_qualifier )+
            {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:420:2: (s= storage_class_specifier |ts= type_specifier |tq= type_qualifier )+
            int cnt41=0;
            loop41:
            do {
                int alt41=4;
                switch ( input.LA(1) ) {
                case 69:
                case 77:
                case 83:
                case 86:
                    {
                    alt41=1;
                    }
                    break;
                case 64:
                case 71:
                case 75:
                case 78:
                case 81:
                case 82:
                case 84:
                case 85:
                case 88:
                case 89:
                case 90:
                    {
                    alt41=2;
                    }
                    break;
                case 72:
                case 91:
                    {
                    alt41=3;
                    }
                    break;

                }

                switch (alt41) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:421:3: s= storage_class_specifier
                  {
                  pushFollow(FOLLOW_storage_class_specifier_in_declaration_specifiers1190);
                  s=storage_class_specifier();

                  state._fsp--;
                  if (state.failed) return retval;

                  if ( state.backtracking==0 ) {
                        retval.modifier.setModifier(s);
                        //((declaration_scope)declaration_stack.peek()).tempDecl.modifier.setModifier(s);//TODO: To be removed
                      }

                  }
                  break;
              case 2 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:427:5: ts= type_specifier
                  {
                  pushFollow(FOLLOW_type_specifier_in_declaration_specifiers1206);
                  ts=type_specifier();

                  state._fsp--;
                  if (state.failed) return retval;

                  if ( state.backtracking==0 ) {
                       
                        if((ts!=null?ts.nativeType:null)!=null){
                          retval.dataType.setDataType((ts!=null?ts.nativeType:null));
                          //((declaration_scope)declaration_stack.peek()).tempDecl.dataType.setDataType((ts!=null?ts.nativeType:null));
                        }
                        else
                          retval.specifier.setSpecifier((ts!=null?ts.nativeSpecifier:null));
                          //((declaration_scope)declaration_stack.peek()).tempDecl.specifier.setSpecifier((ts!=null?ts.nativeSpecifier:null));
                        }
                      }

                  }
                  break;
              case 3 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:440:5: tq= type_qualifier
                  {
                  pushFollow(FOLLOW_type_qualifier_in_declaration_specifiers1221);
                  tq=type_qualifier();

                  state._fsp--;
                  if (state.failed) return retval;

                  if ( state.backtracking==0 ) {
                        retval.modifier.setModifier(tq);
                        //((declaration_scope)declaration_stack.peek()).tempDecl.modifier.setModifier(tq);
                      }

                  }
                  break;

              default :
                  if ( cnt41 >= 1 ) break loop41;
                  if (state.backtracking>0) {state.failed=true; return retval;}
                        EarlyExitException eee =
                            new EarlyExitException(41, input);
                        throw eee;
                }
                cnt41++;
            } while (true);


            }

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


        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "declaration_specifiers"



    // $ANTLR start "init_declarator_list"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:450:1: init_declarator_list[Declaration tempDecl] returns [ListDeclaration declarationList] : id1= init_declarator ( ',' idx= init_declarator )* ;
    public final ListDeclaration init_declarator_list(Declaration tempDecl) throws RecognitionException {
        ListDeclaration declarationList = null;


        ObjectiveCParser.init_declarator_return id1 =null;

        ObjectiveCParser.init_declarator_return idx =null;



          declarationList =new ListDeclaration(null,-1);

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:455:2: (id1= init_declarator ( ',' idx= init_declarator )* )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:455:3: id1= init_declarator ( ',' idx= init_declarator )*
            {
            pushFollow(FOLLOW_init_declarator_in_init_declarator_list1257);
            id1=init_declarator();

            state._fsp--;
            if (state.failed) return declarationList;

            if ( state.backtracking==0 ) {
                declarationList.add(mergeAndCreateDeclaration(tempDecl,(id1!=null?id1.identifier:null),(id1!=null?id1.arrayType:null),(id1!=null?id1.initializations:null)));

              }

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:460:2: ( ',' idx= init_declarator )*
            loop42:
            do {
                int alt42=2;
                int LA42_0 = input.LA(1);

                if ( (LA42_0==34) ) {
                    alt42=1;
                }


                switch (alt42) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:461:3: ',' idx= init_declarator
                  {
                  match(input,34,FOLLOW_34_in_init_declarator_list1268); if (state.failed) return declarationList;

                  pushFollow(FOLLOW_init_declarator_in_init_declarator_list1272);
                  idx=init_declarator();

                  state._fsp--;
                  if (state.failed) return declarationList;

                  if ( state.backtracking==0 ) {
                        declarationList.add(mergeAndCreateDeclaration(tempDecl,(idx!=null?idx.identifier:null),(idx!=null?idx.arrayType:null),(idx!=null?idx.initializations:null)));
                      }

                  }
                  break;

              default :
                  break loop42;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return declarationList;
    }
    // $ANTLR end "init_declarator_list"


    public static class init_declarator_return extends ParserRuleReturnScope {
        public Identifier identifier;
        public ArrayType arrayType;
        public Expression initializations;
    };


    // $ANTLR start "init_declarator"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:470:1: init_declarator returns [Identifier identifier,ArrayType arrayType, Expression initializations ] : d= declarator ( '=' exp1= initializer )? ;
    public final ObjectiveCParser.init_declarator_return init_declarator() throws RecognitionException {
        ObjectiveCParser.init_declarator_return retval = new ObjectiveCParser.init_declarator_return();
        retval.start = input.LT(1);


        ObjectiveCParser.declarator_return d =null;

        ListExpression exp1 =null;



        retval.initializations =null;
        ListExpression listExpression=null;
        //ListExpression listExpression=new ListExpression(null,-1);

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:482:3: (d= declarator ( '=' exp1= initializer )? )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:482:3: d= declarator ( '=' exp1= initializer )?
            {
            pushFollow(FOLLOW_declarator_in_init_declarator1315);
            d=declarator();

            state._fsp--;
            if (state.failed) return retval;

            if ( state.backtracking==0 ) {
                 retval.identifier =(d!=null?d.identifier:null);
                 retval.arrayType =(d!=null?d.arrayType:null);
              }

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:487:2: ( '=' exp1= initializer )?
            int alt43=2;
            int LA43_0 = input.LA(1);

            if ( (LA43_0==47) ) {
                alt43=1;
            }
            switch (alt43) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:487:3: '=' exp1= initializer
                    {
                    match(input,47,FOLLOW_47_in_init_declarator1323); if (state.failed) return retval;

                    pushFollow(FOLLOW_initializer_in_init_declarator1331);
                    exp1=initializer();

                    state._fsp--;
                    if (state.failed) return retval;

                    if ( state.backtracking==0 ) {
                        listExpression=new ListExpression(null,-1);
                        listExpression=exp1;
                      }

                    }
                    break;

            }


            }

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


            if ( state.backtracking==0 ) {
            retval.initializations =(Expression)listExpression;
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "init_declarator"



    // $ANTLR start "initializer"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:497:1: initializer returns [ListExpression expression ] : (exp1= assignment_expression | '{' exp2= initializer ( ',' exp3= initializer )* '}' );
    public final ListExpression initializer() throws RecognitionException {
        ListExpression expression = null;


        AssignmentExpression exp1 =null;

        ListExpression exp2 =null;

        ListExpression exp3 =null;



        expression =null;
        ListExpression listExpression=new ListExpression(null,-1);

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:507:5: (exp1= assignment_expression | '{' exp2= initializer ( ',' exp3= initializer )* '}' )
            int alt45=2;
            int LA45_0 = input.LA(1);

            if ( ((LA45_0 >= CHARACTER_LITERAL && LA45_0 <= DECIMAL_LITERAL)||LA45_0==FLOATING_POINT_LITERAL||LA45_0==HEX_LITERAL||LA45_0==IDENTIFIER||LA45_0==OCTAL_LITERAL||LA45_0==STRING_LITERAL||LA45_0==20||LA45_0==25||LA45_0==27||LA45_0==29||LA45_0==32||(LA45_0 >= 35 && LA45_0 <= 36)||LA45_0==98) ) {
                alt45=1;
            }
            else if ( (LA45_0==93) ) {
                alt45=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return expression;}
                NoViableAltException nvae =
                    new NoViableAltException("", 45, 0, input);

                throw nvae;

            }
            switch (alt45) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:507:5: exp1= assignment_expression
                    {
                    pushFollow(FOLLOW_assignment_expression_in_initializer1367);
                    exp1=assignment_expression();

                    state._fsp--;
                    if (state.failed) return expression;

                    if ( state.backtracking==0 ) {
                          listExpression.addExpression(exp1);
                        }

                    }
                    break;
                case 2 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:511:4: '{' exp2= initializer ( ',' exp3= initializer )* '}'
                    {
                    match(input,93,FOLLOW_93_in_initializer1374); if (state.failed) return expression;

                    pushFollow(FOLLOW_initializer_in_initializer1378);
                    exp2=initializer();

                    state._fsp--;
                    if (state.failed) return expression;

                    if ( state.backtracking==0 ) {
                          listExpression.addExpression(exp2);

                       
                        }

                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:517:3: ( ',' exp3= initializer )*
                    loop44:
                    do {
                        int alt44=2;
                        int LA44_0 = input.LA(1);

                        if ( (LA44_0==34) ) {
                            alt44=1;
                        }


                        switch (alt44) {
                      case 1 :
                          // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:517:4: ',' exp3= initializer
                          {
                          match(input,34,FOLLOW_34_in_initializer1387); if (state.failed) return expression;

                          pushFollow(FOLLOW_initializer_in_initializer1391);
                          exp3=initializer();

                          state._fsp--;
                          if (state.failed) return expression;

                          if ( state.backtracking==0 ) {
                                listExpression.addExpression(exp3);
                                }

                          }
                          break;

                      default :
                          break loop44;
                        }
                    } while (true);


                    match(input,97,FOLLOW_97_in_initializer1405); if (state.failed) return expression;

                    }
                    break;

            }
            if ( state.backtracking==0 ) {
            expression =listExpression; //At the end of rule returning the list expression
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return expression;
    }
    // $ANTLR end "initializer"


    public static class declarator_return extends ParserRuleReturnScope {
        public Identifier identifier;
        public ArrayType arrayType;
    };


    // $ANTLR start "declarator"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:525:1: declarator returns [Identifier identifier,ArrayType arrayType] : d= direct_declarator ;
    public final ObjectiveCParser.declarator_return declarator() throws RecognitionException {
        ObjectiveCParser.declarator_return retval = new ObjectiveCParser.declarator_return();
        retval.start = input.LT(1);


        ObjectiveCParser.direct_declarator_return d =null;


        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:527:2: (d= direct_declarator )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:530:3: d= direct_declarator
            {
            pushFollow(FOLLOW_direct_declarator_in_declarator1434);
            d=direct_declarator();

            state._fsp--;
            if (state.failed) return retval;

            if ( state.backtracking==0 ) {
                 retval.identifier =(d!=null?d.identifier:null);
                 retval.arrayType =(d!=null?d.arrayType:null);
               }

            }

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


        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "declarator"


    public static class direct_declarator_return extends ParserRuleReturnScope {
        public Identifier identifier;
        public ArrayType arrayType;
    };


    // $ANTLR start "direct_declarator"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:537:1: direct_declarator returns [Identifier identifier,ArrayType arrayType] : id= identifier (ds= declarator_suffix )* ;
    public final ObjectiveCParser.direct_declarator_return direct_declarator() throws RecognitionException {
        ObjectiveCParser.direct_declarator_return retval = new ObjectiveCParser.direct_declarator_return();
        retval.start = input.LT(1);


        ObjectiveCParser.identifier_return id =null;

        int ds =0;



          retval.identifier =null;
          retval.arrayType =null;

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:545:2: (id= identifier (ds= declarator_suffix )* )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:546:4: id= identifier (ds= declarator_suffix )*
            {
            pushFollow(FOLLOW_identifier_in_direct_declarator1467);
            id=identifier();

            state._fsp--;
            if (state.failed) return retval;

            if ( state.backtracking==0 ) {
                  retval.identifier =new Identifier((id!=null?input.toString(id.start,id.stop):null));
                }

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:550:4: (ds= declarator_suffix )*
            loop46:
            do {
                int alt46=2;
                int LA46_0 = input.LA(1);

                if ( (LA46_0==27||LA46_0==65) ) {
                    alt46=1;
                }


                switch (alt46) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:551:5: ds= declarator_suffix
                  {
                  pushFollow(FOLLOW_declarator_suffix_in_direct_declarator1486);
                  ds=declarator_suffix();

                  state._fsp--;
                  if (state.failed) return retval;

                  if ( state.backtracking==0 ) {
                          if(retval.arrayType==null)
                            retval.arrayType =new ArrayType();
                         
                          if(ds==-1)
                            retval.arrayType.addDimension();
                          else
                            retval.arrayType.addDimension(ds);
                        }

                  }
                  break;

              default :
                  break loop46;
                }
            } while (true);


            }

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


        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "direct_declarator"



    // $ANTLR start "declarator_suffix"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:568:1: declarator_suffix returns [int dimension] : ( '[' (c= constant )? ']' | '(' ( parameter_list )? ')' );
    public final int declarator_suffix() throws RecognitionException {
        int dimension = 0;


        ObjectiveCParser.constant_return c =null;



          dimension =-1;

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:573:2: ( '[' (c= constant )? ']' | '(' ( parameter_list )? ')' )
            int alt49=2;
            int LA49_0 = input.LA(1);

            if ( (LA49_0==65) ) {
                alt49=1;
            }
            else if ( (LA49_0==27) ) {
                alt49=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return dimension;}
                NoViableAltException nvae =
                    new NoViableAltException("", 49, 0, input);

                throw nvae;

            }
            switch (alt49) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:574:2: '[' (c= constant )? ']'
                    {
                    match(input,65,FOLLOW_65_in_declarator_suffix1531); if (state.failed) return dimension;

                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:575:3: (c= constant )?
                    int alt47=2;
                    int LA47_0 = input.LA(1);

                    if ( ((LA47_0 >= CHARACTER_LITERAL && LA47_0 <= DECIMAL_LITERAL)||LA47_0==FLOATING_POINT_LITERAL||LA47_0==HEX_LITERAL||LA47_0==OCTAL_LITERAL) ) {
                        alt47=1;
                    }
                    switch (alt47) {
                        case 1 :
                            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:576:4: c= constant
                            {
                            pushFollow(FOLLOW_constant_in_declarator_suffix1543);
                            c=constant();

                            state._fsp--;
                            if (state.failed) return dimension;

                            if ( state.backtracking==0 ) {
                                    dimension =Integer.parseInt((c!=null?input.toString(c.start,c.stop):null));
                                  }

                            }
                            break;

                    }


                    match(input,66,FOLLOW_66_in_declarator_suffix1557); if (state.failed) return dimension;

                    }
                    break;
                case 2 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:584:4: '(' ( parameter_list )? ')'
                    {
                    match(input,27,FOLLOW_27_in_declarator_suffix1572); if (state.failed) return dimension;

                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:584:8: ( parameter_list )?
                    int alt48=2;
                    int LA48_0 = input.LA(1);

                    if ( (LA48_0==64||LA48_0==69||(LA48_0 >= 71 && LA48_0 <= 72)||LA48_0==75||(LA48_0 >= 77 && LA48_0 <= 78)||(LA48_0 >= 81 && LA48_0 <= 86)||(LA48_0 >= 88 && LA48_0 <= 91)) ) {
                        alt48=1;
                    }
                    switch (alt48) {
                        case 1 :
                            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:584:8: parameter_list
                            {
                            pushFollow(FOLLOW_parameter_list_in_declarator_suffix1574);
                            parameter_list();

                            state._fsp--;
                            if (state.failed) return dimension;

                            }
                            break;

                    }


                    match(input,28,FOLLOW_28_in_declarator_suffix1577); if (state.failed) return dimension;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return dimension;
    }
    // $ANTLR end "declarator_suffix"


    public static class type_specifier_return extends ParserRuleReturnScope {
        public BasicDataType.NativeType nativeType;
        public Specifier.NativeSpecifier nativeSpecifier;
    };


    // $ANTLR start "type_specifier"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:590:1: type_specifier returns [BasicDataType.NativeType nativeType,Specifier.NativeSpecifier nativeSpecifier] : ( 'void' | 'char' | 'short' | 'long' | 'int' | 'float' | 'double' | 'BOOL' | 'signed' | 'unsigned' | 'unichar' );
    public final ObjectiveCParser.type_specifier_return type_specifier() throws RecognitionException {
        ObjectiveCParser.type_specifier_return retval = new ObjectiveCParser.type_specifier_return();
        retval.start = input.LT(1);



          retval.nativeType =null;
          retval.nativeSpecifier =null;

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:596:2: ( 'void' | 'char' | 'short' | 'long' | 'int' | 'float' | 'double' | 'BOOL' | 'signed' | 'unsigned' | 'unichar' )
            int alt50=11;
            switch ( input.LA(1) ) {
            case 90:
                {
                alt50=1;
                }
                break;
            case 71:
                {
                alt50=2;
                }
                break;
            case 84:
                {
                alt50=3;
                }
                break;
            case 82:
                {
                alt50=4;
                }
                break;
            case 81:
                {
                alt50=5;
                }
                break;
            case 78:
                {
                alt50=6;
                }
                break;
            case 75:
                {
                alt50=7;
                }
                break;
            case 64:
                {
                alt50=8;
                }
                break;
            case 85:
                {
                alt50=9;
                }
                break;
            case 89:
                {
                alt50=10;
                }
                break;
            case 88:
                {
                alt50=11;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 50, 0, input);

                throw nvae;

            }

            switch (alt50) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:597:4: 'void'
                    {
                    match(input,90,FOLLOW_90_in_type_specifier1608); if (state.failed) return retval;

                    if ( state.backtracking==0 ) {retval.nativeType =Type.BasicDataType.NativeType.VOID;}

                    }
                    break;
                case 2 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:598:4: 'char'
                    {
                    match(input,71,FOLLOW_71_in_type_specifier1615); if (state.failed) return retval;

                    if ( state.backtracking==0 ) {retval.nativeType =Type.BasicDataType.NativeType.CHAR;}

                    }
                    break;
                case 3 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:599:4: 'short'
                    {
                    match(input,84,FOLLOW_84_in_type_specifier1623); if (state.failed) return retval;

                    if ( state.backtracking==0 ) {retval.nativeSpecifier =Specifier.NativeSpecifier.SHORT;}

                    }
                    break;
                case 4 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:600:4: 'long'
                    {
                    match(input,82,FOLLOW_82_in_type_specifier1629); if (state.failed) return retval;

                    if ( state.backtracking==0 ) {retval.nativeSpecifier =Specifier.NativeSpecifier.LONG;}

                    }
                    break;
                case 5 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:601:4: 'int'
                    {
                    match(input,81,FOLLOW_81_in_type_specifier1637); if (state.failed) return retval;

                    if ( state.backtracking==0 ) {retval.nativeType =Type.BasicDataType.NativeType.INT;}

                    }
                    break;
                case 6 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:602:4: 'float'
                    {
                    match(input,78,FOLLOW_78_in_type_specifier1644); if (state.failed) return retval;

                    if ( state.backtracking==0 ) {retval.nativeType =Type.BasicDataType.NativeType.FLOAT;}

                    }
                    break;
                case 7 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:603:4: 'double'
                    {
                    match(input,75,FOLLOW_75_in_type_specifier1651); if (state.failed) return retval;

                    if ( state.backtracking==0 ) {retval.nativeType =Type.BasicDataType.NativeType.DOUBLE;}

                    }
                    break;
                case 8 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:604:4: 'BOOL'
                    {
                    match(input,64,FOLLOW_64_in_type_specifier1658); if (state.failed) return retval;

                    if ( state.backtracking==0 ) {retval.nativeType =Type.BasicDataType.NativeType.BOOLEAN;}

                    }
                    break;
                case 9 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:605:4: 'signed'
                    {
                    match(input,85,FOLLOW_85_in_type_specifier1665); if (state.failed) return retval;

                    if ( state.backtracking==0 ) {retval.nativeSpecifier =Specifier.NativeSpecifier.SIGNED;}

                    }
                    break;
                case 10 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:606:4: 'unsigned'
                    {
                    match(input,89,FOLLOW_89_in_type_specifier1672); if (state.failed) return retval;

                    if ( state.backtracking==0 ) {retval.nativeSpecifier =Specifier.NativeSpecifier.UNSIGNED;}

                    }
                    break;
                case 11 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:607:4: 'unichar'
                    {
                    match(input,88,FOLLOW_88_in_type_specifier1679); if (state.failed) return retval;

                    if ( state.backtracking==0 ) {retval.nativeType =Type.BasicDataType.NativeType.UNICHAR;}

                    }
                    break;

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


        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "type_specifier"



    // $ANTLR start "type_qualifier"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:610:1: type_qualifier returns [int modifierType] : ( 'const' | 'volatile' );
    public final int type_qualifier() throws RecognitionException {
        int modifierType = 0;


        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:612:2: ( 'const' | 'volatile' )
            int alt51=2;
            int LA51_0 = input.LA(1);

            if ( (LA51_0==72) ) {
                alt51=1;
            }
            else if ( (LA51_0==91) ) {
                alt51=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return modifierType;}
                NoViableAltException nvae =
                    new NoViableAltException("", 51, 0, input);

                throw nvae;

            }
            switch (alt51) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:613:4: 'const'
                    {
                    match(input,72,FOLLOW_72_in_type_qualifier1703); if (state.failed) return modifierType;

                    if ( state.backtracking==0 ) {modifierType =BasicModifier.CONST;}

                    }
                    break;
                case 2 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:614:4: 'volatile'
                    {
                    match(input,91,FOLLOW_91_in_type_qualifier1711); if (state.failed) return modifierType;

                    if ( state.backtracking==0 ) {modifierType =BasicModifier.VOLATILE;}

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return modifierType;
    }
    // $ANTLR end "type_qualifier"



    // $ANTLR start "storage_class_specifier"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:617:1: storage_class_specifier returns [int modifierType] : ( 'auto' | 'register' | 'static' | 'extern' );
    public final int storage_class_specifier() throws RecognitionException {
        int modifierType = 0;


        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:620:2: ( 'auto' | 'register' | 'static' | 'extern' )
            int alt52=4;
            switch ( input.LA(1) ) {
            case 69:
                {
                alt52=1;
                }
                break;
            case 83:
                {
                alt52=2;
                }
                break;
            case 86:
                {
                alt52=3;
                }
                break;
            case 77:
                {
                alt52=4;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return modifierType;}
                NoViableAltException nvae =
                    new NoViableAltException("", 52, 0, input);

                throw nvae;

            }

            switch (alt52) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:621:4: 'auto'
                    {
                    match(input,69,FOLLOW_69_in_storage_class_specifier1735); if (state.failed) return modifierType;

                    if ( state.backtracking==0 ) {modifierType =BasicModifier.AUTO;}

                    }
                    break;
                case 2 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:622:4: 'register'
                    {
                    match(input,83,FOLLOW_83_in_storage_class_specifier1743); if (state.failed) return modifierType;

                    if ( state.backtracking==0 ) {modifierType =BasicModifier.REGISTER;}

                    }
                    break;
                case 3 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:623:4: 'static'
                    {
                    match(input,86,FOLLOW_86_in_storage_class_specifier1751); if (state.failed) return modifierType;

                    if ( state.backtracking==0 ) {modifierType =BasicModifier.STATIC;}

                    }
                    break;
                case 4 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:624:4: 'extern'
                    {
                    match(input,77,FOLLOW_77_in_storage_class_specifier1759); if (state.failed) return modifierType;

                    if ( state.backtracking==0 ) {modifierType =BasicModifier.EXTERN;}

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return modifierType;
    }
    // $ANTLR end "storage_class_specifier"



    // $ANTLR start "statement"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:629:1: statement returns [Statement statement] : (sel_stmt= selection_statement |exp= expression ';' |cmp_stmt= compound_statement |itr_stmt= iteration_statement |label_stmt= labeled_statement |decl= declaration | ';' );
    public final Statement statement() throws RecognitionException {
        Statement statement = null;


        Statement sel_stmt =null;

        Expression exp =null;

        Statement.CompoundStatement cmp_stmt =null;

        Statement itr_stmt =null;

        Statement label_stmt =null;

        ListDeclaration decl =null;



        statement =null;

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:634:4: (sel_stmt= selection_statement |exp= expression ';' |cmp_stmt= compound_statement |itr_stmt= iteration_statement |label_stmt= labeled_statement |decl= declaration | ';' )
            int alt53=7;
            switch ( input.LA(1) ) {
            case 80:
            case 87:
                {
                alt53=1;
                }
                break;
            case IDENTIFIER:
                {
                int LA53_2 = input.LA(2);

                if ( ((LA53_2 >= 21 && LA53_2 <= 26)||(LA53_2 >= 29 && LA53_2 <= 31)||(LA53_2 >= 33 && LA53_2 <= 35)||LA53_2==37||(LA53_2 >= 39 && LA53_2 <= 40)||(LA53_2 >= 42 && LA53_2 <= 53)||(LA53_2 >= 67 && LA53_2 <= 68)||(LA53_2 >= 94 && LA53_2 <= 96)) ) {
                    alt53=2;
                }
                else if ( (LA53_2==41) ) {
                    alt53=5;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return statement;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 53, 2, input);

                    throw nvae;

                }
                }
                break;
            case CHARACTER_LITERAL:
            case DECIMAL_LITERAL:
            case FLOATING_POINT_LITERAL:
            case HEX_LITERAL:
            case OCTAL_LITERAL:
            case STRING_LITERAL:
            case 20:
            case 25:
            case 27:
            case 29:
            case 32:
            case 35:
            case 36:
            case 98:
                {
                alt53=2;
                }
                break;
            case 93:
                {
                alt53=3;
                }
                break;
            case 74:
            case 79:
            case 92:
                {
                alt53=4;
                }
                break;
            case 70:
            case 73:
                {
                alt53=5;
                }
                break;
            case 64:
            case 69:
            case 71:
            case 72:
            case 75:
            case 77:
            case 78:
            case 81:
            case 82:
            case 83:
            case 84:
            case 85:
            case 86:
            case 88:
            case 89:
            case 90:
            case 91:
                {
                alt53=6;
                }
                break;
            case 42:
                {
                alt53=7;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return statement;}
                NoViableAltException nvae =
                    new NoViableAltException("", 53, 0, input);

                throw nvae;

            }

            switch (alt53) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:635:4: sel_stmt= selection_statement
                    {
                    pushFollow(FOLLOW_selection_statement_in_statement1791);
                    sel_stmt=selection_statement();

                    state._fsp--;
                    if (state.failed) return statement;

                    if ( state.backtracking==0 ) {
                         statement =sel_stmt;
                         }

                    }
                    break;
                case 2 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:639:7: exp= expression ';'
                    {
                    pushFollow(FOLLOW_expression_in_statement1808);
                    exp=expression();

                    state._fsp--;
                    if (state.failed) return statement;

                    match(input,42,FOLLOW_42_in_statement1810); if (state.failed) return statement;

                    if ( state.backtracking==0 ) { statement =(Statement)exp; }

                    }
                    break;
                case 3 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:640:7: cmp_stmt= compound_statement
                    {
                    pushFollow(FOLLOW_compound_statement_in_statement1821);
                    cmp_stmt=compound_statement();

                    state._fsp--;
                    if (state.failed) return statement;

                    if ( state.backtracking==0 ) { statement =cmp_stmt; }

                    }
                    break;
                case 4 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:641:7: itr_stmt= iteration_statement
                    {
                    pushFollow(FOLLOW_iteration_statement_in_statement1832);
                    itr_stmt=iteration_statement();

                    state._fsp--;
                    if (state.failed) return statement;

                    if ( state.backtracking==0 ) {statement =itr_stmt; }

                    }
                    break;
                case 5 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:642:7: label_stmt= labeled_statement
                    {
                    pushFollow(FOLLOW_labeled_statement_in_statement1845);
                    label_stmt=labeled_statement();

                    state._fsp--;
                    if (state.failed) return statement;

                    if ( state.backtracking==0 ) { statement = label_stmt; }

                    }
                    break;
                case 6 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:643:7: decl= declaration
                    {
                    pushFollow(FOLLOW_declaration_in_statement1857);
                    decl=declaration();

                    state._fsp--;
                    if (state.failed) return statement;

                    if ( state.backtracking==0 ) {statement = decl;}

                    }
                    break;
                case 7 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:644:7: ';'
                    {
                    match(input,42,FOLLOW_42_in_statement1867); if (state.failed) return statement;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return statement;
    }
    // $ANTLR end "statement"



    // $ANTLR start "labeled_statement"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:647:1: labeled_statement returns [Statement Stmt] : (v= identifier ':' s= statement | 'case' ce= constant_expression ':' s= statement | 'default' ':' s= statement );
    public final Statement labeled_statement() throws RecognitionException {
        Statement Stmt = null;


        ObjectiveCParser.identifier_return v =null;

        Statement s =null;

        Expression ce =null;




           Statement.LabelStatement lStmt = null;
           Statement.CaseDefaultStatement cStmt = null;


        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:655:3: (v= identifier ':' s= statement | 'case' ce= constant_expression ':' s= statement | 'default' ':' s= statement )
            int alt54=3;
            switch ( input.LA(1) ) {
            case IDENTIFIER:
                {
                alt54=1;
                }
                break;
            case 70:
                {
                alt54=2;
                }
                break;
            case 73:
                {
                alt54=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return Stmt;}
                NoViableAltException nvae =
                    new NoViableAltException("", 54, 0, input);

                throw nvae;

            }

            switch (alt54) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:655:6: v= identifier ':' s= statement
                    {
                    pushFollow(FOLLOW_identifier_in_labeled_statement1896);
                    v=identifier();

                    state._fsp--;
                    if (state.failed) return Stmt;

                    if ( state.backtracking==0 ) { lStmt = new Statement.LabelStatement( null, - 1 );  lStmt.setIdentifier( (v!=null?v.identifier:null) ); }

                    match(input,41,FOLLOW_41_in_labeled_statement1905); if (state.failed) return Stmt;

                    pushFollow(FOLLOW_statement_in_labeled_statement1924);
                    s=statement();

                    state._fsp--;
                    if (state.failed) return Stmt;

                    if ( state.backtracking==0 ) { lStmt.setStatement( s ); Stmt = ( Statement ) lStmt; }

                    }
                    break;
                case 2 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:659:5: 'case' ce= constant_expression ':' s= statement
                    {
                    match(input,70,FOLLOW_70_in_labeled_statement1938); if (state.failed) return Stmt;

                    if ( state.backtracking==0 ) { cStmt = new Statement.CaseDefaultStatement( null, - 1); }

                    pushFollow(FOLLOW_constant_expression_in_labeled_statement1951);
                    ce=constant_expression();

                    state._fsp--;
                    if (state.failed) return Stmt;

                    if ( state.backtracking==0 ) { cStmt.setConstExpression( ce ); }

                    match(input,41,FOLLOW_41_in_labeled_statement1961); if (state.failed) return Stmt;

                    pushFollow(FOLLOW_statement_in_labeled_statement1972);
                    s=statement();

                    state._fsp--;
                    if (state.failed) return Stmt;

                    if ( state.backtracking==0 ) { cStmt.setStatement( s ); Stmt = ( Statement ) cStmt; }

                    }
                    break;
                case 3 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:664:5: 'default' ':' s= statement
                    {
                    match(input,73,FOLLOW_73_in_labeled_statement1986); if (state.failed) return Stmt;

                    if ( state.backtracking==0 ) {cStmt = new Statement.CaseDefaultStatement( null, - 1 ); }

                    match(input,41,FOLLOW_41_in_labeled_statement1994); if (state.failed) return Stmt;

                    pushFollow(FOLLOW_statement_in_labeled_statement2005);
                    s=statement();

                    state._fsp--;
                    if (state.failed) return Stmt;

                    if ( state.backtracking==0 ) { cStmt.setStatement( s ); Stmt = ( Statement ) cStmt; }

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return Stmt;
    }
    // $ANTLR end "labeled_statement"



    // $ANTLR start "selection_statement"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:670:1: selection_statement returns [Statement statement] : ( 'if' '(' exp= expression ')' stmtIf= statement ( 'else' stmtElse= statement )? | 'switch' '(' exp= expression ')' switch_stmt= statement );
    public final Statement selection_statement() throws RecognitionException {
        Statement statement = null;


        Expression exp =null;

        Statement stmtIf =null;

        Statement stmtElse =null;

        Statement switch_stmt =null;



        statement =null;
        Statement.If statement_i=null;
        Statement.Switch statement_s=null;


        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:683:3: ( 'if' '(' exp= expression ')' stmtIf= statement ( 'else' stmtElse= statement )? | 'switch' '(' exp= expression ')' switch_stmt= statement )
            int alt56=2;
            int LA56_0 = input.LA(1);

            if ( (LA56_0==80) ) {
                alt56=1;
            }
            else if ( (LA56_0==87) ) {
                alt56=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return statement;}
                NoViableAltException nvae =
                    new NoViableAltException("", 56, 0, input);

                throw nvae;

            }
            switch (alt56) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:684:3: 'if' '(' exp= expression ')' stmtIf= statement ( 'else' stmtElse= statement )?
                    {
                    match(input,80,FOLLOW_80_in_selection_statement2036); if (state.failed) return statement;

                    match(input,27,FOLLOW_27_in_selection_statement2038); if (state.failed) return statement;

                    pushFollow(FOLLOW_expression_in_selection_statement2046);
                    exp=expression();

                    state._fsp--;
                    if (state.failed) return statement;

                    if ( state.backtracking==0 ) {
                       statement_i=new Statement.If(null,-1);
                        statement_i.setExpression(exp);
                       }

                    match(input,28,FOLLOW_28_in_selection_statement2055); if (state.failed) return statement;

                    pushFollow(FOLLOW_statement_in_selection_statement2063);
                    stmtIf=statement();

                    state._fsp--;
                    if (state.failed) return statement;

                    if ( state.backtracking==0 ) {
                          statement_i.setIfStatement(stmtIf);
                       
                        }

                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:694:5: ( 'else' stmtElse= statement )?
                    int alt55=2;
                    int LA55_0 = input.LA(1);

                    if ( (LA55_0==76) ) {
                        int LA55_1 = input.LA(2);

                        if ( (synpred88_ObjectiveC()) ) {
                            alt55=1;
                        }
                    }
                    switch (alt55) {
                        case 1 :
                            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:694:6: 'else' stmtElse= statement
                            {
                            match(input,76,FOLLOW_76_in_selection_statement2071); if (state.failed) return statement;

                            pushFollow(FOLLOW_statement_in_selection_statement2080);
                            stmtElse=statement();

                            state._fsp--;
                            if (state.failed) return statement;

                            if ( state.backtracking==0 ) {
                                  statement_i.setElseStatement(stmtElse);
                                 
                                 }

                            }
                            break;

                    }


                    if ( state.backtracking==0 ) {statement =(Statement)statement_i;}

                    }
                    break;
                case 2 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:700:8: 'switch' '(' exp= expression ')' switch_stmt= statement
                    {
                    match(input,87,FOLLOW_87_in_selection_statement2099); if (state.failed) return statement;

                    match(input,27,FOLLOW_27_in_selection_statement2108); if (state.failed) return statement;

                    pushFollow(FOLLOW_expression_in_selection_statement2126);
                    exp=expression();

                    state._fsp--;
                    if (state.failed) return statement;

                    if ( state.backtracking==0 ) {
                           statement_s=new Statement.Switch(null,-1);
                            statement_s.setExpression(exp);
                           }

                    match(input,28,FOLLOW_28_in_selection_statement2145); if (state.failed) return statement;

                    pushFollow(FOLLOW_statement_in_selection_statement2156);
                    switch_stmt=statement();

                    state._fsp--;
                    if (state.failed) return statement;

                    if ( state.backtracking==0 ) {
                           statement_s.setSwitchStatement(switch_stmt);
                           statement =(Statement)statement_s;
                           }

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return statement;
    }
    // $ANTLR end "selection_statement"



    // $ANTLR start "iteration_statement"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:715:1: iteration_statement returns [Statement Stmt] : ( 'while' '(' e= expression ')' s= statement | 'do' s= statement 'while' '(' e= expression ')' ';' | 'for' '(' (e1= expression |decl= declaration )? ';' (e2= expression )? ';' (e3= expression )? ')' s= statement );
    public final Statement iteration_statement() throws RecognitionException {
        Statement Stmt = null;


        Expression e =null;

        Statement s =null;

        Expression e1 =null;

        ListDeclaration decl =null;

        Expression e2 =null;

        Expression e3 =null;



            Stmt = null;
            Statement.While whileStmt = null;
            Statement.ForLoop forStmt = null;
            Statement.doWhile doStmt = null;

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:723:3: ( 'while' '(' e= expression ')' s= statement | 'do' s= statement 'while' '(' e= expression ')' ';' | 'for' '(' (e1= expression |decl= declaration )? ';' (e2= expression )? ';' (e3= expression )? ')' s= statement )
            int alt60=3;
            switch ( input.LA(1) ) {
            case 92:
                {
                alt60=1;
                }
                break;
            case 74:
                {
                alt60=2;
                }
                break;
            case 79:
                {
                alt60=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return Stmt;}
                NoViableAltException nvae =
                    new NoViableAltException("", 60, 0, input);

                throw nvae;

            }

            switch (alt60) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:723:5: 'while' '(' e= expression ')' s= statement
                    {
                    match(input,92,FOLLOW_92_in_iteration_statement2189); if (state.failed) return Stmt;

                    if ( state.backtracking==0 ) {  whileStmt = new Statement.While( null, -1 ); }

                    match(input,27,FOLLOW_27_in_iteration_statement2200); if (state.failed) return Stmt;

                    pushFollow(FOLLOW_expression_in_iteration_statement2215);
                    e=expression();

                    state._fsp--;
                    if (state.failed) return Stmt;

                    if ( state.backtracking==0 ) { whileStmt.setExpression( e ); }

                    match(input,28,FOLLOW_28_in_iteration_statement2223); if (state.failed) return Stmt;

                    pushFollow(FOLLOW_statement_in_iteration_statement2236);
                    s=statement();

                    state._fsp--;
                    if (state.failed) return Stmt;

                    if ( state.backtracking==0 ) { whileStmt.setStatement( s );  Stmt = ( Statement ) whileStmt; }

                    }
                    break;
                case 2 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:729:5: 'do' s= statement 'while' '(' e= expression ')' ';'
                    {
                    match(input,74,FOLLOW_74_in_iteration_statement2247); if (state.failed) return Stmt;

                    if ( state.backtracking==0 ) { doStmt = new Statement.doWhile( null, -1 ); }

                    pushFollow(FOLLOW_statement_in_iteration_statement2265);
                    s=statement();

                    state._fsp--;
                    if (state.failed) return Stmt;

                    if ( state.backtracking==0 ) { doStmt.setStatement( s ); }

                    match(input,92,FOLLOW_92_in_iteration_statement2278); if (state.failed) return Stmt;

                    match(input,27,FOLLOW_27_in_iteration_statement2291); if (state.failed) return Stmt;

                    pushFollow(FOLLOW_expression_in_iteration_statement2307);
                    e=expression();

                    state._fsp--;
                    if (state.failed) return Stmt;

                    if ( state.backtracking==0 ) { doStmt.setExpression( e ); }

                    match(input,28,FOLLOW_28_in_iteration_statement2321); if (state.failed) return Stmt;

                    match(input,42,FOLLOW_42_in_iteration_statement2334); if (state.failed) return Stmt;

                    if ( state.backtracking==0 ) { Stmt = ( Statement ) doStmt; }

                    }
                    break;
                case 3 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:737:5: 'for' '(' (e1= expression |decl= declaration )? ';' (e2= expression )? ';' (e3= expression )? ')' s= statement
                    {
                    match(input,79,FOLLOW_79_in_iteration_statement2353); if (state.failed) return Stmt;

                    if ( state.backtracking==0 ) { forStmt = new Statement.ForLoop( null, -1 ); }

                    match(input,27,FOLLOW_27_in_iteration_statement2365); if (state.failed) return Stmt;

                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:739:10: (e1= expression |decl= declaration )?
                    int alt57=3;
                    int LA57_0 = input.LA(1);

                    if ( ((LA57_0 >= CHARACTER_LITERAL && LA57_0 <= DECIMAL_LITERAL)||LA57_0==FLOATING_POINT_LITERAL||LA57_0==HEX_LITERAL||LA57_0==IDENTIFIER||LA57_0==OCTAL_LITERAL||LA57_0==STRING_LITERAL||LA57_0==20||LA57_0==25||LA57_0==27||LA57_0==29||LA57_0==32||(LA57_0 >= 35 && LA57_0 <= 36)||LA57_0==98) ) {
                        alt57=1;
                    }
                    else if ( (LA57_0==64||LA57_0==69||(LA57_0 >= 71 && LA57_0 <= 72)||LA57_0==75||(LA57_0 >= 77 && LA57_0 <= 78)||(LA57_0 >= 81 && LA57_0 <= 86)||(LA57_0 >= 88 && LA57_0 <= 91)) ) {
                        alt57=2;
                    }
                    switch (alt57) {
                        case 1 :
                            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:739:12: e1= expression
                            {
                            pushFollow(FOLLOW_expression_in_iteration_statement2388);
                            e1=expression();

                            state._fsp--;
                            if (state.failed) return Stmt;

                            if ( state.backtracking==0 ) { forStmt.setExprInit( e1 ); }

                            }
                            break;
                        case 2 :
                            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:739:73: decl= declaration
                            {
                            pushFollow(FOLLOW_declaration_in_iteration_statement2396);
                            decl=declaration();

                            state._fsp--;
                            if (state.failed) return Stmt;

                            if ( state.backtracking==0 ) {forStmt.setDeclInit(decl); }

                            }
                            break;

                    }


                    match(input,42,FOLLOW_42_in_iteration_statement2413); if (state.failed) return Stmt;

                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:741:10: (e2= expression )?
                    int alt58=2;
                    int LA58_0 = input.LA(1);

                    if ( ((LA58_0 >= CHARACTER_LITERAL && LA58_0 <= DECIMAL_LITERAL)||LA58_0==FLOATING_POINT_LITERAL||LA58_0==HEX_LITERAL||LA58_0==IDENTIFIER||LA58_0==OCTAL_LITERAL||LA58_0==STRING_LITERAL||LA58_0==20||LA58_0==25||LA58_0==27||LA58_0==29||LA58_0==32||(LA58_0 >= 35 && LA58_0 <= 36)||LA58_0==98) ) {
                        alt58=1;
                    }
                    switch (alt58) {
                        case 1 :
                            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:741:12: e2= expression
                            {
                            pushFollow(FOLLOW_expression_in_iteration_statement2430);
                            e2=expression();

                            state._fsp--;
                            if (state.failed) return Stmt;

                            if ( state.backtracking==0 ) { forStmt.setExprCondition( e2 ); }

                            }
                            break;

                    }


                    match(input,42,FOLLOW_42_in_iteration_statement2446); if (state.failed) return Stmt;

                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:743:10: (e3= expression )?
                    int alt59=2;
                    int LA59_0 = input.LA(1);

                    if ( ((LA59_0 >= CHARACTER_LITERAL && LA59_0 <= DECIMAL_LITERAL)||LA59_0==FLOATING_POINT_LITERAL||LA59_0==HEX_LITERAL||LA59_0==IDENTIFIER||LA59_0==OCTAL_LITERAL||LA59_0==STRING_LITERAL||LA59_0==20||LA59_0==25||LA59_0==27||LA59_0==29||LA59_0==32||(LA59_0 >= 35 && LA59_0 <= 36)||LA59_0==98) ) {
                        alt59=1;
                    }
                    switch (alt59) {
                        case 1 :
                            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:743:12: e3= expression
                            {
                            pushFollow(FOLLOW_expression_in_iteration_statement2463);
                            e3=expression();

                            state._fsp--;
                            if (state.failed) return Stmt;

                            if ( state.backtracking==0 ) { forStmt.setExprLast( e3 ); }

                            }
                            break;

                    }


                    match(input,28,FOLLOW_28_in_iteration_statement2478); if (state.failed) return Stmt;

                    pushFollow(FOLLOW_statement_in_iteration_statement2493);
                    s=statement();

                    state._fsp--;
                    if (state.failed) return Stmt;

                    if ( state.backtracking==0 ) { forStmt.setStatement( s ); Stmt = ( Statement ) forStmt;  }

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return Stmt;
    }
    // $ANTLR end "iteration_statement"



    // $ANTLR start "compound_statement"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:748:1: compound_statement returns [Statement.CompoundStatement statement] : '{' (stmt_list= statement_list )? '}' ;
    public final Statement.CompoundStatement compound_statement() throws RecognitionException {
        Statement.CompoundStatement statement = null;


        Statement.StatementList stmt_list =null;



        statement =new Statement.CompoundStatement(null,-1);

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:753:4: ( '{' (stmt_list= statement_list )? '}' )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:754:4: '{' (stmt_list= statement_list )? '}'
            {
            match(input,93,FOLLOW_93_in_compound_statement2518); if (state.failed) return statement;

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:756:5: (stmt_list= statement_list )?
            int alt61=2;
            int LA61_0 = input.LA(1);

            if ( ((LA61_0 >= CHARACTER_LITERAL && LA61_0 <= DECIMAL_LITERAL)||LA61_0==FLOATING_POINT_LITERAL||LA61_0==HEX_LITERAL||LA61_0==IDENTIFIER||LA61_0==OCTAL_LITERAL||LA61_0==STRING_LITERAL||LA61_0==20||LA61_0==25||LA61_0==27||LA61_0==29||LA61_0==32||(LA61_0 >= 35 && LA61_0 <= 36)||LA61_0==42||LA61_0==64||(LA61_0 >= 69 && LA61_0 <= 75)||(LA61_0 >= 77 && LA61_0 <= 93)||LA61_0==98) ) {
                alt61=1;
            }
            switch (alt61) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:756:6: stmt_list= statement_list
                    {
                    pushFollow(FOLLOW_statement_list_in_compound_statement2532);
                    stmt_list=statement_list();

                    state._fsp--;
                    if (state.failed) return statement;

                    if ( state.backtracking==0 ) {
                           statement.setStatement(stmt_list);
                      
                        }

                    }
                    break;

            }


            match(input,97,FOLLOW_97_in_compound_statement2547); if (state.failed) return statement;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return statement;
    }
    // $ANTLR end "compound_statement"



    // $ANTLR start "statement_list"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:764:1: statement_list returns [Statement.StatementList statement] : (stmt= statement )+ ;
    public final Statement.StatementList statement_list() throws RecognitionException {
        Statement.StatementList statement = null;


        Statement stmt =null;



        statement =new Statement.StatementList(null,-1);

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:769:2: ( (stmt= statement )+ )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:770:2: (stmt= statement )+
            {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:770:2: (stmt= statement )+
            int cnt62=0;
            loop62:
            do {
                int alt62=2;
                int LA62_0 = input.LA(1);

                if ( ((LA62_0 >= CHARACTER_LITERAL && LA62_0 <= DECIMAL_LITERAL)||LA62_0==FLOATING_POINT_LITERAL||LA62_0==HEX_LITERAL||LA62_0==IDENTIFIER||LA62_0==OCTAL_LITERAL||LA62_0==STRING_LITERAL||LA62_0==20||LA62_0==25||LA62_0==27||LA62_0==29||LA62_0==32||(LA62_0 >= 35 && LA62_0 <= 36)||LA62_0==42||LA62_0==64||(LA62_0 >= 69 && LA62_0 <= 75)||(LA62_0 >= 77 && LA62_0 <= 93)||LA62_0==98) ) {
                    alt62=1;
                }


                switch (alt62) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:771:2: stmt= statement
                  {
                  pushFollow(FOLLOW_statement_in_statement_list2570);
                  stmt=statement();

                  state._fsp--;
                  if (state.failed) return statement;

                  if ( state.backtracking==0 ) {
                     if(stmt!=null) statement.addStatement(stmt);
                   }

                  }
                  break;

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


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return statement;
    }
    // $ANTLR end "statement_list"



    // $ANTLR start "expression"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:779:1: expression returns [Expression expression] : exp1= assignment_expression ( ',' expx= assignment_expression )* ;
    public final Expression expression() throws RecognitionException {
        Expression expression = null;


        AssignmentExpression exp1 =null;

        AssignmentExpression expx =null;



        expression =null;
        ListExpression listExpression=new ListExpression(null,-1);

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:788:2: (exp1= assignment_expression ( ',' expx= assignment_expression )* )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:789:2: exp1= assignment_expression ( ',' expx= assignment_expression )*
            {
            pushFollow(FOLLOW_assignment_expression_in_expression2604);
            exp1=assignment_expression();

            state._fsp--;
            if (state.failed) return expression;

            if ( state.backtracking==0 ) {
                listExpression.addExpression(exp1);
                //src.addChild((Statement) exp1);//TODO the src.addChild here should be removed, only for testing purpose
              }

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:794:2: ( ',' expx= assignment_expression )*
            loop63:
            do {
                int alt63=2;
                int LA63_0 = input.LA(1);

                if ( (LA63_0==34) ) {
                    alt63=1;
                }


                switch (alt63) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:795:3: ',' expx= assignment_expression
                  {
                  match(input,34,FOLLOW_34_in_expression2615); if (state.failed) return expression;

                  pushFollow(FOLLOW_assignment_expression_in_expression2619);
                  expx=assignment_expression();

                  state._fsp--;
                  if (state.failed) return expression;

                  if ( state.backtracking==0 ) {
                        listExpression.addExpression(expx);
                        //src.addChild((Statement) expx);//TODO the src.addChild here should be removed, only for testing purpose
                      }

                  }
                  break;

              default :
                  break loop63;
                }
            } while (true);


            }

            if ( state.backtracking==0 ) {
            expression =(Expression)listExpression; //At the end of rule returning the list expression
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return expression;
    }
    // $ANTLR end "expression"



    // $ANTLR start "assignment_expression"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:802:1: assignment_expression returns [AssignmentExpression expression] : exp1= conditional_expression (op= assignment_operator expx= assignment_expression )? ;
    public final AssignmentExpression assignment_expression() throws RecognitionException {
        AssignmentExpression expression = null;


        TertiaryExpression exp1 =null;

        AssignmentSymbol op =null;

        AssignmentExpression expx =null;



          Expression prev=null; //Will tell the prvious expression added;
          AssignmentExpression addTo=null; //Will tell where to add
          expression =new AssignmentExpression(null,-1,null);
          addTo=expression;
          AssignmentSymbol symbol=null;

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:811:2: (exp1= conditional_expression (op= assignment_operator expx= assignment_expression )? )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:812:2: exp1= conditional_expression (op= assignment_operator expx= assignment_expression )?
            {
            pushFollow(FOLLOW_conditional_expression_in_assignment_expression2649);
            exp1=conditional_expression();

            state._fsp--;
            if (state.failed) return expression;

            if ( state.backtracking==0 ) {
                expression.setTarget((Expression)exp1);
              }

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:816:2: (op= assignment_operator expx= assignment_expression )?
            int alt64=2;
            int LA64_0 = input.LA(1);

            if ( (LA64_0==23||LA64_0==26||LA64_0==30||LA64_0==33||LA64_0==37||LA64_0==40||LA64_0==45||LA64_0==47||LA64_0==52||LA64_0==68||LA64_0==95) ) {
                alt64=1;
            }
            switch (alt64) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:817:3: op= assignment_operator expx= assignment_expression
                    {
                    pushFollow(FOLLOW_assignment_operator_in_assignment_expression2663);
                    op=assignment_operator();

                    state._fsp--;
                    if (state.failed) return expression;

                    if ( state.backtracking==0 ) {symbol=op;}

                    pushFollow(FOLLOW_assignment_expression_in_assignment_expression2674);
                    expx=assignment_expression();

                    state._fsp--;
                    if (state.failed) return expression;

                    if ( state.backtracking==0 ) {
                          if(prev == null){
                            expression.setOperator(op);
                            expression.setValue((Expression) expx);
                          }
                          else{
                            addTo=createAndMergeAssignmentExpression(null,-1,expression.getOperator(),prev,addTo,(Expression)expx);
                          }
                          prev=expx;
                         
                        }

                    }
                    break;

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return expression;
    }
    // $ANTLR end "assignment_expression"



    // $ANTLR start "assignment_operator"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:833:1: assignment_operator returns [AssignmentSymbol symbol] : ( '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | '>>=' | '&=' | '^=' | '|=' );
    public final AssignmentSymbol assignment_operator() throws RecognitionException {
        AssignmentSymbol symbol = null;


        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:835:2: ( '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | '>>=' | '&=' | '^=' | '|=' )
            int alt65=11;
            switch ( input.LA(1) ) {
            case 47:
                {
                alt65=1;
                }
                break;
            case 30:
                {
                alt65=2;
                }
                break;
            case 40:
                {
                alt65=3;
                }
                break;
            case 23:
                {
                alt65=4;
                }
                break;
            case 33:
                {
                alt65=5;
                }
                break;
            case 37:
                {
                alt65=6;
                }
                break;
            case 45:
                {
                alt65=7;
                }
                break;
            case 52:
                {
                alt65=8;
                }
                break;
            case 26:
                {
                alt65=9;
                }
                break;
            case 68:
                {
                alt65=10;
                }
                break;
            case 95:
                {
                alt65=11;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return symbol;}
                NoViableAltException nvae =
                    new NoViableAltException("", 65, 0, input);

                throw nvae;

            }

            switch (alt65) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:836:4: '='
                    {
                    match(input,47,FOLLOW_47_in_assignment_operator2704); if (state.failed) return symbol;

                    if ( state.backtracking==0 ) {symbol =AssignmentOperator.AssignmentSymbol.EQUAL;}

                    }
                    break;
                case 2 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:837:4: '*='
                    {
                    match(input,30,FOLLOW_30_in_assignment_operator2711); if (state.failed) return symbol;

                    if ( state.backtracking==0 ) {symbol =AssignmentOperator.AssignmentSymbol.MUL_EQUAL;}

                    }
                    break;
                case 3 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:838:4: '/='
                    {
                    match(input,40,FOLLOW_40_in_assignment_operator2718); if (state.failed) return symbol;

                    if ( state.backtracking==0 ) {symbol =AssignmentOperator.AssignmentSymbol.DIV_EQUAL;}

                    }
                    break;
                case 4 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:839:4: '%='
                    {
                    match(input,23,FOLLOW_23_in_assignment_operator2725); if (state.failed) return symbol;

                    if ( state.backtracking==0 ) {symbol =AssignmentOperator.AssignmentSymbol.MOD_EQUAL;}

                    }
                    break;
                case 5 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:840:4: '+='
                    {
                    match(input,33,FOLLOW_33_in_assignment_operator2732); if (state.failed) return symbol;

                    if ( state.backtracking==0 ) {symbol =AssignmentOperator.AssignmentSymbol.ADD_EQUAL;}

                    }
                    break;
                case 6 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:841:4: '-='
                    {
                    match(input,37,FOLLOW_37_in_assignment_operator2739); if (state.failed) return symbol;

                    if ( state.backtracking==0 ) {symbol =AssignmentOperator.AssignmentSymbol.SUB_EQUAL;}

                    }
                    break;
                case 7 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:842:4: '<<='
                    {
                    match(input,45,FOLLOW_45_in_assignment_operator2746); if (state.failed) return symbol;

                    if ( state.backtracking==0 ) {symbol =AssignmentOperator.AssignmentSymbol.SHL_EQUAL;}

                    }
                    break;
                case 8 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:843:4: '>>='
                    {
                    match(input,52,FOLLOW_52_in_assignment_operator2753); if (state.failed) return symbol;

                    if ( state.backtracking==0 ) {symbol =AssignmentOperator.AssignmentSymbol.SHR_EQUAL;}

                    }
                    break;
                case 9 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:844:4: '&='
                    {
                    match(input,26,FOLLOW_26_in_assignment_operator2760); if (state.failed) return symbol;

                    if ( state.backtracking==0 ) {symbol =AssignmentOperator.AssignmentSymbol.BITWISE_AND_EQUAL;}

                    }
                    break;
                case 10 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:845:4: '^='
                    {
                    match(input,68,FOLLOW_68_in_assignment_operator2767); if (state.failed) return symbol;

                    if ( state.backtracking==0 ) {symbol =AssignmentOperator.AssignmentSymbol.BITWISE_XOR_EQUAL;}

                    }
                    break;
                case 11 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:846:4: '|='
                    {
                    match(input,95,FOLLOW_95_in_assignment_operator2774); if (state.failed) return symbol;

                    if ( state.backtracking==0 ) {symbol =AssignmentOperator.AssignmentSymbol.BITWISE_OR_EQUAL;}

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return symbol;
    }
    // $ANTLR end "assignment_operator"



    // $ANTLR start "conditional_expression"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:850:1: conditional_expression returns [TertiaryExpression expression] : exp1= logical_or_expression ( '?' exp2= logical_or_expression ':' exp3= logical_or_expression )? ;
    public final TertiaryExpression conditional_expression() throws RecognitionException {
        TertiaryExpression expression = null;


        BinaryExpression exp1 =null;

        BinaryExpression exp2 =null;

        BinaryExpression exp3 =null;



          expression =new TertiaryExpression(null,-1);

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:855:2: (exp1= logical_or_expression ( '?' exp2= logical_or_expression ':' exp3= logical_or_expression )? )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:856:2: exp1= logical_or_expression ( '?' exp2= logical_or_expression ':' exp3= logical_or_expression )?
            {
            pushFollow(FOLLOW_logical_or_expression_in_conditional_expression2801);
            exp1=logical_or_expression();

            state._fsp--;
            if (state.failed) return expression;

            if ( state.backtracking==0 ) {
                expression.setConditionExpression((Expression)exp1);
              }

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:860:2: ( '?' exp2= logical_or_expression ':' exp3= logical_or_expression )?
            int alt66=2;
            int LA66_0 = input.LA(1);

            if ( (LA66_0==53) ) {
                alt66=1;
            }
            switch (alt66) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:861:3: '?' exp2= logical_or_expression ':' exp3= logical_or_expression
                    {
                    match(input,53,FOLLOW_53_in_conditional_expression2812); if (state.failed) return expression;

                    pushFollow(FOLLOW_logical_or_expression_in_conditional_expression2816);
                    exp2=logical_or_expression();

                    state._fsp--;
                    if (state.failed) return expression;

                    if ( state.backtracking==0 ) {
                          expression.setIfExpression((Expression)exp2);
                        }

                    match(input,41,FOLLOW_41_in_conditional_expression2825); if (state.failed) return expression;

                    pushFollow(FOLLOW_logical_or_expression_in_conditional_expression2829);
                    exp3=logical_or_expression();

                    state._fsp--;
                    if (state.failed) return expression;

                    if ( state.backtracking==0 ) {
                          expression.setElseExpression((Expression)exp3);
                        }

                    }
                    break;

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return expression;
    }
    // $ANTLR end "conditional_expression"



    // $ANTLR start "constant_expression"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:871:1: constant_expression returns [Expression expression] : exp= conditional_expression ;
    public final Expression constant_expression() throws RecognitionException {
        Expression expression = null;


        TertiaryExpression exp =null;


        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:873:3: (exp= conditional_expression )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:873:3: exp= conditional_expression
            {
            pushFollow(FOLLOW_conditional_expression_in_constant_expression2856);
            exp=conditional_expression();

            state._fsp--;
            if (state.failed) return expression;

            if ( state.backtracking==0 ) { expression = exp; }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return expression;
    }
    // $ANTLR end "constant_expression"



    // $ANTLR start "logical_or_expression"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:875:1: logical_or_expression returns [BinaryExpression expression] : exp1= logical_and_expression ( '||' expx= logical_and_expression )* ;
    public final BinaryExpression logical_or_expression() throws RecognitionException {
        BinaryExpression expression = null;


        BinaryExpression exp1 =null;

        BinaryExpression expx =null;



          Expression prev=null; //Will tell the prvious expression added;
          BinaryExpression addTo=null; //Will tell where to add
          expression =new BinaryExpression(null,-1,null);
          addTo=expression;

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:883:2: (exp1= logical_and_expression ( '||' expx= logical_and_expression )* )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:884:2: exp1= logical_and_expression ( '||' expx= logical_and_expression )*
            {
            pushFollow(FOLLOW_logical_and_expression_in_logical_or_expression2879);
            exp1=logical_and_expression();

            state._fsp--;
            if (state.failed) return expression;

            if ( state.backtracking==0 ) {
                expression.setLhs((Expression)exp1);
              }

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:888:2: ( '||' expx= logical_and_expression )*
            loop67:
            do {
                int alt67=2;
                int LA67_0 = input.LA(1);

                if ( (LA67_0==96) ) {
                    alt67=1;
                }


                switch (alt67) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:889:3: '||' expx= logical_and_expression
                  {
                  match(input,96,FOLLOW_96_in_logical_or_expression2890); if (state.failed) return expression;

                  if ( state.backtracking==0 ) {expression.setOperator(BinaryOperator.LogicalOperator.OR);}

                  pushFollow(FOLLOW_logical_and_expression_in_logical_or_expression2902);
                  expx=logical_and_expression();

                  state._fsp--;
                  if (state.failed) return expression;

                  if ( state.backtracking==0 ) {
                        if(prev == null){
                          expression.setRhs((Expression) expx);
                        }
                        else{
                          addTo=createAndMergeBinaryExpression(null,-1,expression.getOperator(),prev,addTo,(Expression)expx);
                        }
                        prev=expx;
                       
                      }

                  }
                  break;

              default :
                  break loop67;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return expression;
    }
    // $ANTLR end "logical_or_expression"



    // $ANTLR start "logical_and_expression"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:903:1: logical_and_expression returns [BinaryExpression expression] : exp1= inclusive_or_expression ( '&&' expx= inclusive_or_expression )* ;
    public final BinaryExpression logical_and_expression() throws RecognitionException {
        BinaryExpression expression = null;


        BinaryExpression exp1 =null;

        BinaryExpression expx =null;



          Expression prev=null; //Will tell the prvious expression added;
          BinaryExpression addTo=null; //Will tell where to add
          expression =new BinaryExpression(null,-1,null);
          addTo=expression;

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:911:2: (exp1= inclusive_or_expression ( '&&' expx= inclusive_or_expression )* )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:912:2: exp1= inclusive_or_expression ( '&&' expx= inclusive_or_expression )*
            {
            pushFollow(FOLLOW_inclusive_or_expression_in_logical_and_expression2930);
            exp1=inclusive_or_expression();

            state._fsp--;
            if (state.failed) return expression;

            if ( state.backtracking==0 ) {
                expression.setLhs((Expression)exp1);
              }

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:915:2: ( '&&' expx= inclusive_or_expression )*
            loop68:
            do {
                int alt68=2;
                int LA68_0 = input.LA(1);

                if ( (LA68_0==24) ) {
                    alt68=1;
                }


                switch (alt68) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:916:3: '&&' expx= inclusive_or_expression
                  {
                  match(input,24,FOLLOW_24_in_logical_and_expression2939); if (state.failed) return expression;

                  if ( state.backtracking==0 ) {expression.setOperator(BinaryOperator.LogicalOperator.AND);}

                  pushFollow(FOLLOW_inclusive_or_expression_in_logical_and_expression2950);
                  expx=inclusive_or_expression();

                  state._fsp--;
                  if (state.failed) return expression;

                  if ( state.backtracking==0 ) {
                        if(prev == null){
                          expression.setRhs((Expression) expx);
                        }
                        else{
                          addTo=createAndMergeBinaryExpression(null,-1,expression.getOperator(),prev,addTo,(Expression)expx);
                        }
                        prev=expx;
                       
                      }

                  }
                  break;

              default :
                  break loop68;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return expression;
    }
    // $ANTLR end "logical_and_expression"



    // $ANTLR start "inclusive_or_expression"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:931:1: inclusive_or_expression returns [BinaryExpression expression] : exp1= exclusive_or_expression ( '|' expx= exclusive_or_expression )* ;
    public final BinaryExpression inclusive_or_expression() throws RecognitionException {
        BinaryExpression expression = null;


        BinaryExpression exp1 =null;

        BinaryExpression expx =null;



          Expression prev=null; //Will tell the prvious expression added;
          BinaryExpression addTo=null; //Will tell where to add
          expression =new BinaryExpression(null,-1,null);
          addTo=expression;

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:939:2: (exp1= exclusive_or_expression ( '|' expx= exclusive_or_expression )* )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:940:2: exp1= exclusive_or_expression ( '|' expx= exclusive_or_expression )*
            {
            pushFollow(FOLLOW_exclusive_or_expression_in_inclusive_or_expression2980);
            exp1=exclusive_or_expression();

            state._fsp--;
            if (state.failed) return expression;

            if ( state.backtracking==0 ) {
                expression.setLhs((Expression)exp1);
              }

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:944:2: ( '|' expx= exclusive_or_expression )*
            loop69:
            do {
                int alt69=2;
                int LA69_0 = input.LA(1);

                if ( (LA69_0==94) ) {
                    alt69=1;
                }


                switch (alt69) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:945:3: '|' expx= exclusive_or_expression
                  {
                  match(input,94,FOLLOW_94_in_inclusive_or_expression2991); if (state.failed) return expression;

                  if ( state.backtracking==0 ) {expression.setOperator(BinaryOperator.BitwiseOperator.OR);}

                  pushFollow(FOLLOW_exclusive_or_expression_in_inclusive_or_expression3003);
                  expx=exclusive_or_expression();

                  state._fsp--;
                  if (state.failed) return expression;

                  if ( state.backtracking==0 ) {
                        if(prev == null){
                          expression.setRhs((Expression) expx);
                        }
                        else{
                          addTo=createAndMergeBinaryExpression(null,-1,expression.getOperator(),prev,addTo,(Expression)expx);
                        }
                        prev=expx;
                       
                      }

                  }
                  break;

              default :
                  break loop69;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return expression;
    }
    // $ANTLR end "inclusive_or_expression"



    // $ANTLR start "exclusive_or_expression"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:960:1: exclusive_or_expression returns [BinaryExpression expression] : exp1= and_expression ( '^' expx= and_expression )* ;
    public final BinaryExpression exclusive_or_expression() throws RecognitionException {
        BinaryExpression expression = null;


        BinaryExpression exp1 =null;

        BinaryExpression expx =null;



          Expression prev=null; //Will tell the prvious expression added;
          BinaryExpression addTo=null; //Will tell where to add
          expression =new BinaryExpression(null,-1,null);
          addTo=expression;

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:968:2: (exp1= and_expression ( '^' expx= and_expression )* )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:969:2: exp1= and_expression ( '^' expx= and_expression )*
            {
            pushFollow(FOLLOW_and_expression_in_exclusive_or_expression3033);
            exp1=and_expression();

            state._fsp--;
            if (state.failed) return expression;

            if ( state.backtracking==0 ) {
                expression.setLhs((Expression)exp1);
              }

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:973:2: ( '^' expx= and_expression )*
            loop70:
            do {
                int alt70=2;
                int LA70_0 = input.LA(1);

                if ( (LA70_0==67) ) {
                    alt70=1;
                }


                switch (alt70) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:974:3: '^' expx= and_expression
                  {
                  match(input,67,FOLLOW_67_in_exclusive_or_expression3044); if (state.failed) return expression;

                  if ( state.backtracking==0 ) {expression.setOperator(BinaryOperator.BitwiseOperator.XOR);}

                  pushFollow(FOLLOW_and_expression_in_exclusive_or_expression3056);
                  expx=and_expression();

                  state._fsp--;
                  if (state.failed) return expression;

                  if ( state.backtracking==0 ) {
                        if(prev == null){
                          expression.setRhs((Expression) expx);
                        }
                        else{
                          addTo=createAndMergeBinaryExpression(null,-1,expression.getOperator(),prev,addTo,(Expression)expx);
                        }
                        prev=expx;
                       
                      }

                  }
                  break;

              default :
                  break loop70;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return expression;
    }
    // $ANTLR end "exclusive_or_expression"



    // $ANTLR start "and_expression"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:989:1: and_expression returns [BinaryExpression expression] : exp1= equality_expression ( '&' expx= equality_expression )* ;
    public final BinaryExpression and_expression() throws RecognitionException {
        BinaryExpression expression = null;


        BinaryExpression exp1 =null;

        BinaryExpression expx =null;



          Expression prev=null; //Will tell the prvious expression added;
          BinaryExpression addTo=null; //Will tell where to add
          expression =new BinaryExpression(null,-1,null);
          addTo=expression;

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:997:2: (exp1= equality_expression ( '&' expx= equality_expression )* )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:998:2: exp1= equality_expression ( '&' expx= equality_expression )*
            {
            pushFollow(FOLLOW_equality_expression_in_and_expression3086);
            exp1=equality_expression();

            state._fsp--;
            if (state.failed) return expression;

            if ( state.backtracking==0 ) {
                expression.setLhs((Expression)exp1);
              }

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1002:2: ( '&' expx= equality_expression )*
            loop71:
            do {
                int alt71=2;
                int LA71_0 = input.LA(1);

                if ( (LA71_0==25) ) {
                    alt71=1;
                }


                switch (alt71) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1003:3: '&' expx= equality_expression
                  {
                  match(input,25,FOLLOW_25_in_and_expression3097); if (state.failed) return expression;

                  if ( state.backtracking==0 ) {expression.setOperator(BinaryOperator.BitwiseOperator.AND);}

                  pushFollow(FOLLOW_equality_expression_in_and_expression3108);
                  expx=equality_expression();

                  state._fsp--;
                  if (state.failed) return expression;

                  if ( state.backtracking==0 ) {
                        if(prev == null){
                          expression.setRhs((Expression) expx);
                        }
                        else{
                          addTo=createAndMergeBinaryExpression(null,-1,expression.getOperator(),prev,addTo,(Expression)expx);
                        }
                        prev=expx;
                       
                      }

                  }
                  break;

              default :
                  break loop71;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return expression;
    }
    // $ANTLR end "and_expression"



    // $ANTLR start "equality_expression"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1018:1: equality_expression returns [BinaryExpression expression] : exp1= relational_expression ( ( '!=' | '==' ) expx= relational_expression )* ;
    public final BinaryExpression equality_expression() throws RecognitionException {
        BinaryExpression expression = null;


        BinaryExpression exp1 =null;

        BinaryExpression expx =null;



          Expression prev=null; //Will tell the prvious expression added;
          BinaryExpression addTo=null; //Will tell where to add
          BinarySymbol op=null;
          expression =new BinaryExpression(null,-1,null);
          addTo=expression;

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1027:2: (exp1= relational_expression ( ( '!=' | '==' ) expx= relational_expression )* )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1028:2: exp1= relational_expression ( ( '!=' | '==' ) expx= relational_expression )*
            {
            pushFollow(FOLLOW_relational_expression_in_equality_expression3138);
            exp1=relational_expression();

            state._fsp--;
            if (state.failed) return expression;

            if ( state.backtracking==0 ) {
                expression.setLhs((Expression)exp1);
              }

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1032:2: ( ( '!=' | '==' ) expx= relational_expression )*
            loop73:
            do {
                int alt73=2;
                int LA73_0 = input.LA(1);

                if ( (LA73_0==21||LA73_0==48) ) {
                    alt73=1;
                }


                switch (alt73) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1033:3: ( '!=' | '==' ) expx= relational_expression
                  {
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1033:3: ( '!=' | '==' )
                  int alt72=2;
                  int LA72_0 = input.LA(1);

                  if ( (LA72_0==21) ) {
                      alt72=1;
                  }
                  else if ( (LA72_0==48) ) {
                      alt72=2;
                  }
                  else {
                      if (state.backtracking>0) {state.failed=true; return expression;}
                      NoViableAltException nvae =
                          new NoViableAltException("", 72, 0, input);

                      throw nvae;

                  }
                  switch (alt72) {
                      case 1 :
                          // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1034:4: '!='
                          {
                          match(input,21,FOLLOW_21_in_equality_expression3155); if (state.failed) return expression;

                          if ( state.backtracking==0 ) {op=BinaryOperator.RelationalOperator.NOT_EQUAL;}

                          }
                          break;
                      case 2 :
                          // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1035:6: '=='
                          {
                          match(input,48,FOLLOW_48_in_equality_expression3165); if (state.failed) return expression;

                          if ( state.backtracking==0 ) {op=BinaryOperator.RelationalOperator.EQUAL;}

                          }
                          break;

                  }


                  pushFollow(FOLLOW_relational_expression_in_equality_expression3182);
                  expx=relational_expression();

                  state._fsp--;
                  if (state.failed) return expression;

                  if ( state.backtracking==0 ) {
                        if(prev == null){
                          expression.setOperator(op);
                          expression.setRhs((Expression) expx);
                        }
                        else{
                          addTo=createAndMergeBinaryExpression(null,-1,expression.getOperator(),prev,addTo,(Expression)expx);
                        }
                        prev=expx;
                       
                      }

                  }
                  break;

              default :
                  break loop73;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return expression;
    }
    // $ANTLR end "equality_expression"



    // $ANTLR start "relational_expression"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1051:1: relational_expression returns [BinaryExpression expression] : exp1= shift_expression ( ( '<' | '>' | '<=' | '>=' ) expx= shift_expression )* ;
    public final BinaryExpression relational_expression() throws RecognitionException {
        BinaryExpression expression = null;


        BinaryExpression exp1 =null;

        BinaryExpression expx =null;



          Expression prev=null; //Will tell the prvious expression added;
          BinaryExpression addTo=null; //Will tell where to add
          BinarySymbol op=null;
          expression =new BinaryExpression(null,-1,null);
          addTo=expression;

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1060:2: (exp1= shift_expression ( ( '<' | '>' | '<=' | '>=' ) expx= shift_expression )* )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1061:2: exp1= shift_expression ( ( '<' | '>' | '<=' | '>=' ) expx= shift_expression )*
            {
            pushFollow(FOLLOW_shift_expression_in_relational_expression3209);
            exp1=shift_expression();

            state._fsp--;
            if (state.failed) return expression;

            if ( state.backtracking==0 ) {
                expression.setLhs((Expression)exp1);
              }

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1064:2: ( ( '<' | '>' | '<=' | '>=' ) expx= shift_expression )*
            loop75:
            do {
                int alt75=2;
                int LA75_0 = input.LA(1);

                if ( (LA75_0==43||LA75_0==46||(LA75_0 >= 49 && LA75_0 <= 50)) ) {
                    alt75=1;
                }


                switch (alt75) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1065:3: ( '<' | '>' | '<=' | '>=' ) expx= shift_expression
                  {
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1065:3: ( '<' | '>' | '<=' | '>=' )
                  int alt74=4;
                  switch ( input.LA(1) ) {
                  case 43:
                      {
                      alt74=1;
                      }
                      break;
                  case 49:
                      {
                      alt74=2;
                      }
                      break;
                  case 46:
                      {
                      alt74=3;
                      }
                      break;
                  case 50:
                      {
                      alt74=4;
                      }
                      break;
                  default:
                      if (state.backtracking>0) {state.failed=true; return expression;}
                      NoViableAltException nvae =
                          new NoViableAltException("", 74, 0, input);

                      throw nvae;

                  }

                  switch (alt74) {
                      case 1 :
                          // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1066:4: '<'
                          {
                          match(input,43,FOLLOW_43_in_relational_expression3224); if (state.failed) return expression;

                          if ( state.backtracking==0 ) {op=BinaryOperator.RelationalOperator.LESS;}

                          }
                          break;
                      case 2 :
                          // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1067:6: '>'
                          {
                          match(input,49,FOLLOW_49_in_relational_expression3234); if (state.failed) return expression;

                          if ( state.backtracking==0 ) {op=BinaryOperator.RelationalOperator.GREATER;}

                          }
                          break;
                      case 3 :
                          // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1068:6: '<='
                          {
                          match(input,46,FOLLOW_46_in_relational_expression3244); if (state.failed) return expression;

                          if ( state.backtracking==0 ) {op=BinaryOperator.RelationalOperator.LESS_EQUAL;}

                          }
                          break;
                      case 4 :
                          // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1069:6: '>='
                          {
                          match(input,50,FOLLOW_50_in_relational_expression3254); if (state.failed) return expression;

                          if ( state.backtracking==0 ) {op=BinaryOperator.RelationalOperator.GREATER_EQUAL;}

                          }
                          break;

                  }


                  pushFollow(FOLLOW_shift_expression_in_relational_expression3271);
                  expx=shift_expression();

                  state._fsp--;
                  if (state.failed) return expression;

                  if ( state.backtracking==0 ) {
                        if(prev == null){
                          expression.setOperator(op);
                          expression.setRhs((Expression) expx);
                        }
                        else{
                          addTo=createAndMergeBinaryExpression(null,-1,expression.getOperator(),prev,addTo,(Expression)expx);
                        }
                        prev=expx;
                       
                      }

                  }
                  break;

              default :
                  break loop75;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return expression;
    }
    // $ANTLR end "relational_expression"



    // $ANTLR start "shift_expression"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1085:1: shift_expression returns [BinaryExpression expression] : exp1= additive_expression ( ( '<<' | '>>' ) expx= shift_expression )* ;
    public final BinaryExpression shift_expression() throws RecognitionException {
        BinaryExpression expression = null;


        BinaryExpression exp1 =null;

        BinaryExpression expx =null;



          Expression prev=null; //Will tell the prvious expression added;
          BinaryExpression addTo=null; //Will tell where to add
          BinarySymbol op=null;
          expression =new BinaryExpression(null,-1,null);
          addTo=expression;

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1094:2: (exp1= additive_expression ( ( '<<' | '>>' ) expx= shift_expression )* )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1095:2: exp1= additive_expression ( ( '<<' | '>>' ) expx= shift_expression )*
            {
            pushFollow(FOLLOW_additive_expression_in_shift_expression3297);
            exp1=additive_expression();

            state._fsp--;
            if (state.failed) return expression;

            if ( state.backtracking==0 ) {
                expression.setLhs((Expression)exp1);
              }

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1098:2: ( ( '<<' | '>>' ) expx= shift_expression )*
            loop77:
            do {
                int alt77=2;
                int LA77_0 = input.LA(1);

                if ( (LA77_0==44) ) {
                    int LA77_2 = input.LA(2);

                    if ( (synpred123_ObjectiveC()) ) {
                        alt77=1;
                    }


                }
                else if ( (LA77_0==51) ) {
                    int LA77_3 = input.LA(2);

                    if ( (synpred123_ObjectiveC()) ) {
                        alt77=1;
                    }


                }


                switch (alt77) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1099:3: ( '<<' | '>>' ) expx= shift_expression
                  {
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1099:3: ( '<<' | '>>' )
                  int alt76=2;
                  int LA76_0 = input.LA(1);

                  if ( (LA76_0==44) ) {
                      alt76=1;
                  }
                  else if ( (LA76_0==51) ) {
                      alt76=2;
                  }
                  else {
                      if (state.backtracking>0) {state.failed=true; return expression;}
                      NoViableAltException nvae =
                          new NoViableAltException("", 76, 0, input);

                      throw nvae;

                  }
                  switch (alt76) {
                      case 1 :
                          // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1100:4: '<<'
                          {
                          match(input,44,FOLLOW_44_in_shift_expression3312); if (state.failed) return expression;

                          if ( state.backtracking==0 ) {op=BinaryOperator.ShiftOperator.SHL;}

                          }
                          break;
                      case 2 :
                          // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1101:6: '>>'
                          {
                          match(input,51,FOLLOW_51_in_shift_expression3322); if (state.failed) return expression;

                          if ( state.backtracking==0 ) {op=BinaryOperator.ShiftOperator.SHR;}

                          }
                          break;

                  }


                  pushFollow(FOLLOW_shift_expression_in_shift_expression3338);
                  expx=shift_expression();

                  state._fsp--;
                  if (state.failed) return expression;

                  if ( state.backtracking==0 ) {
                        if(prev == null){
                          expression.setOperator(op);
                          expression.setRhs((Expression) expx);
                        }
                        else{
                          addTo=createAndMergeBinaryExpression(null,-1,expression.getOperator(),prev,addTo,(Expression)expx);
                        }
                        prev=expx;
                       
                      }

                  }
                  break;

              default :
                  break loop77;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return expression;
    }
    // $ANTLR end "shift_expression"



    // $ANTLR start "additive_expression"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1117:1: additive_expression returns [BinaryExpression expression] : exp1= multiplicative_expression ( ( '+' | '-' ) expx= multiplicative_expression )* ;
    public final BinaryExpression additive_expression() throws RecognitionException {
        BinaryExpression expression = null;


        BinaryExpression exp1 =null;

        BinaryExpression expx =null;



          Expression prev=null; //Will tell the prvious expression added;
          BinaryExpression addTo=null; //Will tell where to add
          BinarySymbol op=null;
          expression =new BinaryExpression(null,-1,null);
          addTo=expression;

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1126:2: (exp1= multiplicative_expression ( ( '+' | '-' ) expx= multiplicative_expression )* )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1127:2: exp1= multiplicative_expression ( ( '+' | '-' ) expx= multiplicative_expression )*
            {
            pushFollow(FOLLOW_multiplicative_expression_in_additive_expression3365);
            exp1=multiplicative_expression();

            state._fsp--;
            if (state.failed) return expression;

            if ( state.backtracking==0 ) {
                expression.setLhs((Expression)exp1);
              }

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1130:2: ( ( '+' | '-' ) expx= multiplicative_expression )*
            loop79:
            do {
                int alt79=2;
                int LA79_0 = input.LA(1);

                if ( (LA79_0==31||LA79_0==35) ) {
                    alt79=1;
                }


                switch (alt79) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1131:3: ( '+' | '-' ) expx= multiplicative_expression
                  {
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1131:3: ( '+' | '-' )
                  int alt78=2;
                  int LA78_0 = input.LA(1);

                  if ( (LA78_0==31) ) {
                      alt78=1;
                  }
                  else if ( (LA78_0==35) ) {
                      alt78=2;
                  }
                  else {
                      if (state.backtracking>0) {state.failed=true; return expression;}
                      NoViableAltException nvae =
                          new NoViableAltException("", 78, 0, input);

                      throw nvae;

                  }
                  switch (alt78) {
                      case 1 :
                          // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1132:4: '+'
                          {
                          match(input,31,FOLLOW_31_in_additive_expression3380); if (state.failed) return expression;

                          if ( state.backtracking==0 ) {op=BinaryOperator.ArithOperator.ADD;}

                          }
                          break;
                      case 2 :
                          // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1133:5: '-'
                          {
                          match(input,35,FOLLOW_35_in_additive_expression3389); if (state.failed) return expression;

                          if ( state.backtracking==0 ) {op=BinaryOperator.ArithOperator.SUB;}

                          }
                          break;

                  }


                  pushFollow(FOLLOW_multiplicative_expression_in_additive_expression3405);
                  expx=multiplicative_expression();

                  state._fsp--;
                  if (state.failed) return expression;

                  if ( state.backtracking==0 ) {
                        if(prev == null){
                          expression.setOperator(op);
                          expression.setRhs((Expression) expx);
                        }
                        else{
                          addTo=createAndMergeBinaryExpression(null,-1,expression.getOperator(),prev,addTo,(Expression)expx);
                        }
                        prev=expx;
                       
                      }

                  }
                  break;

              default :
                  break loop79;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return expression;
    }
    // $ANTLR end "additive_expression"



    // $ANTLR start "multiplicative_expression"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1149:1: multiplicative_expression returns [BinaryExpression expression] : exp1= cast_expression ( ( '*' | '/' | '%' ) expx= cast_expression )* ;
    public final BinaryExpression multiplicative_expression() throws RecognitionException {
        BinaryExpression expression = null;


        Expression exp1 =null;

        Expression expx =null;



          Expression prev=null; //Will tell the prvious expression added;
          BinaryExpression addTo=null; //Will tell where to add
          BinarySymbol op=null;
          expression =new BinaryExpression(null,-1,null);
          addTo=expression;

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1158:2: (exp1= cast_expression ( ( '*' | '/' | '%' ) expx= cast_expression )* )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1159:2: exp1= cast_expression ( ( '*' | '/' | '%' ) expx= cast_expression )*
            {
            pushFollow(FOLLOW_cast_expression_in_multiplicative_expression3432);
            exp1=cast_expression();

            state._fsp--;
            if (state.failed) return expression;

            if ( state.backtracking==0 ) {
                expression.setLhs((Expression)exp1);
              }

            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1162:2: ( ( '*' | '/' | '%' ) expx= cast_expression )*
            loop81:
            do {
                int alt81=2;
                int LA81_0 = input.LA(1);

                if ( (LA81_0==22||LA81_0==29||LA81_0==39) ) {
                    alt81=1;
                }


                switch (alt81) {
              case 1 :
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1163:3: ( '*' | '/' | '%' ) expx= cast_expression
                  {
                  // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1163:3: ( '*' | '/' | '%' )
                  int alt80=3;
                  switch ( input.LA(1) ) {
                  case 29:
                      {
                      alt80=1;
                      }
                      break;
                  case 39:
                      {
                      alt80=2;
                      }
                      break;
                  case 22:
                      {
                      alt80=3;
                      }
                      break;
                  default:
                      if (state.backtracking>0) {state.failed=true; return expression;}
                      NoViableAltException nvae =
                          new NoViableAltException("", 80, 0, input);

                      throw nvae;

                  }

                  switch (alt80) {
                      case 1 :
                          // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1164:4: '*'
                          {
                          match(input,29,FOLLOW_29_in_multiplicative_expression3446); if (state.failed) return expression;

                          if ( state.backtracking==0 ) {op=BinaryOperator.ArithOperator.MUL;}

                          }
                          break;
                      case 2 :
                          // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1165:6: '/'
                          {
                          match(input,39,FOLLOW_39_in_multiplicative_expression3456); if (state.failed) return expression;

                          if ( state.backtracking==0 ) {op=BinaryOperator.ArithOperator.DIV;}

                          }
                          break;
                      case 3 :
                          // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1166:6: '%'
                          {
                          match(input,22,FOLLOW_22_in_multiplicative_expression3466); if (state.failed) return expression;

                          if ( state.backtracking==0 ) {op=BinaryOperator.ArithOperator.MOD;}

                          }
                          break;

                  }


                  pushFollow(FOLLOW_cast_expression_in_multiplicative_expression3482);
                  expx=cast_expression();

                  state._fsp--;
                  if (state.failed) return expression;

                  if ( state.backtracking==0 ) {
                        if(prev == null){
                          expression.setOperator(op);
                          expression.setRhs((Expression) expx);
                        }
                        else{
                          addTo=createAndMergeBinaryExpression(null,-1,expression.getOperator(),prev,addTo,(Expression)expx);
                        }
                        prev=expx;
                       
                      }

                  }
                  break;

              default :
                  break loop81;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return expression;
    }
    // $ANTLR end "multiplicative_expression"



    // $ANTLR start "cast_expression"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1182:1: cast_expression returns [Expression expression] : exp= unary_expression ;
    public final Expression cast_expression() throws RecognitionException {
        Expression expression = null;


        UnaryExpression exp =null;


        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1184:2: (exp= unary_expression )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1185:2: exp= unary_expression
            {
            pushFollow(FOLLOW_unary_expression_in_cast_expression3507);
            exp=unary_expression();

            state._fsp--;
            if (state.failed) return expression;

            if ( state.backtracking==0 ) {expression =exp;}

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return expression;
    }
    // $ANTLR end "cast_expression"



    // $ANTLR start "unary_expression"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1187:1: unary_expression returns [UnaryExpression expression] : (exp= postfix_expression | '++' exp= unary_expression | '--' exp= unary_expression |op= unary_operator exp= cast_expression );
    public final UnaryExpression unary_expression() throws RecognitionException {
        UnaryExpression expression = null;


        Expression exp =null;

        UnarySymbol op =null;



          UnarySymbol operator=null;

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1192:2: (exp= postfix_expression | '++' exp= unary_expression | '--' exp= unary_expression |op= unary_operator exp= cast_expression )
            int alt82=4;
            switch ( input.LA(1) ) {
            case CHARACTER_LITERAL:
            case DECIMAL_LITERAL:
            case FLOATING_POINT_LITERAL:
            case HEX_LITERAL:
            case IDENTIFIER:
            case OCTAL_LITERAL:
            case STRING_LITERAL:
            case 27:
                {
                alt82=1;
                }
                break;
            case 32:
                {
                alt82=2;
                }
                break;
            case 36:
                {
                alt82=3;
                }
                break;
            case 20:
            case 25:
            case 29:
            case 35:
            case 98:
                {
                alt82=4;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return expression;}
                NoViableAltException nvae =
                    new NoViableAltException("", 82, 0, input);

                throw nvae;

            }

            switch (alt82) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1193:4: exp= postfix_expression
                    {
                    pushFollow(FOLLOW_postfix_expression_in_unary_expression3534);
                    exp=postfix_expression();

                    state._fsp--;
                    if (state.failed) return expression;

                    if ( state.backtracking==0 ) {expression =new UnaryExpression(null,-1,null,(Expression)exp);}

                    }
                    break;
                case 2 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1194:4: '++' exp= unary_expression
                    {
                    match(input,32,FOLLOW_32_in_unary_expression3541); if (state.failed) return expression;

                    pushFollow(FOLLOW_unary_expression_in_unary_expression3545);
                    exp=unary_expression();

                    state._fsp--;
                    if (state.failed) return expression;

                    if ( state.backtracking==0 ) {expression =new UnaryExpression(null,-1,UnarySymbol.PRE_INC,(Expression)exp);}

                    }
                    break;
                case 3 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1195:4: '--' exp= unary_expression
                    {
                    match(input,36,FOLLOW_36_in_unary_expression3553); if (state.failed) return expression;

                    pushFollow(FOLLOW_unary_expression_in_unary_expression3557);
                    exp=unary_expression();

                    state._fsp--;
                    if (state.failed) return expression;

                    if ( state.backtracking==0 ) {expression =new UnaryExpression(null,-1,UnarySymbol.PRE_DEC,(Expression)exp);}

                    }
                    break;
                case 4 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1196:4: op= unary_operator exp= cast_expression
                    {
                    pushFollow(FOLLOW_unary_operator_in_unary_expression3567);
                    op=unary_operator();

                    state._fsp--;
                    if (state.failed) return expression;

                    if ( state.backtracking==0 ) {operator=op;}

                    pushFollow(FOLLOW_cast_expression_in_unary_expression3572);
                    exp=cast_expression();

                    state._fsp--;
                    if (state.failed) return expression;

                    if ( state.backtracking==0 ) {expression =new UnaryExpression(null,-1,operator,(Expression)exp);}

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return expression;
    }
    // $ANTLR end "unary_expression"



    // $ANTLR start "unary_operator"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1199:1: unary_operator returns [UnarySymbol symbol] : ( '&' | '*' | '-' | '~' | '!' );
    public final UnarySymbol unary_operator() throws RecognitionException {
        UnarySymbol symbol = null;


        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1201:2: ( '&' | '*' | '-' | '~' | '!' )
            int alt83=5;
            switch ( input.LA(1) ) {
            case 25:
                {
                alt83=1;
                }
                break;
            case 29:
                {
                alt83=2;
                }
                break;
            case 35:
                {
                alt83=3;
                }
                break;
            case 98:
                {
                alt83=4;
                }
                break;
            case 20:
                {
                alt83=5;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return symbol;}
                NoViableAltException nvae =
                    new NoViableAltException("", 83, 0, input);

                throw nvae;

            }

            switch (alt83) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1202:4: '&'
                    {
                    match(input,25,FOLLOW_25_in_unary_operator3594); if (state.failed) return symbol;

                    if ( state.backtracking==0 ) {symbol =UnaryOperator.UnarySymbol.REFERENCE;}

                    }
                    break;
                case 2 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1203:4: '*'
                    {
                    match(input,29,FOLLOW_29_in_unary_operator3602); if (state.failed) return symbol;

                    if ( state.backtracking==0 ) {symbol =UnaryOperator.UnarySymbol.DEREFERENCE;}

                    }
                    break;
                case 3 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1204:4: '-'
                    {
                    match(input,35,FOLLOW_35_in_unary_operator3609); if (state.failed) return symbol;

                    if ( state.backtracking==0 ) {symbol =UnaryOperator.UnarySymbol.SIGN_MINUS;}

                    }
                    break;
                case 4 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1205:4: '~'
                    {
                    match(input,98,FOLLOW_98_in_unary_operator3616); if (state.failed) return symbol;

                    if ( state.backtracking==0 ) {symbol =UnaryOperator.UnarySymbol.BITWISE_NOT;}

                    }
                    break;
                case 5 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1206:4: '!'
                    {
                    match(input,20,FOLLOW_20_in_unary_operator3623); if (state.failed) return symbol;

                    if ( state.backtracking==0 ) {symbol =UnaryOperator.UnarySymbol.LOGICAL_NOT;}

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return symbol;
    }
    // $ANTLR end "unary_operator"



    // $ANTLR start "postfix_expression"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1210:1: postfix_expression returns [PostfixExpression expression] : exp1= primary_expression ;
    public final PostfixExpression postfix_expression() throws RecognitionException {
        PostfixExpression expression = null;


        PrimaryExpression exp1 =null;



          expression =new PostfixExpression(null,-1);

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1215:2: (exp1= primary_expression )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1216:2: exp1= primary_expression
            {
            pushFollow(FOLLOW_primary_expression_in_postfix_expression3649);
            exp1=primary_expression();

            state._fsp--;
            if (state.failed) return expression;

            if ( state.backtracking==0 ) {expression.setPrimaryExpression(exp1);}

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return expression;
    }
    // $ANTLR end "postfix_expression"



    // $ANTLR start "primary_expression"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1223:1: primary_expression returns [PrimaryExpression expression] : (id1= IDENTIFIER |id2= constant |id3= STRING_LITERAL | ( '(' exp= assignment_expression ')' ) );
    public final PrimaryExpression primary_expression() throws RecognitionException {
        PrimaryExpression expression = null;


        Token id1=null;
        Token id3=null;
        ObjectiveCParser.constant_return id2 =null;

        AssignmentExpression exp =null;


        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1225:2: (id1= IDENTIFIER |id2= constant |id3= STRING_LITERAL | ( '(' exp= assignment_expression ')' ) )
            int alt84=4;
            switch ( input.LA(1) ) {
            case IDENTIFIER:
                {
                alt84=1;
                }
                break;
            case CHARACTER_LITERAL:
            case DECIMAL_LITERAL:
            case FLOATING_POINT_LITERAL:
            case HEX_LITERAL:
            case OCTAL_LITERAL:
                {
                alt84=2;
                }
                break;
            case STRING_LITERAL:
                {
                alt84=3;
                }
                break;
            case 27:
                {
                alt84=4;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return expression;}
                NoViableAltException nvae =
                    new NoViableAltException("", 84, 0, input);

                throw nvae;

            }

            switch (alt84) {
                case 1 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1226:4: id1= IDENTIFIER
                    {
                    id1=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_primary_expression3679); if (state.failed) return expression;

                    if ( state.backtracking==0 ) {expression =new PrimaryExpression(null,-1,(id1!=null?id1.getText():null),RefType.IDENTIFIER);}

                    }
                    break;
                case 2 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1227:4: id2= constant
                    {
                    pushFollow(FOLLOW_constant_in_primary_expression3688);
                    id2=constant();

                    state._fsp--;
                    if (state.failed) return expression;

                    if ( state.backtracking==0 ) {expression =new PrimaryExpression(null,-1,(id2!=null?input.toString(id2.start,id2.stop):null),RefType.CONSTANT);}

                    }
                    break;
                case 3 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1228:4: id3= STRING_LITERAL
                    {
                    id3=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_primary_expression3697); if (state.failed) return expression;

                    if ( state.backtracking==0 ) {expression =new PrimaryExpression(null,-1,(id3!=null?id3.getText():null),RefType.STRING);}

                    }
                    break;
                case 4 :
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1229:4: ( '(' exp= assignment_expression ')' )
                    {
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1229:4: ( '(' exp= assignment_expression ')' )
                    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1229:5: '(' exp= assignment_expression ')'
                    {
                    match(input,27,FOLLOW_27_in_primary_expression3705); if (state.failed) return expression;

                    pushFollow(FOLLOW_assignment_expression_in_primary_expression3709);
                    exp=assignment_expression();

                    state._fsp--;
                    if (state.failed) return expression;

                    match(input,28,FOLLOW_28_in_primary_expression3711); if (state.failed) return expression;

                    }


                    if ( state.backtracking==0 ) {expression =new PrimaryExpression(null,-1,exp);expression.setHasParanthesis(true);}

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return expression;
    }
    // $ANTLR end "primary_expression"


    public static class identifier_return extends ParserRuleReturnScope {
        public Identifier identifier;
    };


    // $ANTLR start "identifier"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1234:1: identifier returns [ Identifier identifier ] : v= IDENTIFIER ;
    public final ObjectiveCParser.identifier_return identifier() throws RecognitionException {
        ObjectiveCParser.identifier_return retval = new ObjectiveCParser.identifier_return();
        retval.start = input.LT(1);


        Token v=null;

        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1236:3: (v= IDENTIFIER )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1236:3: v= IDENTIFIER
            {
            v=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_identifier3737); if (state.failed) return retval;

            if ( state.backtracking==0 ) { retval.identifier = new Identifier( input.toString(retval.start,input.LT(-1)) ); }

            }

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


        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "identifier"


    public static class constant_return extends ParserRuleReturnScope {
    };


    // $ANTLR start "constant"
    // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1238:1: constant : ( DECIMAL_LITERAL | HEX_LITERAL | OCTAL_LITERAL | CHARACTER_LITERAL | FLOATING_POINT_LITERAL );
    public final ObjectiveCParser.constant_return constant() throws RecognitionException {
        ObjectiveCParser.constant_return retval = new ObjectiveCParser.constant_return();
        retval.start = input.LT(1);


        try {
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1238:9: ( DECIMAL_LITERAL | HEX_LITERAL | OCTAL_LITERAL | CHARACTER_LITERAL | FLOATING_POINT_LITERAL )
            // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:
            {
            if ( (input.LA(1) >= CHARACTER_LITERAL && input.LA(1) <= DECIMAL_LITERAL)||input.LA(1)==FLOATING_POINT_LITERAL||input.LA(1)==HEX_LITERAL||input.LA(1)==OCTAL_LITERAL ) {
                input.consume();
                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);


        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
          // do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "constant"

    // $ANTLR start synpred2_ObjectiveC
    public final void synpred2_ObjectiveC_fragment() throws RecognitionException {
        ListDeclaration d =null;


        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:93:3: (d= declaration )
        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:93:3: d= declaration
        {
        pushFollow(FOLLOW_declaration_in_synpred2_ObjectiveC89);
        d=declaration();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred2_ObjectiveC

    // $ANTLR start synpred3_ObjectiveC
    public final void synpred3_ObjectiveC_fragment() throws RecognitionException {
        Statement stmt =null;


        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:94:5: (stmt= statement )
        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:94:5: stmt= statement
        {
        pushFollow(FOLLOW_statement_in_synpred3_ObjectiveC97);
        stmt=statement();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred3_ObjectiveC

    // $ANTLR start synpred6_ObjectiveC
    public final void synpred6_ObjectiveC_fragment() throws RecognitionException {
        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:97:5: ( protocol_declaration )
        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:97:5: protocol_declaration
        {
        pushFollow(FOLLOW_protocol_declaration_in_synpred6_ObjectiveC119);
        protocol_declaration();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred6_ObjectiveC

    // $ANTLR start synpred10_ObjectiveC
    public final void synpred10_ObjectiveC_fragment() throws RecognitionException {
        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:124:3: ( declaration )
        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:124:3: declaration
        {
        pushFollow(FOLLOW_declaration_in_synpred10_ObjectiveC214);
        declaration();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred10_ObjectiveC

    // $ANTLR start synpred11_ObjectiveC
    public final void synpred11_ObjectiveC_fragment() throws RecognitionException {
        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:124:17: ( class_method_declaration )
        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:124:17: class_method_declaration
        {
        pushFollow(FOLLOW_class_method_declaration_in_synpred11_ObjectiveC218);
        class_method_declaration();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred11_ObjectiveC

    // $ANTLR start synpred12_ObjectiveC
    public final void synpred12_ObjectiveC_fragment() throws RecognitionException {
        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:124:44: ( instance_method_declaration )
        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:124:44: instance_method_declaration
        {
        pushFollow(FOLLOW_instance_method_declaration_in_synpred12_ObjectiveC222);
        instance_method_declaration();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred12_ObjectiveC

    // $ANTLR start synpred20_ObjectiveC
    public final void synpred20_ObjectiveC_fragment() throws RecognitionException {
        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:156:21: ( declarator )
        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:156:21: declarator
        {
        pushFollow(FOLLOW_declarator_in_synpred20_ObjectiveC360);
        declarator();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred20_ObjectiveC

    // $ANTLR start synpred24_ObjectiveC
    public final void synpred24_ObjectiveC_fragment() throws RecognitionException {
        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:168:3: ( function_definition )
        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:168:3: function_definition
        {
        pushFollow(FOLLOW_function_definition_in_synpred24_ObjectiveC419);
        function_definition();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred24_ObjectiveC

    // $ANTLR start synpred25_ObjectiveC
    public final void synpred25_ObjectiveC_fragment() throws RecognitionException {
        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:168:25: ( declaration )
        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:168:25: declaration
        {
        pushFollow(FOLLOW_declaration_in_synpred25_ObjectiveC423);
        declaration();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred25_ObjectiveC

    // $ANTLR start synpred36_ObjectiveC
    public final void synpred36_ObjectiveC_fragment() throws RecognitionException {
        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:194:29: ( ( declarator )? )
        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:194:29: ( declarator )?
        {
        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:194:29: ( declarator )?
        int alt85=2;
        int LA85_0 = input.LA(1);

        if ( (LA85_0==IDENTIFIER) ) {
            alt85=1;
        }
        switch (alt85) {
            case 1 :
                // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:194:29: declarator
                {
                pushFollow(FOLLOW_declarator_in_synpred36_ObjectiveC557);
                declarator();

                state._fsp--;
                if (state.failed) return ;

                }
                break;

        }


        }

    }
    // $ANTLR end synpred36_ObjectiveC

    // $ANTLR start synpred52_ObjectiveC
    public final void synpred52_ObjectiveC_fragment() throws RecognitionException {
        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:341:4: ( protocol_interface_declaration )
        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:341:4: protocol_interface_declaration
        {
        pushFollow(FOLLOW_protocol_interface_declaration_in_synpred52_ObjectiveC987);
        protocol_interface_declaration();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred52_ObjectiveC

    // $ANTLR start synpred88_ObjectiveC
    public final void synpred88_ObjectiveC_fragment() throws RecognitionException {
        Statement stmtElse =null;


        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:694:6: ( 'else' stmtElse= statement )
        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:694:6: 'else' stmtElse= statement
        {
        match(input,76,FOLLOW_76_in_synpred88_ObjectiveC2071); if (state.failed) return ;

        pushFollow(FOLLOW_statement_in_synpred88_ObjectiveC2080);
        stmtElse=statement();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred88_ObjectiveC

    // $ANTLR start synpred123_ObjectiveC
    public final void synpred123_ObjectiveC_fragment() throws RecognitionException {
        BinaryExpression expx =null;


        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1099:3: ( ( '<<' | '>>' ) expx= shift_expression )
        // C:\\Users\\line47\\workspace\\ObjCFYPA\\src\\com\\icona\\antlr\\main\\ObjectiveC.g:1099:3: ( '<<' | '>>' ) expx= shift_expression
        {
        if ( input.LA(1)==44||input.LA(1)==51 ) {
            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;
        }


        pushFollow(FOLLOW_shift_expression_in_synpred123_ObjectiveC3338);
        expx=shift_expression();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred123_ObjectiveC

    // Delegated rules

    public final boolean synpred25_ObjectiveC() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred25_ObjectiveC_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred36_ObjectiveC() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred36_ObjectiveC_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_ObjectiveC() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred24_ObjectiveC_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 synpred88_ObjectiveC() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred88_ObjectiveC_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred2_ObjectiveC() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred2_ObjectiveC_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_ObjectiveC() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred6_ObjectiveC_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_ObjectiveC() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred10_ObjectiveC_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_ObjectiveC() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred11_ObjectiveC_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 synpred123_ObjectiveC() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred123_ObjectiveC_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_ObjectiveC() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred20_ObjectiveC_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_ObjectiveC() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred12_ObjectiveC_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_ObjectiveC() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred3_ObjectiveC_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred52_ObjectiveC() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred52_ObjectiveC_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 static final BitSet FOLLOW_external_declaration_in_translation_unit66 = new BitSet(new long[]{0x218004192A129530L,0x000000043FFFEFE1L});
    public static final BitSet FOLLOW_EOF_in_translation_unit74 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_declaration_in_external_declaration89 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_statement_in_external_declaration97 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_class_interface_in_external_declaration106 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_class_implementation_in_external_declaration112 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_protocol_declaration_in_external_declaration119 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_protocol_declaration_list_in_external_declaration128 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_IDENTIFIER_in_class_name141 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_IDENTIFIER_in_superclass_name149 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_56_in_class_interface167 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_class_name_in_class_interface173 = new BitSet(new long[]{0x0040020880000000L,0x000000002F7E69A1L});
    public static final BitSet FOLLOW_41_in_class_interface176 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_superclass_name_in_class_interface178 = new BitSet(new long[]{0x0040000880000000L,0x000000002F7E69A1L});
    public static final BitSet FOLLOW_instance_variables_in_class_interface187 = new BitSet(new long[]{0x0040000880000000L,0x000000000F7E69A1L});
    public static final BitSet FOLLOW_interface_declaration_list_in_class_interface195 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_class_interface204 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_declaration_in_interface_declaration_list214 = new BitSet(new long[]{0x0000000880000002L,0x000000000F7E69A1L});
    public static final BitSet FOLLOW_class_method_declaration_in_interface_declaration_list218 = new BitSet(new long[]{0x0000000880000002L,0x000000000F7E69A1L});
    public static final BitSet FOLLOW_instance_method_declaration_in_interface_declaration_list222 = new BitSet(new long[]{0x0000000880000002L,0x000000000F7E69A1L});
    public static final BitSet FOLLOW_31_in_class_method_declaration237 = new BitSet(new long[]{0x0000020008001000L});
    public static final BitSet FOLLOW_method_declaration_in_class_method_declaration239 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_35_in_instance_method_declaration251 = new BitSet(new long[]{0x0000020008001000L});
    public static final BitSet FOLLOW_method_declaration_in_instance_method_declaration253 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_method_type_in_method_declaration266 = new BitSet(new long[]{0x0000020000001000L});
    public static final BitSet FOLLOW_method_selector_in_method_declaration271 = new BitSet(new long[]{0x0000040000000000L});
    public static final BitSet FOLLOW_42_in_method_declaration273 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_93_in_instance_variables284 = new BitSet(new long[]{0x5C00020000001000L});
    public static final BitSet FOLLOW_instance_variable_declaration_in_instance_variables286 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
    public static final BitSet FOLLOW_97_in_instance_variables288 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_visibility_specification_in_instance_variable_declaration300 = new BitSet(new long[]{0x5C00020000001002L});
    public static final BitSet FOLLOW_struct_declarator_list_in_instance_variable_declaration304 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
    public static final BitSet FOLLOW_instance_variables_in_instance_variable_declaration306 = new BitSet(new long[]{0x5C00020000001002L});
    public static final BitSet FOLLOW_struct_declarator_in_struct_declarator_list344 = new BitSet(new long[]{0x0000000400000002L});
    public static final BitSet FOLLOW_34_in_struct_declarator_list347 = new BitSet(new long[]{0x0000020000001000L});
    public static final BitSet FOLLOW_struct_declarator_in_struct_declarator_list349 = new BitSet(new long[]{0x0000000400000002L});
    public static final BitSet FOLLOW_declarator_in_struct_declarator360 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_declarator_in_struct_declarator364 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_41_in_struct_declarator367 = new BitSet(new long[]{0x0000000000008530L});
    public static final BitSet FOLLOW_constant_in_struct_declarator369 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_55_in_class_implementation378 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_class_name_in_class_implementation384 = new BitSet(new long[]{0x0040020880000000L,0x000000000F7E69A1L});
    public static final BitSet FOLLOW_41_in_class_implementation388 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_superclass_name_in_class_implementation390 = new BitSet(new long[]{0x0040000880000000L,0x000000000F7E69A1L});
    public static final BitSet FOLLOW_implementation_definition_list_in_class_implementation398 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_class_implementation407 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_function_definition_in_implementation_definition_list419 = new BitSet(new long[]{0x0000000880000002L,0x000000000F7E69A1L});
    public static final BitSet FOLLOW_declaration_in_implementation_definition_list423 = new BitSet(new long[]{0x0000000880000002L,0x000000000F7E69A1L});
    public static final BitSet FOLLOW_class_method_definition_in_implementation_definition_list427 = new BitSet(new long[]{0x0000000880000002L,0x000000000F7E69A1L});
    public static final BitSet FOLLOW_instance_method_definition_in_implementation_definition_list431 = new BitSet(new long[]{0x0000000880000002L,0x000000000F7E69A1L});
    public static final BitSet FOLLOW_31_in_class_method_definition442 = new BitSet(new long[]{0x0000020008001000L});
    public static final BitSet FOLLOW_method_definition_in_class_method_definition444 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_35_in_instance_method_definition456 = new BitSet(new long[]{0x0000020008001000L});
    public static final BitSet FOLLOW_method_definition_in_instance_method_definition458 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_method_type_in_method_definition471 = new BitSet(new long[]{0x0000020000001000L});
    public static final BitSet FOLLOW_method_selector_in_method_definition475 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
    public static final BitSet FOLLOW_compound_statement_in_method_definition479 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_selector_in_method_selector489 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_keyword_declarator_in_method_selector493 = new BitSet(new long[]{0x0000020000001002L,0x000000000F7E69A1L});
    public static final BitSet FOLLOW_parameter_list_in_method_selector497 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_selector_in_keyword_declarator511 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_41_in_keyword_declarator514 = new BitSet(new long[]{0x0000000008001000L});
    public static final BitSet FOLLOW_method_type_in_keyword_declarator516 = new BitSet(new long[]{0x0000000008001000L});
    public static final BitSet FOLLOW_IDENTIFIER_in_keyword_declarator519 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_parameter_declaration_list_in_parameter_list531 = new BitSet(new long[]{0x0000000400000002L});
    public static final BitSet FOLLOW_34_in_parameter_list535 = new BitSet(new long[]{0x0000004000000000L});
    public static final BitSet FOLLOW_38_in_parameter_list537 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_declaration_specifiers_in_parameter_declaration554 = new BitSet(new long[]{0x0000000000001002L,0x0000000000000002L});
    public static final BitSet FOLLOW_declarator_in_parameter_declaration557 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_abstract_declarator_in_parameter_declaration562 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_parameter_declaration_in_parameter_declaration_list577 = new BitSet(new long[]{0x0000000400000002L});
    public static final BitSet FOLLOW_34_in_parameter_declaration_list581 = new BitSet(new long[]{0x0000000000000000L,0x000000000F7E69A1L});
    public static final BitSet FOLLOW_parameter_declaration_in_parameter_declaration_list583 = new BitSet(new long[]{0x0000000400000002L});
    public static final BitSet FOLLOW_65_in_abstract_declarator639 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000004L});
    public static final BitSet FOLLOW_constant_expression_in_abstract_declarator653 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
    public static final BitSet FOLLOW_66_in_abstract_declarator667 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000002L});
    public static final BitSet FOLLOW_65_in_abstract_declarator_suffix689 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000004L});
    public static final BitSet FOLLOW_constant_expression_in_abstract_declarator_suffix691 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
    public static final BitSet FOLLOW_66_in_abstract_declarator_suffix694 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_27_in_abstract_declarator_suffix700 = new BitSet(new long[]{0x0000000010000000L,0x000000000F7E69A1L});
    public static final BitSet FOLLOW_parameter_declaration_list_in_abstract_declarator_suffix703 = new BitSet(new long[]{0x0000000010000000L});
    public static final BitSet FOLLOW_28_in_abstract_declarator_suffix706 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_IDENTIFIER_in_selector716 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_27_in_method_type723 = new BitSet(new long[]{0x0000000000000000L,0x000000000F364981L});
    public static final BitSet FOLLOW_type_name_in_method_type725 = new BitSet(new long[]{0x0000000010000000L});
    public static final BitSet FOLLOW_28_in_method_type727 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_specifier_qualifier_list_in_type_name750 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
    public static final BitSet FOLLOW_abstract_declarator_in_type_name760 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_type_specifier_in_specifier_qualifier_list794 = new BitSet(new long[]{0x0000000000000002L,0x000000000F364981L});
    public static final BitSet FOLLOW_type_qualifier_in_specifier_qualifier_list811 = new BitSet(new long[]{0x0000000000000002L,0x000000000F364981L});
    public static final BitSet FOLLOW_declaration_specifiers_in_function_definition853 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_declarator_in_function_definition857 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
    public static final BitSet FOLLOW_compound_statement_in_function_definition865 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_interface_declaration_list_in_protocol_interface_declaration883 = new BitSet(new long[]{0x8200000880000002L,0x000000000F7E69A1L});
    public static final BitSet FOLLOW_qualified_protocol_interface_declaration_in_protocol_interface_declaration886 = new BitSet(new long[]{0x8200000000000002L});
    public static final BitSet FOLLOW_57_in_qualified_protocol_interface_declaration901 = new BitSet(new long[]{0x0000000880000002L,0x000000000F7E69A1L});
    public static final BitSet FOLLOW_interface_declaration_list_in_qualified_protocol_interface_declaration903 = new BitSet(new long[]{0x0000000880000002L,0x000000000F7E69A1L});
    public static final BitSet FOLLOW_63_in_qualified_protocol_interface_declaration912 = new BitSet(new long[]{0x0000000880000002L,0x000000000F7E69A1L});
    public static final BitSet FOLLOW_interface_declaration_list_in_qualified_protocol_interface_declaration914 = new BitSet(new long[]{0x0000000880000002L,0x000000000F7E69A1L});
    public static final BitSet FOLLOW_61_in_protocol_declaration952 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_protocol_name_in_protocol_declaration962 = new BitSet(new long[]{0x8240080880000000L,0x000000000F7E69A1L});
    public static final BitSet FOLLOW_protocol_reference_list_in_protocol_declaration975 = new BitSet(new long[]{0x8240000880000000L,0x000000000F7E69A1L});
    public static final BitSet FOLLOW_protocol_interface_declaration_in_protocol_declaration987 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_protocol_declaration996 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_61_in_protocol_declaration_list1011 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_protocol_list_in_protocol_declaration_list1013 = new BitSet(new long[]{0x0000040000000000L});
    public static final BitSet FOLLOW_42_in_protocol_declaration_list1014 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_43_in_protocol_reference_list1044 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_protocol_list_in_protocol_reference_list1052 = new BitSet(new long[]{0x0002000000000000L});
    public static final BitSet FOLLOW_49_in_protocol_reference_list1055 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_protocol_name_in_protocol_list1075 = new BitSet(new long[]{0x0000000400000002L});
    public static final BitSet FOLLOW_34_in_protocol_list1078 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_protocol_name_in_protocol_list1080 = new BitSet(new long[]{0x0000000400000002L});
    public static final BitSet FOLLOW_IDENTIFIER_in_protocol_name1104 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_declaration_specifiers_in_declaration1138 = new BitSet(new long[]{0x0000040000001000L});
    public static final BitSet FOLLOW_init_declarator_list_in_declaration1150 = new BitSet(new long[]{0x0000040000000000L});
    public static final BitSet FOLLOW_42_in_declaration1161 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_storage_class_specifier_in_declaration_specifiers1190 = new BitSet(new long[]{0x0000000000000002L,0x000000000F7E69A1L});
    public static final BitSet FOLLOW_type_specifier_in_declaration_specifiers1206 = new BitSet(new long[]{0x0000000000000002L,0x000000000F7E69A1L});
    public static final BitSet FOLLOW_type_qualifier_in_declaration_specifiers1221 = new BitSet(new long[]{0x0000000000000002L,0x000000000F7E69A1L});
    public static final BitSet FOLLOW_init_declarator_in_init_declarator_list1257 = new BitSet(new long[]{0x0000000400000002L});
    public static final BitSet FOLLOW_34_in_init_declarator_list1268 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_init_declarator_in_init_declarator_list1272 = new BitSet(new long[]{0x0000000400000002L});
    public static final BitSet FOLLOW_declarator_in_init_declarator1315 = new BitSet(new long[]{0x0000800000000002L});
    public static final BitSet FOLLOW_47_in_init_declarator1323 = new BitSet(new long[]{0x000000192A129530L,0x0000000420000000L});
    public static final BitSet FOLLOW_initializer_in_init_declarator1331 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_assignment_expression_in_initializer1367 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_93_in_initializer1374 = new BitSet(new long[]{0x000000192A129530L,0x0000000420000000L});
    public static final BitSet FOLLOW_initializer_in_initializer1378 = new BitSet(new long[]{0x0000000400000000L,0x0000000200000000L});
    public static final BitSet FOLLOW_34_in_initializer1387 = new BitSet(new long[]{0x000000192A129530L,0x0000000420000000L});
    public static final BitSet FOLLOW_initializer_in_initializer1391 = new BitSet(new long[]{0x0000000400000000L,0x0000000200000000L});
    public static final BitSet FOLLOW_97_in_initializer1405 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_direct_declarator_in_declarator1434 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_identifier_in_direct_declarator1467 = new BitSet(new long[]{0x0000000008000002L,0x0000000000000002L});
    public static final BitSet FOLLOW_declarator_suffix_in_direct_declarator1486 = new BitSet(new long[]{0x0000000008000002L,0x0000000000000002L});
    public static final BitSet FOLLOW_65_in_declarator_suffix1531 = new BitSet(new long[]{0x0000000000008530L,0x0000000000000004L});
    public static final BitSet FOLLOW_constant_in_declarator_suffix1543 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
    public static final BitSet FOLLOW_66_in_declarator_suffix1557 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_27_in_declarator_suffix1572 = new BitSet(new long[]{0x0000000010000000L,0x000000000F7E69A1L});
    public static final BitSet FOLLOW_parameter_list_in_declarator_suffix1574 = new BitSet(new long[]{0x0000000010000000L});
    public static final BitSet FOLLOW_28_in_declarator_suffix1577 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_90_in_type_specifier1608 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_71_in_type_specifier1615 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_84_in_type_specifier1623 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_82_in_type_specifier1629 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_81_in_type_specifier1637 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_78_in_type_specifier1644 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_75_in_type_specifier1651 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_64_in_type_specifier1658 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_85_in_type_specifier1665 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_89_in_type_specifier1672 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_88_in_type_specifier1679 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_72_in_type_qualifier1703 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_91_in_type_qualifier1711 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_69_in_storage_class_specifier1735 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_83_in_storage_class_specifier1743 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_86_in_storage_class_specifier1751 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_77_in_storage_class_specifier1759 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_selection_statement_in_statement1791 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_expression_in_statement1808 = new BitSet(new long[]{0x0000040000000000L});
    public static final BitSet FOLLOW_42_in_statement1810 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_compound_statement_in_statement1821 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_iteration_statement_in_statement1832 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_labeled_statement_in_statement1845 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_declaration_in_statement1857 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_42_in_statement1867 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_identifier_in_labeled_statement1896 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_41_in_labeled_statement1905 = new BitSet(new long[]{0x000004192A129530L,0x000000043FFFEFE1L});
    public static final BitSet FOLLOW_statement_in_labeled_statement1924 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_70_in_labeled_statement1938 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_constant_expression_in_labeled_statement1951 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_41_in_labeled_statement1961 = new BitSet(new long[]{0x000004192A129530L,0x000000043FFFEFE1L});
    public static final BitSet FOLLOW_statement_in_labeled_statement1972 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_73_in_labeled_statement1986 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_41_in_labeled_statement1994 = new BitSet(new long[]{0x000004192A129530L,0x000000043FFFEFE1L});
    public static final BitSet FOLLOW_statement_in_labeled_statement2005 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_80_in_selection_statement2036 = new BitSet(new long[]{0x0000000008000000L});
    public static final BitSet FOLLOW_27_in_selection_statement2038 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_expression_in_selection_statement2046 = new BitSet(new long[]{0x0000000010000000L});
    public static final BitSet FOLLOW_28_in_selection_statement2055 = new BitSet(new long[]{0x000004192A129530L,0x000000043FFFEFE1L});
    public static final BitSet FOLLOW_statement_in_selection_statement2063 = new BitSet(new long[]{0x0000000000000002L,0x0000000000001000L});
    public static final BitSet FOLLOW_76_in_selection_statement2071 = new BitSet(new long[]{0x000004192A129530L,0x000000043FFFEFE1L});
    public static final BitSet FOLLOW_statement_in_selection_statement2080 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_87_in_selection_statement2099 = new BitSet(new long[]{0x0000000008000000L});
    public static final BitSet FOLLOW_27_in_selection_statement2108 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_expression_in_selection_statement2126 = new BitSet(new long[]{0x0000000010000000L});
    public static final BitSet FOLLOW_28_in_selection_statement2145 = new BitSet(new long[]{0x000004192A129530L,0x000000043FFFEFE1L});
    public static final BitSet FOLLOW_statement_in_selection_statement2156 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_92_in_iteration_statement2189 = new BitSet(new long[]{0x0000000008000000L});
    public static final BitSet FOLLOW_27_in_iteration_statement2200 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_expression_in_iteration_statement2215 = new BitSet(new long[]{0x0000000010000000L});
    public static final BitSet FOLLOW_28_in_iteration_statement2223 = new BitSet(new long[]{0x000004192A129530L,0x000000043FFFEFE1L});
    public static final BitSet FOLLOW_statement_in_iteration_statement2236 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_74_in_iteration_statement2247 = new BitSet(new long[]{0x000004192A129530L,0x000000043FFFEFE1L});
    public static final BitSet FOLLOW_statement_in_iteration_statement2265 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
    public static final BitSet FOLLOW_92_in_iteration_statement2278 = new BitSet(new long[]{0x0000000008000000L});
    public static final BitSet FOLLOW_27_in_iteration_statement2291 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_expression_in_iteration_statement2307 = new BitSet(new long[]{0x0000000010000000L});
    public static final BitSet FOLLOW_28_in_iteration_statement2321 = new BitSet(new long[]{0x0000040000000000L});
    public static final BitSet FOLLOW_42_in_iteration_statement2334 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_79_in_iteration_statement2353 = new BitSet(new long[]{0x0000000008000000L});
    public static final BitSet FOLLOW_27_in_iteration_statement2365 = new BitSet(new long[]{0x000004192A129530L,0x000000040F7E69A1L});
    public static final BitSet FOLLOW_expression_in_iteration_statement2388 = new BitSet(new long[]{0x0000040000000000L});
    public static final BitSet FOLLOW_declaration_in_iteration_statement2396 = new BitSet(new long[]{0x0000040000000000L});
    public static final BitSet FOLLOW_42_in_iteration_statement2413 = new BitSet(new long[]{0x000004192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_expression_in_iteration_statement2430 = new BitSet(new long[]{0x0000040000000000L});
    public static final BitSet FOLLOW_42_in_iteration_statement2446 = new BitSet(new long[]{0x000000193A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_expression_in_iteration_statement2463 = new BitSet(new long[]{0x0000000010000000L});
    public static final BitSet FOLLOW_28_in_iteration_statement2478 = new BitSet(new long[]{0x000004192A129530L,0x000000043FFFEFE1L});
    public static final BitSet FOLLOW_statement_in_iteration_statement2493 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_93_in_compound_statement2518 = new BitSet(new long[]{0x000004192A129530L,0x000000063FFFEFE1L});
    public static final BitSet FOLLOW_statement_list_in_compound_statement2532 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
    public static final BitSet FOLLOW_97_in_compound_statement2547 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_statement_in_statement_list2570 = new BitSet(new long[]{0x000004192A129532L,0x000000043FFFEFE1L});
    public static final BitSet FOLLOW_assignment_expression_in_expression2604 = new BitSet(new long[]{0x0000000400000002L});
    public static final BitSet FOLLOW_34_in_expression2615 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_assignment_expression_in_expression2619 = new BitSet(new long[]{0x0000000400000002L});
    public static final BitSet FOLLOW_conditional_expression_in_assignment_expression2649 = new BitSet(new long[]{0x0010A12244800002L,0x0000000080000010L});
    public static final BitSet FOLLOW_assignment_operator_in_assignment_expression2663 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_assignment_expression_in_assignment_expression2674 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_47_in_assignment_operator2704 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_30_in_assignment_operator2711 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_40_in_assignment_operator2718 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_23_in_assignment_operator2725 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_33_in_assignment_operator2732 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_37_in_assignment_operator2739 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_45_in_assignment_operator2746 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_52_in_assignment_operator2753 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_26_in_assignment_operator2760 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_68_in_assignment_operator2767 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_95_in_assignment_operator2774 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_logical_or_expression_in_conditional_expression2801 = new BitSet(new long[]{0x0020000000000002L});
    public static final BitSet FOLLOW_53_in_conditional_expression2812 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_logical_or_expression_in_conditional_expression2816 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_41_in_conditional_expression2825 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_logical_or_expression_in_conditional_expression2829 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_conditional_expression_in_constant_expression2856 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_logical_and_expression_in_logical_or_expression2879 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
    public static final BitSet FOLLOW_96_in_logical_or_expression2890 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_logical_and_expression_in_logical_or_expression2902 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
    public static final BitSet FOLLOW_inclusive_or_expression_in_logical_and_expression2930 = new BitSet(new long[]{0x0000000001000002L});
    public static final BitSet FOLLOW_24_in_logical_and_expression2939 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_inclusive_or_expression_in_logical_and_expression2950 = new BitSet(new long[]{0x0000000001000002L});
    public static final BitSet FOLLOW_exclusive_or_expression_in_inclusive_or_expression2980 = new BitSet(new long[]{0x0000000000000002L,0x0000000040000000L});
    public static final BitSet FOLLOW_94_in_inclusive_or_expression2991 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_exclusive_or_expression_in_inclusive_or_expression3003 = new BitSet(new long[]{0x0000000000000002L,0x0000000040000000L});
    public static final BitSet FOLLOW_and_expression_in_exclusive_or_expression3033 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
    public static final BitSet FOLLOW_67_in_exclusive_or_expression3044 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_and_expression_in_exclusive_or_expression3056 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
    public static final BitSet FOLLOW_equality_expression_in_and_expression3086 = new BitSet(new long[]{0x0000000002000002L});
    public static final BitSet FOLLOW_25_in_and_expression3097 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_equality_expression_in_and_expression3108 = new BitSet(new long[]{0x0000000002000002L});
    public static final BitSet FOLLOW_relational_expression_in_equality_expression3138 = new BitSet(new long[]{0x0001000000200002L});
    public static final BitSet FOLLOW_21_in_equality_expression3155 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_48_in_equality_expression3165 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_relational_expression_in_equality_expression3182 = new BitSet(new long[]{0x0001000000200002L});
    public static final BitSet FOLLOW_shift_expression_in_relational_expression3209 = new BitSet(new long[]{0x0006480000000002L});
    public static final BitSet FOLLOW_43_in_relational_expression3224 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_49_in_relational_expression3234 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_46_in_relational_expression3244 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_50_in_relational_expression3254 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_shift_expression_in_relational_expression3271 = new BitSet(new long[]{0x0006480000000002L});
    public static final BitSet FOLLOW_additive_expression_in_shift_expression3297 = new BitSet(new long[]{0x0008100000000002L});
    public static final BitSet FOLLOW_44_in_shift_expression3312 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_51_in_shift_expression3322 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_shift_expression_in_shift_expression3338 = new BitSet(new long[]{0x0008100000000002L});
    public static final BitSet FOLLOW_multiplicative_expression_in_additive_expression3365 = new BitSet(new long[]{0x0000000880000002L});
    public static final BitSet FOLLOW_31_in_additive_expression3380 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_35_in_additive_expression3389 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_multiplicative_expression_in_additive_expression3405 = new BitSet(new long[]{0x0000000880000002L});
    public static final BitSet FOLLOW_cast_expression_in_multiplicative_expression3432 = new BitSet(new long[]{0x0000008020400002L});
    public static final BitSet FOLLOW_29_in_multiplicative_expression3446 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_39_in_multiplicative_expression3456 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_22_in_multiplicative_expression3466 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_cast_expression_in_multiplicative_expression3482 = new BitSet(new long[]{0x0000008020400002L});
    public static final BitSet FOLLOW_unary_expression_in_cast_expression3507 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_postfix_expression_in_unary_expression3534 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_32_in_unary_expression3541 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_unary_expression_in_unary_expression3545 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_36_in_unary_expression3553 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_unary_expression_in_unary_expression3557 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_unary_operator_in_unary_expression3567 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_cast_expression_in_unary_expression3572 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_25_in_unary_operator3594 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_29_in_unary_operator3602 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_35_in_unary_operator3609 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_98_in_unary_operator3616 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_20_in_unary_operator3623 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_primary_expression_in_postfix_expression3649 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_IDENTIFIER_in_primary_expression3679 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_constant_in_primary_expression3688 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_STRING_LITERAL_in_primary_expression3697 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_27_in_primary_expression3705 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_assignment_expression_in_primary_expression3709 = new BitSet(new long[]{0x0000000010000000L});
    public static final BitSet FOLLOW_28_in_primary_expression3711 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_IDENTIFIER_in_identifier3737 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_declaration_in_synpred2_ObjectiveC89 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_statement_in_synpred3_ObjectiveC97 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_protocol_declaration_in_synpred6_ObjectiveC119 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_declaration_in_synpred10_ObjectiveC214 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_class_method_declaration_in_synpred11_ObjectiveC218 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_instance_method_declaration_in_synpred12_ObjectiveC222 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_declarator_in_synpred20_ObjectiveC360 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_function_definition_in_synpred24_ObjectiveC419 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_declaration_in_synpred25_ObjectiveC423 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_declarator_in_synpred36_ObjectiveC557 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_protocol_interface_declaration_in_synpred52_ObjectiveC987 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_76_in_synpred88_ObjectiveC2071 = new BitSet(new long[]{0x000004192A129530L,0x000000043FFFEFE1L});
    public static final BitSet FOLLOW_statement_in_synpred88_ObjectiveC2080 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_set_in_synpred123_ObjectiveC3307 = new BitSet(new long[]{0x000000192A129530L,0x0000000400000000L});
    public static final BitSet FOLLOW_shift_expression_in_synpred123_ObjectiveC3338 = new BitSet(new long[]{0x0000000000000002L});

}
TOP

Related Classes of com.icona.antlr.main.ObjectiveCParser

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.