Package cambridge.parser.expressions

Source Code of cambridge.parser.expressions.ExpressionParser$DFA24

// $ANTLR 3.2 Sep 23, 2009 12:02:23 /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g 2011-01-28 00:23:06

package cambridge.parser.expressions;


import org.antlr.runtime.BaseRecognizer;
import org.antlr.runtime.BitSet;
import org.antlr.runtime.DFA;
import org.antlr.runtime.NoViableAltException;
import org.antlr.runtime.Parser;
import org.antlr.runtime.RecognitionException;
import org.antlr.runtime.RecognizerSharedState;
import org.antlr.runtime.Token;
import org.antlr.runtime.TokenStream;

import java.util.ArrayList;

public class ExpressionParser extends Parser {
   public static final String[] tokenNames = new String[]{
      "<invalid>", "<EOR>", "<DOWN>", "<UP>", "IDENTIFIER", "INTLITERAL", "LONGLITERAL", "FLOATLITERAL", "DOUBLELITERAL", "STRINGLITERAL", "CHARLITERAL", "TRUE", "FALSE", "NULL", "RANGELITERAL", "IntegerNumber", "LongSuffix", "HexPrefix", "HexDigit", "Exponent", "NonIntegerNumber", "FloatSuffix", "DoubleSuffix", "EscapeSequence", "WS", "SUPER", "LPAREN", "RPAREN", "LBRACKET", "RBRACKET", "DOT", "EQ", "BANG", "TILDE", "EQEQ", "AMPAMP", "BARBAR", "PLUS", "SUB", "STAR", "SLASH", "AMP", "BAR", "CARET", "PERCENT", "BANGEQ", "GT", "LT", "LETTER", "JavaIDDigit", "'{'", "':'", "','", "'}'", "'parent'", "'$'", "'iter'"
   };
   public static final int LT = 47;
   public static final int STAR = 39;
   public static final int IntegerNumber = 15;
   public static final int LETTER = 48;
   public static final int AMP = 41;
   public static final int Exponent = 19;
   public static final int SUB = 38;
   public static final int EOF = -1;
   public static final int HexDigit = 18;
   public static final int LPAREN = 26;
   public static final int T__55 = 55;
   public static final int LBRACKET = 28;
   public static final int T__56 = 56;
   public static final int RANGELITERAL = 14;
   public static final int RPAREN = 27;
   public static final int SLASH = 40;
   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 IDENTIFIER = 4;
   public static final int NonIntegerNumber = 20;
   public static final int FloatSuffix = 21;
   public static final int CARET = 43;
   public static final int TILDE = 33;
   public static final int BANGEQ = 45;
   public static final int PLUS = 37;
   public static final int BARBAR = 36;
   public static final int SUPER = 25;
   public static final int RBRACKET = 29;
   public static final int EQ = 31;
   public static final int DOT = 30;
   public static final int AMPAMP = 35;
   public static final int T__50 = 50;
   public static final int EQEQ = 34;
   public static final int HexPrefix = 17;
   public static final int PERCENT = 44;
   public static final int NULL = 13;
   public static final int DOUBLELITERAL = 8;
   public static final int BANG = 32;
   public static final int INTLITERAL = 5;
   public static final int TRUE = 11;
   public static final int LONGLITERAL = 6;
   public static final int LongSuffix = 16;
   public static final int WS = 24;
   public static final int DoubleSuffix = 22;
   public static final int STRINGLITERAL = 9;
   public static final int CHARLITERAL = 10;
   public static final int JavaIDDigit = 49;
   public static final int GT = 46;
   public static final int FALSE = 12;
   public static final int FLOATLITERAL = 7;
   public static final int EscapeSequence = 23;
   public static final int BAR = 42;

   // delegates
   // delegators


   public ExpressionParser(TokenStream input) {
      this(input, new RecognizerSharedState());
   }

   public ExpressionParser(TokenStream input, RecognizerSharedState state) {
      super(input, state);

   }


   public String[] getTokenNames() {
      return ExpressionParser.tokenNames;
   }

   public String getGrammarFileName() {
      return "/Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g";
   }


   ArrayList<RecognitionException> errors;

   @Override
   public void reportError(RecognitionException e) {
      if (errors == null) errors = new ArrayList<RecognitionException>();
      errors.add(e);
   }

   public ArrayList<RecognitionException> getErrors() {
      return errors;
   }


   // $ANTLR start "compilationUnit"
   // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:39:1: compilationUnit returns [CambridgeExpression value] : e= expression ;
   public final CambridgeExpression compilationUnit() throws RecognitionException {
      CambridgeExpression value = null;

      CambridgeExpression e = null;


      try {
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:43:5: (e= expression )
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:43:9: e= expression
         {
            pushFollow(FOLLOW_expression_in_compilationUnit56);
            e = expression();

            state._fsp--;

            value = e;

         }

      } catch (RecognitionException re) {
         reportError(re);
         recover(input, re);
      } finally {
      }
      return value;
   }
   // $ANTLR end "compilationUnit"


   // $ANTLR start "mapExpression"
   // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:46:1: mapExpression returns [MapExpression value] : '{' i= IDENTIFIER ':' e= expression ( ',' id= IDENTIFIER ':' x= expression )* '}' ;
   public final MapExpression mapExpression() throws RecognitionException {
      MapExpression value = null;

      Token i = null;
      Token id = null;
      CambridgeExpression e = null;

      CambridgeExpression x = null;


      try {
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:47:3: ( '{' i= IDENTIFIER ':' e= expression ( ',' id= IDENTIFIER ':' x= expression )* '}' )
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:47:7: '{' i= IDENTIFIER ':' e= expression ( ',' id= IDENTIFIER ':' x= expression )* '}'
         {
            match(input, 50, FOLLOW_50_in_mapExpression83);
            i = (Token) match(input, IDENTIFIER, FOLLOW_IDENTIFIER_in_mapExpression87);
            match(input, 51, FOLLOW_51_in_mapExpression89);
            pushFollow(FOLLOW_expression_in_mapExpression93);
            e = expression();

            state._fsp--;

            value = new MapExpression();
            value.put(i.getText(), e);
            // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:47:101: ( ',' id= IDENTIFIER ':' x= expression )*
            loop1:
            do {
               int alt1 = 2;
               int LA1_0 = input.LA(1);

               if ((LA1_0 == 52)) {
                  alt1 = 1;
               }


               switch (alt1) {
                  case 1:
                     // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:47:102: ',' id= IDENTIFIER ':' x= expression
                  {
                     match(input, 52, FOLLOW_52_in_mapExpression98);
                     id = (Token) match(input, IDENTIFIER, FOLLOW_IDENTIFIER_in_mapExpression102);
                     match(input, 51, FOLLOW_51_in_mapExpression104);
                     pushFollow(FOLLOW_expression_in_mapExpression108);
                     x = expression();

                     state._fsp--;

                     value.put(id.getText(), x);

                  }
                  break;

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

            match(input, 53, FOLLOW_53_in_mapExpression115);

         }

      } catch (RecognitionException re) {
         reportError(re);
         recover(input, re);
      } finally {
      }
      return value;
   }
   // $ANTLR end "mapExpression"


   // $ANTLR start "listExpression"
   // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:50:1: listExpression returns [ListExpression value] : '[' e= expression ( ',' x= expression )* ']' ;
   public final ListExpression listExpression() throws RecognitionException {
      ListExpression value = null;

      CambridgeExpression e = null;

      CambridgeExpression x = null;


      try {
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:51:5: ( '[' e= expression ( ',' x= expression )* ']' )
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:51:9: '[' e= expression ( ',' x= expression )* ']'
         {
            match(input, LBRACKET, FOLLOW_LBRACKET_in_listExpression136);
            pushFollow(FOLLOW_expression_in_listExpression140);
            e = expression();

            state._fsp--;

            value = new ListExpression();
            value.add(e);
            // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:51:75: ( ',' x= expression )*
            loop2:
            do {
               int alt2 = 2;
               int LA2_0 = input.LA(1);

               if ((LA2_0 == 52)) {
                  alt2 = 1;
               }


               switch (alt2) {
                  case 1:
                     // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:51:76: ',' x= expression
                  {
                     match(input, 52, FOLLOW_52_in_listExpression145);
                     pushFollow(FOLLOW_expression_in_listExpression149);
                     x = expression();

                     state._fsp--;

                     value.add(x);

                  }
                  break;

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

            match(input, RBRACKET, FOLLOW_RBRACKET_in_listExpression155);

         }

      } catch (RecognitionException re) {
         reportError(re);
         recover(input, re);
      } finally {
      }
      return value;
   }
   // $ANTLR end "listExpression"


   // $ANTLR start "parExpression"
   // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:54:1: parExpression returns [CambridgeExpression value] : '(' e= expression ')' ;
   public final CambridgeExpression parExpression() throws RecognitionException {
      CambridgeExpression value = null;

      CambridgeExpression e = null;


      try {
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:55:5: ( '(' e= expression ')' )
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:55:9: '(' e= expression ')'
         {
            match(input, LPAREN, FOLLOW_LPAREN_in_parExpression178);
            pushFollow(FOLLOW_expression_in_parExpression182);
            e = expression();

            state._fsp--;

            match(input, RPAREN, FOLLOW_RPAREN_in_parExpression184);
            value = e;

         }

      } catch (RecognitionException re) {
         reportError(re);
         recover(input, re);
      } finally {
      }
      return value;
   }
   // $ANTLR end "parExpression"


   // $ANTLR start "function"
   // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:58:1: function returns [CambridgeExpression value] : IDENTIFIER '(' e= expression ( ',' f= expression )* ')' ;
   public final CambridgeExpression function() throws RecognitionException {
      CambridgeExpression value = null;

      Token IDENTIFIER1 = null;
      CambridgeExpression e = null;

      CambridgeExpression f = null;


      try {
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:59:5: ( IDENTIFIER '(' e= expression ( ',' f= expression )* ')' )
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:59:9: IDENTIFIER '(' e= expression ( ',' f= expression )* ')'
         {
            IDENTIFIER1 = (Token) match(input, IDENTIFIER, FOLLOW_IDENTIFIER_in_function209);
            match(input, LPAREN, FOLLOW_LPAREN_in_function211);
            pushFollow(FOLLOW_expression_in_function215);
            e = expression();

            state._fsp--;

            value = new FunctionExpression((IDENTIFIER1 != null ? IDENTIFIER1.getText() : null));
            ArrayList<CambridgeExpression> params = new ArrayList<CambridgeExpression>();
            params.add(e);

            // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:63:7: ( ',' f= expression )*
            loop3:
            do {
               int alt3 = 2;
               int LA3_0 = input.LA(1);

               if ((LA3_0 == 52)) {
                  alt3 = 1;
               }


               switch (alt3) {
                  case 1:
                     // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:63:8: ',' f= expression
                  {
                     match(input, 52, FOLLOW_52_in_function224);
                     pushFollow(FOLLOW_expression_in_function228);
                     f = expression();

                     state._fsp--;

                     params.add(f);

                  }
                  break;

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

            match(input, RPAREN, FOLLOW_RPAREN_in_function234);
            ((FunctionExpression) value).setParameters(params);

         }

      } catch (RecognitionException re) {
         reportError(re);
         recover(input, re);
      } finally {
      }
      return value;
   }
   // $ANTLR end "function"


   // $ANTLR start "expression"
   // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:66:1: expression returns [CambridgeExpression value] : l= conditionalAndExpression ( '||' r= conditionalAndExpression )* ;
   public final CambridgeExpression expression() throws RecognitionException {
      CambridgeExpression value = null;

      CambridgeExpression l = null;

      CambridgeExpression r = null;


      try {
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:67:5: (l= conditionalAndExpression ( '||' r= conditionalAndExpression )* )
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:67:9: l= conditionalAndExpression ( '||' r= conditionalAndExpression )*
         {
            pushFollow(FOLLOW_conditionalAndExpression_in_expression267);
            l = conditionalAndExpression();

            state._fsp--;

            value = l;
            // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:68:9: ( '||' r= conditionalAndExpression )*
            loop4:
            do {
               int alt4 = 2;
               int LA4_0 = input.LA(1);

               if ((LA4_0 == BARBAR)) {
                  alt4 = 1;
               }


               switch (alt4) {
                  case 1:
                     // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:68:10: '||' r= conditionalAndExpression
                  {
                     match(input, BARBAR, FOLLOW_BARBAR_in_expression280);
                     pushFollow(FOLLOW_conditionalAndExpression_in_expression286);
                     r = conditionalAndExpression();

                     state._fsp--;

                     value = new BinaryExpression(CambridgeExpression.Operator.ConditionalOr, value, r);

                  }
                  break;

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


         }

      } catch (RecognitionException re) {
         reportError(re);
         recover(input, re);
      } finally {
      }
      return value;
   }
   // $ANTLR end "expression"


   // $ANTLR start "conditionalAndExpression"
   // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:72:1: conditionalAndExpression returns [CambridgeExpression value] : l= inclusiveOrExpression ( '&&' r= inclusiveOrExpression )* ;
   public final CambridgeExpression conditionalAndExpression() throws RecognitionException {
      CambridgeExpression value = null;

      CambridgeExpression l = null;

      CambridgeExpression r = null;


      try {
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:73:5: (l= inclusiveOrExpression ( '&&' r= inclusiveOrExpression )* )
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:73:9: l= inclusiveOrExpression ( '&&' r= inclusiveOrExpression )*
         {
            pushFollow(FOLLOW_inclusiveOrExpression_in_conditionalAndExpression331);
            l = inclusiveOrExpression();

            state._fsp--;

            value = l;
            // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:74:9: ( '&&' r= inclusiveOrExpression )*
            loop5:
            do {
               int alt5 = 2;
               int LA5_0 = input.LA(1);

               if ((LA5_0 == AMPAMP)) {
                  alt5 = 1;
               }


               switch (alt5) {
                  case 1:
                     // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:74:10: '&&' r= inclusiveOrExpression
                  {
                     match(input, AMPAMP, FOLLOW_AMPAMP_in_conditionalAndExpression344);
                     pushFollow(FOLLOW_inclusiveOrExpression_in_conditionalAndExpression350);
                     r = inclusiveOrExpression();

                     state._fsp--;

                     value = new BinaryExpression(CambridgeExpression.Operator.ConditionalAnd, value, r);

                  }
                  break;

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


         }

      } catch (RecognitionException re) {
         reportError(re);
         recover(input, re);
      } finally {
      }
      return value;
   }
   // $ANTLR end "conditionalAndExpression"


   // $ANTLR start "inclusiveOrExpression"
   // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:78:1: inclusiveOrExpression returns [CambridgeExpression value] : l= exclusiveOrExpression ( '|' r= exclusiveOrExpression )* ;
   public final CambridgeExpression inclusiveOrExpression() throws RecognitionException {
      CambridgeExpression value = null;

      CambridgeExpression l = null;

      CambridgeExpression r = null;


      try {
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:79:5: (l= exclusiveOrExpression ( '|' r= exclusiveOrExpression )* )
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:79:9: l= exclusiveOrExpression ( '|' r= exclusiveOrExpression )*
         {
            pushFollow(FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression395);
            l = exclusiveOrExpression();

            state._fsp--;

            value = l;
            // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:80:9: ( '|' r= exclusiveOrExpression )*
            loop6:
            do {
               int alt6 = 2;
               int LA6_0 = input.LA(1);

               if ((LA6_0 == BAR)) {
                  alt6 = 1;
               }


               switch (alt6) {
                  case 1:
                     // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:80:10: '|' r= exclusiveOrExpression
                  {
                     match(input, BAR, FOLLOW_BAR_in_inclusiveOrExpression408);
                     pushFollow(FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression414);
                     r = exclusiveOrExpression();

                     state._fsp--;

                     value = new BinaryExpression(CambridgeExpression.Operator.Or, value, r);

                  }
                  break;

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


         }

      } catch (RecognitionException re) {
         reportError(re);
         recover(input, re);
      } finally {
      }
      return value;
   }
   // $ANTLR end "inclusiveOrExpression"


   // $ANTLR start "exclusiveOrExpression"
   // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:84:1: exclusiveOrExpression returns [CambridgeExpression value] : l= andExpression ( '^' r= andExpression )* ;
   public final CambridgeExpression exclusiveOrExpression() throws RecognitionException {
      CambridgeExpression value = null;

      CambridgeExpression l = null;

      CambridgeExpression r = null;


      try {
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:85:5: (l= andExpression ( '^' r= andExpression )* )
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:85:9: l= andExpression ( '^' r= andExpression )*
         {
            pushFollow(FOLLOW_andExpression_in_exclusiveOrExpression459);
            l = andExpression();

            state._fsp--;

            value = l;
            // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:86:9: ( '^' r= andExpression )*
            loop7:
            do {
               int alt7 = 2;
               int LA7_0 = input.LA(1);

               if ((LA7_0 == CARET)) {
                  alt7 = 1;
               }


               switch (alt7) {
                  case 1:
                     // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:86:10: '^' r= andExpression
                  {
                     match(input, CARET, FOLLOW_CARET_in_exclusiveOrExpression472);
                     pushFollow(FOLLOW_andExpression_in_exclusiveOrExpression478);
                     r = andExpression();

                     state._fsp--;

                     value = new BinaryExpression(CambridgeExpression.Operator.XOr, value, r);

                  }
                  break;

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


         }

      } catch (RecognitionException re) {
         reportError(re);
         recover(input, re);
      } finally {
      }
      return value;
   }
   // $ANTLR end "exclusiveOrExpression"


   // $ANTLR start "andExpression"
   // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:90:1: andExpression returns [CambridgeExpression value] : l= equalityExpression ( '&' r= equalityExpression )* ;
   public final CambridgeExpression andExpression() throws RecognitionException {
      CambridgeExpression value = null;

      CambridgeExpression l = null;

      CambridgeExpression r = null;


      try {
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:91:5: (l= equalityExpression ( '&' r= equalityExpression )* )
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:91:9: l= equalityExpression ( '&' r= equalityExpression )*
         {
            pushFollow(FOLLOW_equalityExpression_in_andExpression522);
            l = equalityExpression();

            state._fsp--;

            value = l;
            // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:92:9: ( '&' r= equalityExpression )*
            loop8:
            do {
               int alt8 = 2;
               int LA8_0 = input.LA(1);

               if ((LA8_0 == AMP)) {
                  alt8 = 1;
               }


               switch (alt8) {
                  case 1:
                     // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:92:10: '&' r= equalityExpression
                  {
                     match(input, AMP, FOLLOW_AMP_in_andExpression535);
                     pushFollow(FOLLOW_equalityExpression_in_andExpression541);
                     r = equalityExpression();

                     state._fsp--;

                     value = new BinaryExpression(CambridgeExpression.Operator.And, value, r);

                  }
                  break;

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


         }

      } catch (RecognitionException re) {
         reportError(re);
         recover(input, re);
      } finally {
      }
      return value;
   }
   // $ANTLR end "andExpression"


   // $ANTLR start "equalityExpression"
   // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:96:1: equalityExpression returns [CambridgeExpression value] : l= relationalExpression ( ( '==' | '!=' ) r= relationalExpression )* ;
   public final CambridgeExpression equalityExpression() throws RecognitionException {
      CambridgeExpression value = null;

      CambridgeExpression l = null;

      CambridgeExpression r = null;


      try {
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:97:5: (l= relationalExpression ( ( '==' | '!=' ) r= relationalExpression )* )
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:97:9: l= relationalExpression ( ( '==' | '!=' ) r= relationalExpression )*
         {
            pushFollow(FOLLOW_relationalExpression_in_equalityExpression586);
            l = relationalExpression();

            state._fsp--;

            value = l;
            CambridgeExpression.Operator op = null;
            // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:98:9: ( ( '==' | '!=' ) r= relationalExpression )*
            loop10:
            do {
               int alt10 = 2;
               int LA10_0 = input.LA(1);

               if ((LA10_0 == EQEQ || LA10_0 == BANGEQ)) {
                  alt10 = 1;
               }


               switch (alt10) {
                  case 1:
                     // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:99:13: ( '==' | '!=' ) r= relationalExpression
                  {
                     // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:99:13: ( '==' | '!=' )
                     int alt9 = 2;
                     int LA9_0 = input.LA(1);

                     if ((LA9_0 == EQEQ)) {
                        alt9 = 1;
                     } else if ((LA9_0 == BANGEQ)) {
                        alt9 = 2;
                     } else {
                        NoViableAltException nvae =
                           new NoViableAltException("", 9, 0, input);

                        throw nvae;
                     }
                     switch (alt9) {
                        case 1:
                           // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:99:17: '=='
                        {
                           match(input, EQEQ, FOLLOW_EQEQ_in_equalityExpression618);
                           op = CambridgeExpression.Operator.Equal;

                        }
                        break;
                        case 2:
                           // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:100:17: '!='
                        {
                           match(input, BANGEQ, FOLLOW_BANGEQ_in_equalityExpression638);
                           op = CambridgeExpression.Operator.NotEqual;

                        }
                        break;

                     }

                     pushFollow(FOLLOW_relationalExpression_in_equalityExpression672);
                     r = relationalExpression();

                     state._fsp--;

                     value = new BinaryExpression(op, value, r);

                  }
                  break;

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


         }

      } catch (RecognitionException re) {
         reportError(re);
         recover(input, re);
      } finally {
      }
      return value;
   }
   // $ANTLR end "equalityExpression"


   // $ANTLR start "relationalExpression"
   // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:106:1: relationalExpression returns [CambridgeExpression value] : l= shiftExpression (op= relationalOp r= shiftExpression )* ;
   public final CambridgeExpression relationalExpression() throws RecognitionException {
      CambridgeExpression value = null;

      CambridgeExpression l = null;

      CambridgeExpression.Operator op = null;

      CambridgeExpression r = null;


      try {
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:107:5: (l= shiftExpression (op= relationalOp r= shiftExpression )* )
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:107:9: l= shiftExpression (op= relationalOp r= shiftExpression )*
         {
            pushFollow(FOLLOW_shiftExpression_in_relationalExpression712);
            l = shiftExpression();

            state._fsp--;

            value = l;
            // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:108:9: (op= relationalOp r= shiftExpression )*
            loop11:
            do {
               int alt11 = 2;
               int LA11_0 = input.LA(1);

               if (((LA11_0 >= GT && LA11_0 <= LT))) {
                  alt11 = 1;
               }


               switch (alt11) {
                  case 1:
                     // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:109:9: op= relationalOp r= shiftExpression
                  {
                     pushFollow(FOLLOW_relationalOp_in_relationalExpression738);
                     op = relationalOp();

                     state._fsp--;

                     pushFollow(FOLLOW_shiftExpression_in_relationalExpression742);
                     r = shiftExpression();

                     state._fsp--;

                     value = new BinaryExpression(op, value, r);

                  }
                  break;

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


         }

      } catch (RecognitionException re) {
         reportError(re);
         recover(input, re);
      } finally {
      }
      return value;
   }
   // $ANTLR end "relationalExpression"


   // $ANTLR start "relationalOp"
   // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:113:1: relationalOp returns [CambridgeExpression.Operator value] : ( '<' '=' | '>' '=' | '<' | '>' );
   public final CambridgeExpression.Operator relationalOp() throws RecognitionException {
      CambridgeExpression.Operator value = null;

      try {
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:114:5: ( '<' '=' | '>' '=' | '<' | '>' )
         int alt12 = 4;
         int LA12_0 = input.LA(1);

         if ((LA12_0 == LT)) {
            int LA12_1 = input.LA(2);

            if ((LA12_1 == EQ)) {
               alt12 = 1;
            } else if (((LA12_1 >= IDENTIFIER && LA12_1 <= RANGELITERAL) || LA12_1 == LPAREN || LA12_1 == LBRACKET || (LA12_1 >= BANG && LA12_1 <= TILDE) || LA12_1 == 50 || (LA12_1 >= 54 && LA12_1 <= 56))) {
               alt12 = 3;
            } else {
               NoViableAltException nvae =
                  new NoViableAltException("", 12, 1, input);

               throw nvae;
            }
         } else if ((LA12_0 == GT)) {
            int LA12_2 = input.LA(2);

            if ((LA12_2 == EQ)) {
               alt12 = 2;
            } else if (((LA12_2 >= IDENTIFIER && LA12_2 <= RANGELITERAL) || LA12_2 == LPAREN || LA12_2 == LBRACKET || (LA12_2 >= BANG && LA12_2 <= TILDE) || LA12_2 == 50 || (LA12_2 >= 54 && LA12_2 <= 56))) {
               alt12 = 4;
            } else {
               NoViableAltException nvae =
                  new NoViableAltException("", 12, 2, input);

               throw nvae;
            }
         } else {
            NoViableAltException nvae =
               new NoViableAltException("", 12, 0, input);

            throw nvae;
         }
         switch (alt12) {
            case 1:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:114:10: '<' '='
            {
               match(input, LT, FOLLOW_LT_in_relationalOp784);
               match(input, EQ, FOLLOW_EQ_in_relationalOp786);
               value = CambridgeExpression.Operator.LTE;

            }
            break;
            case 2:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:115:10: '>' '='
            {
               match(input, GT, FOLLOW_GT_in_relationalOp799);
               match(input, EQ, FOLLOW_EQ_in_relationalOp801);
               value = CambridgeExpression.Operator.GTE;

            }
            break;
            case 3:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:116:9: '<'
            {
               match(input, LT, FOLLOW_LT_in_relationalOp813);
               value = CambridgeExpression.Operator.LT;

            }
            break;
            case 4:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:117:9: '>'
            {
               match(input, GT, FOLLOW_GT_in_relationalOp825);
               value = CambridgeExpression.Operator.GT;

            }
            break;

         }
      } catch (RecognitionException re) {
         reportError(re);
         recover(input, re);
      } finally {
      }
      return value;
   }
   // $ANTLR end "relationalOp"


   // $ANTLR start "shiftExpression"
   // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:120:1: shiftExpression returns [CambridgeExpression value] : l= additiveExpression (op= shiftOp r= additiveExpression )* ;
   public final CambridgeExpression shiftExpression() throws RecognitionException {
      CambridgeExpression value = null;

      CambridgeExpression l = null;

      CambridgeExpression.Operator op = null;

      CambridgeExpression r = null;


      try {
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:121:5: (l= additiveExpression (op= shiftOp r= additiveExpression )* )
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:121:9: l= additiveExpression (op= shiftOp r= additiveExpression )*
         {
            pushFollow(FOLLOW_additiveExpression_in_shiftExpression856);
            l = additiveExpression();

            state._fsp--;

            value = l;
            // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:122:9: (op= shiftOp r= additiveExpression )*
            loop13:
            do {
               int alt13 = 2;
               int LA13_0 = input.LA(1);

               if ((LA13_0 == LT)) {
                  int LA13_1 = input.LA(2);

                  if ((LA13_1 == LT)) {
                     alt13 = 1;
                  }


               } else if ((LA13_0 == GT)) {
                  int LA13_2 = input.LA(2);

                  if ((LA13_2 == GT)) {
                     alt13 = 1;
                  }


               }


               switch (alt13) {
                  case 1:
                     // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:123:9: op= shiftOp r= additiveExpression
                  {
                     pushFollow(FOLLOW_shiftOp_in_shiftExpression882);
                     op = shiftOp();

                     state._fsp--;

                     pushFollow(FOLLOW_additiveExpression_in_shiftExpression886);
                     r = additiveExpression();

                     state._fsp--;

                     value = new BinaryExpression(op, value, r);

                  }
                  break;

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


         }

      } catch (RecognitionException re) {
         reportError(re);
         recover(input, re);
      } finally {
      }
      return value;
   }
   // $ANTLR end "shiftExpression"


   // $ANTLR start "shiftOp"
   // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:127:1: shiftOp returns [CambridgeExpression.Operator value] : ( '<' '<' | '>' '>' '>' | '>' '>' );
   public final CambridgeExpression.Operator shiftOp() throws RecognitionException {
      CambridgeExpression.Operator value = null;

      try {
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:128:5: ( '<' '<' | '>' '>' '>' | '>' '>' )
         int alt14 = 3;
         int LA14_0 = input.LA(1);

         if ((LA14_0 == LT)) {
            alt14 = 1;
         } else if ((LA14_0 == GT)) {
            int LA14_2 = input.LA(2);

            if ((LA14_2 == GT)) {
               int LA14_3 = input.LA(3);

               if ((LA14_3 == GT)) {
                  alt14 = 2;
               } else if (((LA14_3 >= IDENTIFIER && LA14_3 <= RANGELITERAL) || LA14_3 == LPAREN || LA14_3 == LBRACKET || (LA14_3 >= BANG && LA14_3 <= TILDE) || LA14_3 == 50 || (LA14_3 >= 54 && LA14_3 <= 56))) {
                  alt14 = 3;
               } else {
                  NoViableAltException nvae =
                     new NoViableAltException("", 14, 3, input);

                  throw nvae;
               }
            } else {
               NoViableAltException nvae =
                  new NoViableAltException("", 14, 2, input);

               throw nvae;
            }
         } else {
            NoViableAltException nvae =
               new NoViableAltException("", 14, 0, input);

            throw nvae;
         }
         switch (alt14) {
            case 1:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:128:10: '<' '<'
            {
               match(input, LT, FOLLOW_LT_in_shiftOp925);
               match(input, LT, FOLLOW_LT_in_shiftOp927);
               value = CambridgeExpression.Operator.SHIFT_LEFT;

            }
            break;
            case 2:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:129:10: '>' '>' '>'
            {
               match(input, GT, FOLLOW_GT_in_shiftOp940);
               match(input, GT, FOLLOW_GT_in_shiftOp942);
               match(input, GT, FOLLOW_GT_in_shiftOp944);
               value = CambridgeExpression.Operator.U_SHIFT_RIGHT;

            }
            break;
            case 3:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:130:10: '>' '>'
            {
               match(input, GT, FOLLOW_GT_in_shiftOp957);
               match(input, GT, FOLLOW_GT_in_shiftOp959);
               value = CambridgeExpression.Operator.SHIFT_RIGHT;

            }
            break;

         }
      } catch (RecognitionException re) {
         reportError(re);
         recover(input, re);
      } finally {
      }
      return value;
   }
   // $ANTLR end "shiftOp"


   // $ANTLR start "additiveExpression"
   // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:133:1: additiveExpression returns [CambridgeExpression value] : l= multiplicativeExpression ( ( '+' | '-' ) r= multiplicativeExpression )* ;
   public final CambridgeExpression additiveExpression() throws RecognitionException {
      CambridgeExpression value = null;

      CambridgeExpression l = null;

      CambridgeExpression r = null;


      try {
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:134:5: (l= multiplicativeExpression ( ( '+' | '-' ) r= multiplicativeExpression )* )
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:134:9: l= multiplicativeExpression ( ( '+' | '-' ) r= multiplicativeExpression )*
         {
            pushFollow(FOLLOW_multiplicativeExpression_in_additiveExpression990);
            l = multiplicativeExpression();

            state._fsp--;

            value = l;
            CambridgeExpression.Operator op = null;
            // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:135:9: ( ( '+' | '-' ) r= multiplicativeExpression )*
            loop16:
            do {
               int alt16 = 2;
               int LA16_0 = input.LA(1);

               if (((LA16_0 >= PLUS && LA16_0 <= SUB))) {
                  alt16 = 1;
               }


               switch (alt16) {
                  case 1:
                     // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:136:13: ( '+' | '-' ) r= multiplicativeExpression
                  {
                     // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:136:13: ( '+' | '-' )
                     int alt15 = 2;
                     int LA15_0 = input.LA(1);

                     if ((LA15_0 == PLUS)) {
                        alt15 = 1;
                     } else if ((LA15_0 == SUB)) {
                        alt15 = 2;
                     } else {
                        NoViableAltException nvae =
                           new NoViableAltException("", 15, 0, input);

                        throw nvae;
                     }
                     switch (alt15) {
                        case 1:
                           // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:136:17: '+'
                        {
                           match(input, PLUS, FOLLOW_PLUS_in_additiveExpression1022);
                           op = CambridgeExpression.Operator.Plus;

                        }
                        break;
                        case 2:
                           // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:137:17: '-'
                        {
                           match(input, SUB, FOLLOW_SUB_in_additiveExpression1042);
                           op = CambridgeExpression.Operator.Minus;

                        }
                        break;

                     }

                     pushFollow(FOLLOW_multiplicativeExpression_in_additiveExpression1077);
                     r = multiplicativeExpression();

                     state._fsp--;

                     value = new BinaryExpression(op, value, r);

                  }
                  break;

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


         }

      } catch (RecognitionException re) {
         reportError(re);
         recover(input, re);
      } finally {
      }
      return value;
   }
   // $ANTLR end "additiveExpression"


   // $ANTLR start "multiplicativeExpression"
   // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:143:1: multiplicativeExpression returns [CambridgeExpression value] : l= unaryExpressionNotPlusMinus ( ( '*' | '/' | '%' ) r= unaryExpressionNotPlusMinus )* ;
   public final CambridgeExpression multiplicativeExpression() throws RecognitionException {
      CambridgeExpression value = null;

      CambridgeExpression l = null;

      CambridgeExpression r = null;


      try {
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:144:5: (l= unaryExpressionNotPlusMinus ( ( '*' | '/' | '%' ) r= unaryExpressionNotPlusMinus )* )
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:145:9: l= unaryExpressionNotPlusMinus ( ( '*' | '/' | '%' ) r= unaryExpressionNotPlusMinus )*
         {
            pushFollow(FOLLOW_unaryExpressionNotPlusMinus_in_multiplicativeExpression1129);
            l = unaryExpressionNotPlusMinus();

            state._fsp--;

            value = l;
            CambridgeExpression.Operator op = null;
            // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:146:9: ( ( '*' | '/' | '%' ) r= unaryExpressionNotPlusMinus )*
            loop18:
            do {
               int alt18 = 2;
               switch (input.LA(1)) {
                  case STAR: {
                     alt18 = 1;
                  }
                  break;
                  case SLASH: {
                     alt18 = 1;
                  }
                  break;
                  case PERCENT: {
                     alt18 = 1;
                  }
                  break;

               }

               switch (alt18) {
                  case 1:
                     // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:147:13: ( '*' | '/' | '%' ) r= unaryExpressionNotPlusMinus
                  {
                     // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:147:13: ( '*' | '/' | '%' )
                     int alt17 = 3;
                     switch (input.LA(1)) {
                        case STAR: {
                           alt17 = 1;
                        }
                        break;
                        case SLASH: {
                           alt17 = 2;
                        }
                        break;
                        case PERCENT: {
                           alt17 = 3;
                        }
                        break;
                        default:
                           NoViableAltException nvae =
                              new NoViableAltException("", 17, 0, input);

                           throw nvae;
                     }

                     switch (alt17) {
                        case 1:
                           // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:147:17: '*'
                        {
                           match(input, STAR, FOLLOW_STAR_in_multiplicativeExpression1162);
                           op = CambridgeExpression.Operator.Times;

                        }
                        break;
                        case 2:
                           // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:148:17: '/'
                        {
                           match(input, SLASH, FOLLOW_SLASH_in_multiplicativeExpression1183);
                           op = CambridgeExpression.Operator.Divide;

                        }
                        break;
                        case 3:
                           // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:149:17: '%'
                        {
                           match(input, PERCENT, FOLLOW_PERCENT_in_multiplicativeExpression1204);
                           op = CambridgeExpression.Operator.Mod;

                        }
                        break;

                     }

                     pushFollow(FOLLOW_unaryExpressionNotPlusMinus_in_multiplicativeExpression1239);
                     r = unaryExpressionNotPlusMinus();

                     state._fsp--;

                     value = new BinaryExpression(op, value, r);

                  }
                  break;

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


         }

      } catch (RecognitionException re) {
         reportError(re);
         recover(input, re);
      } finally {
      }
      return value;
   }
   // $ANTLR end "multiplicativeExpression"


   // $ANTLR start "unaryExpressionNotPlusMinus"
   // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:155:1: unaryExpressionNotPlusMinus returns [CambridgeExpression value] : ( '~' l= multiplicativeExpression | '!' l= multiplicativeExpression | l= primary );
   public final CambridgeExpression unaryExpressionNotPlusMinus() throws RecognitionException {
      CambridgeExpression value = null;

      CambridgeExpression l = null;


      try {
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:156:5: ( '~' l= multiplicativeExpression | '!' l= multiplicativeExpression | l= primary )
         int alt19 = 3;
         switch (input.LA(1)) {
            case TILDE: {
               alt19 = 1;
            }
            break;
            case BANG: {
               alt19 = 2;
            }
            break;
            case IDENTIFIER:
            case INTLITERAL:
            case LONGLITERAL:
            case FLOATLITERAL:
            case DOUBLELITERAL:
            case STRINGLITERAL:
            case CHARLITERAL:
            case TRUE:
            case FALSE:
            case NULL:
            case RANGELITERAL:
            case LPAREN:
            case LBRACKET:
            case 50:
            case 54:
            case 55:
            case 56: {
               alt19 = 3;
            }
            break;
            default:
               NoViableAltException nvae =
                  new NoViableAltException("", 19, 0, input);

               throw nvae;
         }

         switch (alt19) {
            case 1:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:156:9: '~' l= multiplicativeExpression
            {
               match(input, TILDE, FOLLOW_TILDE_in_unaryExpressionNotPlusMinus1276);
               pushFollow(FOLLOW_multiplicativeExpression_in_unaryExpressionNotPlusMinus1280);
               l = multiplicativeExpression();

               state._fsp--;

               value = new UnaryExpression(CambridgeExpression.Operator.Tilde, l);

            }
            break;
            case 2:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:157:9: '!' l= multiplicativeExpression
            {
               match(input, BANG, FOLLOW_BANG_in_unaryExpressionNotPlusMinus1292);
               pushFollow(FOLLOW_multiplicativeExpression_in_unaryExpressionNotPlusMinus1296);
               l = multiplicativeExpression();

               state._fsp--;

               value = new UnaryExpression(CambridgeExpression.Operator.Not, l);

            }
            break;
            case 3:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:158:9: l= primary
            {
               pushFollow(FOLLOW_primary_in_unaryExpressionNotPlusMinus1310);
               l = primary();

               state._fsp--;

               value = l;

            }
            break;

         }
      } catch (RecognitionException re) {
         reportError(re);
         recover(input, re);
      } finally {
      }
      return value;
   }
   // $ANTLR end "unaryExpressionNotPlusMinus"


   // $ANTLR start "primary"
   // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:161:1: primary returns [CambridgeExpression value] : (e= parExpression | e= listExpression | e= mapExpression | e= function | '#super' (p= identifierSuffix )* | '$' (p= identifierSuffix )* | '#iter' (p= identifierSuffix )* | IDENTIFIER (p= identifierSuffix )* | l= literal );
   public final CambridgeExpression primary() throws RecognitionException {
      CambridgeExpression value = null;

      Token IDENTIFIER2 = null;
      CambridgeExpression e = null;

      VarProperty p = null;

      CambridgeExpression l = null;


      try {
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:162:5: (e= parExpression | e= listExpression | e= mapExpression | e= function | '#super' (p= identifierSuffix )* | '$' (p= identifierSuffix )* | '#iter' (p= identifierSuffix )* | IDENTIFIER (p= identifierSuffix )* | l= literal )
         int alt24 = 9;
         alt24 = dfa24.predict(input);
         switch (alt24) {
            case 1:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:162:9: e= parExpression
            {
               pushFollow(FOLLOW_parExpression_in_primary1338);
               e = parExpression();

               state._fsp--;

               value = e;

            }
            break;
            case 2:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:163:9: e= listExpression
            {
               pushFollow(FOLLOW_listExpression_in_primary1352);
               e = listExpression();

               state._fsp--;

               value = e;

            }
            break;
            case 3:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:164:7: e= mapExpression
            {
               pushFollow(FOLLOW_mapExpression_in_primary1364);
               e = mapExpression();

               state._fsp--;

               value = e;

            }
            break;
            case 4:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:165:9: e= function
            {
               pushFollow(FOLLOW_function_in_primary1378);
               e = function();

               state._fsp--;

               value = e;

            }
            break;
            case 5:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:166:9: '#super' (p= identifierSuffix )*
            {
               match(input, 54, FOLLOW_54_in_primary1390);
               value = new VarExpression("parent");
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:166:58: (p= identifierSuffix )*
               loop20:
               do {
                  int alt20 = 2;
                  int LA20_0 = input.LA(1);

                  if ((LA20_0 == LBRACKET || LA20_0 == DOT)) {
                     alt20 = 1;
                  }


                  switch (alt20) {
                     case 1:
                        // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:166:59: p= identifierSuffix
                     {
                        pushFollow(FOLLOW_identifierSuffix_in_primary1397);
                        p = identifierSuffix();

                        state._fsp--;

                        ((VarExpression) value).addProperty(p);

                     }
                     break;

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


            }
            break;
            case 6:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:167:9: '$' (p= identifierSuffix )*
            {
               match(input, 55, FOLLOW_55_in_primary1411);
               value = new VarExpression("$");
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:167:56: (p= identifierSuffix )*
               loop21:
               do {
                  int alt21 = 2;
                  int LA21_0 = input.LA(1);

                  if ((LA21_0 == LBRACKET || LA21_0 == DOT)) {
                     alt21 = 1;
                  }


                  switch (alt21) {
                     case 1:
                        // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:167:57: p= identifierSuffix
                     {
                        pushFollow(FOLLOW_identifierSuffix_in_primary1418);
                        p = identifierSuffix();

                        state._fsp--;

                        ((VarExpression) value).addProperty(p);

                     }
                     break;

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


            }
            break;
            case 7:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:168:9: '#iter' (p= identifierSuffix )*
            {
               match(input, 56, FOLLOW_56_in_primary1432);
               value = new VarExpression("#ter");
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:168:56: (p= identifierSuffix )*
               loop22:
               do {
                  int alt22 = 2;
                  int LA22_0 = input.LA(1);

                  if ((LA22_0 == LBRACKET || LA22_0 == DOT)) {
                     alt22 = 1;
                  }


                  switch (alt22) {
                     case 1:
                        // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:168:57: p= identifierSuffix
                     {
                        pushFollow(FOLLOW_identifierSuffix_in_primary1439);
                        p = identifierSuffix();

                        state._fsp--;

                        ((VarExpression) value).addProperty(p);

                     }
                     break;

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


            }
            break;
            case 8:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:169:9: IDENTIFIER (p= identifierSuffix )*
            {
               IDENTIFIER2 = (Token) match(input, IDENTIFIER, FOLLOW_IDENTIFIER_in_primary1453);
               value = new VarExpression((IDENTIFIER2 != null ? IDENTIFIER2.getText() : null));
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:169:68: (p= identifierSuffix )*
               loop23:
               do {
                  int alt23 = 2;
                  int LA23_0 = input.LA(1);

                  if ((LA23_0 == LBRACKET || LA23_0 == DOT)) {
                     alt23 = 1;
                  }


                  switch (alt23) {
                     case 1:
                        // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:169:69: p= identifierSuffix
                     {
                        pushFollow(FOLLOW_identifierSuffix_in_primary1460);
                        p = identifierSuffix();

                        state._fsp--;

                        ((VarExpression) value).addProperty(p);

                     }
                     break;

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


            }
            break;
            case 9:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:170:9: l= literal
            {
               pushFollow(FOLLOW_literal_in_primary1476);
               l = literal();

               state._fsp--;

               value = l;

            }
            break;

         }
      } catch (RecognitionException re) {
         reportError(re);
         recover(input, re);
      } finally {
      }
      return value;
   }
   // $ANTLR end "primary"


   // $ANTLR start "identifierSuffix"
   // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:173:1: identifierSuffix returns [VarProperty value] : ( '.' IDENTIFIER | '[' e= expression ']' );
   public final VarProperty identifierSuffix() throws RecognitionException {
      VarProperty value = null;

      Token IDENTIFIER3 = null;
      CambridgeExpression e = null;


      try {
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:174:6: ( '.' IDENTIFIER | '[' e= expression ']' )
         int alt25 = 2;
         int LA25_0 = input.LA(1);

         if ((LA25_0 == DOT)) {
            alt25 = 1;
         } else if ((LA25_0 == LBRACKET)) {
            alt25 = 2;
         } else {
            NoViableAltException nvae =
               new NoViableAltException("", 25, 0, input);

            throw nvae;
         }
         switch (alt25) {
            case 1:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:174:8: '.' IDENTIFIER
            {
               match(input, DOT, FOLLOW_DOT_in_identifierSuffix1504);
               IDENTIFIER3 = (Token) match(input, IDENTIFIER, FOLLOW_IDENTIFIER_in_identifierSuffix1506);
               value = new IdentifierVarProperty((IDENTIFIER3 != null ? IDENTIFIER3.getText() : null));

            }
            break;
            case 2:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:175:8: '[' e= expression ']'
            {
               match(input, LBRACKET, FOLLOW_LBRACKET_in_identifierSuffix1517);
               pushFollow(FOLLOW_expression_in_identifierSuffix1521);
               e = expression();

               state._fsp--;

               match(input, RBRACKET, FOLLOW_RBRACKET_in_identifierSuffix1523);
               value = new MapVarProperty(e);

            }
            break;

         }
      } catch (RecognitionException re) {
         reportError(re);
         recover(input, re);
      } finally {
      }
      return value;
   }
   // $ANTLR end "identifierSuffix"


   // $ANTLR start "literal"
   // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:188:1: literal returns [CambridgeExpression value] : ( INTLITERAL | LONGLITERAL | FLOATLITERAL | DOUBLELITERAL | STRINGLITERAL | CHARLITERAL | TRUE | FALSE | NULL | RANGELITERAL );
   public final CambridgeExpression literal() throws RecognitionException {
      CambridgeExpression value = null;

      Token INTLITERAL4 = null;
      Token LONGLITERAL5 = null;
      Token FLOATLITERAL6 = null;
      Token DOUBLELITERAL7 = null;
      Token STRINGLITERAL8 = null;
      Token CHARLITERAL9 = null;
      Token RANGELITERAL10 = null;

      try {
         // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:189:5: ( INTLITERAL | LONGLITERAL | FLOATLITERAL | DOUBLELITERAL | STRINGLITERAL | CHARLITERAL | TRUE | FALSE | NULL | RANGELITERAL )
         int alt26 = 10;
         switch (input.LA(1)) {
            case INTLITERAL: {
               alt26 = 1;
            }
            break;
            case LONGLITERAL: {
               alt26 = 2;
            }
            break;
            case FLOATLITERAL: {
               alt26 = 3;
            }
            break;
            case DOUBLELITERAL: {
               alt26 = 4;
            }
            break;
            case STRINGLITERAL: {
               alt26 = 5;
            }
            break;
            case CHARLITERAL: {
               alt26 = 6;
            }
            break;
            case TRUE: {
               alt26 = 7;
            }
            break;
            case FALSE: {
               alt26 = 8;
            }
            break;
            case NULL: {
               alt26 = 9;
            }
            break;
            case RANGELITERAL: {
               alt26 = 10;
            }
            break;
            default:
               NoViableAltException nvae =
                  new NoViableAltException("", 26, 0, input);

               throw nvae;
         }

         switch (alt26) {
            case 1:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:189:9: INTLITERAL
            {
               INTLITERAL4 = (Token) match(input, INTLITERAL, FOLLOW_INTLITERAL_in_literal1556);
               value = new IntLiteral(Integer.parseInt((INTLITERAL4 != null ? INTLITERAL4.getText() : null)));

            }
            break;
            case 2:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:190:9: LONGLITERAL
            {
               LONGLITERAL5 = (Token) match(input, LONGLITERAL, FOLLOW_LONGLITERAL_in_literal1568);
               value = new LongLiteral(Long.parseLong((LONGLITERAL5 != null ? LONGLITERAL5.getText() : null)));

            }
            break;
            case 3:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:191:9: FLOATLITERAL
            {
               FLOATLITERAL6 = (Token) match(input, FLOATLITERAL, FOLLOW_FLOATLITERAL_in_literal1580);
               value = new FloatLiteral(Float.parseFloat((FLOATLITERAL6 != null ? FLOATLITERAL6.getText() : null)));

            }
            break;
            case 4:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:192:9: DOUBLELITERAL
            {
               DOUBLELITERAL7 = (Token) match(input, DOUBLELITERAL, FOLLOW_DOUBLELITERAL_in_literal1592);
               value = new DoubleLiteral(Double.parseDouble((DOUBLELITERAL7 != null ? DOUBLELITERAL7.getText() : null)));

            }
            break;
            case 5:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:193:9: STRINGLITERAL
            {
               STRINGLITERAL8 = (Token) match(input, STRINGLITERAL, FOLLOW_STRINGLITERAL_in_literal1604);
               value = StringLiteral.fromText((STRINGLITERAL8 != null ? STRINGLITERAL8.getText() : null));

            }
            break;
            case 6:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:194:9: CHARLITERAL
            {
               CHARLITERAL9 = (Token) match(input, CHARLITERAL, FOLLOW_CHARLITERAL_in_literal1616);
               value = StringLiteral.fromText((CHARLITERAL9 != null ? CHARLITERAL9.getText() : null));

            }
            break;
            case 7:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:195:9: TRUE
            {
               match(input, TRUE, FOLLOW_TRUE_in_literal1628);
               value = new BooleanLiteral(true);

            }
            break;
            case 8:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:196:9: FALSE
            {
               match(input, FALSE, FOLLOW_FALSE_in_literal1640);
               value = new BooleanLiteral(false);

            }
            break;
            case 9:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:197:9: NULL
            {
               match(input, NULL, FOLLOW_NULL_in_literal1652);
               value = NullLiteral.instance;

            }
            break;
            case 10:
               // /Users/erdincyilmazel/projects/cambridge/core/src/main/java/cambridge/parser/expressions/CambridgeExpression.g:198:9: RANGELITERAL
            {
               RANGELITERAL10 = (Token) match(input, RANGELITERAL, FOLLOW_RANGELITERAL_in_literal1664);
               value = Range.fromString((RANGELITERAL10 != null ? RANGELITERAL10.getText() : null));

            }
            break;

         }
      } catch (RecognitionException re) {
         reportError(re);
         recover(input, re);
      } finally {
      }
      return value;
   }
   // $ANTLR end "literal"

   // Delegated rules


   protected DFA24 dfa24 = new DFA24(this);
   static final String DFA24_eotS =
      "\13\uffff";
   static final String DFA24_eofS =
      "\4\uffff\1\12\6\uffff";
   static final String DFA24_minS =
      "\1\4\3\uffff\1\32\6\uffff";
   static final String DFA24_maxS =
      "\1\70\3\uffff\1\65\6\uffff";
   static final String DFA24_acceptS =
      "\1\uffff\1\1\1\2\1\3\1\uffff\1\5\1\6\1\7\1\11\1\4\1\10";
   static final String DFA24_specialS =
      "\13\uffff}>";
   static final String[] DFA24_transitionS = {
      "\1\4\12\10\13\uffff\1\1\1\uffff\1\2\25\uffff\1\3\3\uffff\1\5" +
         "\1\6\1\7",
      "",
      "",
      "",
      "\1\11\4\12\3\uffff\16\12\4\uffff\2\12",
      "",
      "",
      "",
      "",
      "",
      ""
   };

   static final short[] DFA24_eot = DFA.unpackEncodedString(DFA24_eotS);
   static final short[] DFA24_eof = DFA.unpackEncodedString(DFA24_eofS);
   static final char[] DFA24_min = DFA.unpackEncodedStringToUnsignedChars(DFA24_minS);
   static final char[] DFA24_max = DFA.unpackEncodedStringToUnsignedChars(DFA24_maxS);
   static final short[] DFA24_accept = DFA.unpackEncodedString(DFA24_acceptS);
   static final short[] DFA24_special = DFA.unpackEncodedString(DFA24_specialS);
   static final short[][] DFA24_transition;

   static {
      int numStates = DFA24_transitionS.length;
      DFA24_transition = new short[numStates][];
      for (int i = 0; i < numStates; i++) {
         DFA24_transition[i] = DFA.unpackEncodedString(DFA24_transitionS[i]);
      }
   }

   class DFA24 extends DFA {

      public DFA24(BaseRecognizer recognizer) {
         this.recognizer = recognizer;
         this.decisionNumber = 24;
         this.eot = DFA24_eot;
         this.eof = DFA24_eof;
         this.min = DFA24_min;
         this.max = DFA24_max;
         this.accept = DFA24_accept;
         this.special = DFA24_special;
         this.transition = DFA24_transition;
      }

      public String getDescription() {
         return "161:1: primary returns [CambridgeExpression value] : (e= parExpression | e= listExpression | e= mapExpression | e= function | 'parent' (p= identifierSuffix )* | '$' (p= identifierSuffix )* | 'iter' (p= identifierSuffix )* | IDENTIFIER (p= identifierSuffix )* | l= literal );";
      }
   }


   public static final BitSet FOLLOW_expression_in_compilationUnit56 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_50_in_mapExpression83 = new BitSet(new long[]{0x0000000000000010L});
   public static final BitSet FOLLOW_IDENTIFIER_in_mapExpression87 = new BitSet(new long[]{0x0008000000000000L});
   public static final BitSet FOLLOW_51_in_mapExpression89 = new BitSet(new long[]{0x01C4000314007FF0L});
   public static final BitSet FOLLOW_expression_in_mapExpression93 = new BitSet(new long[]{0x0030000000000000L});
   public static final BitSet FOLLOW_52_in_mapExpression98 = new BitSet(new long[]{0x0000000000000010L});
   public static final BitSet FOLLOW_IDENTIFIER_in_mapExpression102 = new BitSet(new long[]{0x0008000000000000L});
   public static final BitSet FOLLOW_51_in_mapExpression104 = new BitSet(new long[]{0x01C4000314007FF0L});
   public static final BitSet FOLLOW_expression_in_mapExpression108 = new BitSet(new long[]{0x0030000000000000L});
   public static final BitSet FOLLOW_53_in_mapExpression115 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_LBRACKET_in_listExpression136 = new BitSet(new long[]{0x01C4000314007FF0L});
   public static final BitSet FOLLOW_expression_in_listExpression140 = new BitSet(new long[]{0x0010000020000000L});
   public static final BitSet FOLLOW_52_in_listExpression145 = new BitSet(new long[]{0x01C4000314007FF0L});
   public static final BitSet FOLLOW_expression_in_listExpression149 = new BitSet(new long[]{0x0010000020000000L});
   public static final BitSet FOLLOW_RBRACKET_in_listExpression155 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_LPAREN_in_parExpression178 = new BitSet(new long[]{0x01C4000314007FF0L});
   public static final BitSet FOLLOW_expression_in_parExpression182 = new BitSet(new long[]{0x0000000008000000L});
   public static final BitSet FOLLOW_RPAREN_in_parExpression184 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_IDENTIFIER_in_function209 = new BitSet(new long[]{0x0000000004000000L});
   public static final BitSet FOLLOW_LPAREN_in_function211 = new BitSet(new long[]{0x01C4000314007FF0L});
   public static final BitSet FOLLOW_expression_in_function215 = new BitSet(new long[]{0x0010000008000000L});
   public static final BitSet FOLLOW_52_in_function224 = new BitSet(new long[]{0x01C4000314007FF0L});
   public static final BitSet FOLLOW_expression_in_function228 = new BitSet(new long[]{0x0010000008000000L});
   public static final BitSet FOLLOW_RPAREN_in_function234 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_conditionalAndExpression_in_expression267 = new BitSet(new long[]{0x0000001000000002L});
   public static final BitSet FOLLOW_BARBAR_in_expression280 = new BitSet(new long[]{0x01C4000314007FF0L});
   public static final BitSet FOLLOW_conditionalAndExpression_in_expression286 = new BitSet(new long[]{0x0000001000000002L});
   public static final BitSet FOLLOW_inclusiveOrExpression_in_conditionalAndExpression331 = new BitSet(new long[]{0x0000000800000002L});
   public static final BitSet FOLLOW_AMPAMP_in_conditionalAndExpression344 = new BitSet(new long[]{0x01C4000314007FF0L});
   public static final BitSet FOLLOW_inclusiveOrExpression_in_conditionalAndExpression350 = new BitSet(new long[]{0x0000000800000002L});
   public static final BitSet FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression395 = new BitSet(new long[]{0x0000040000000002L});
   public static final BitSet FOLLOW_BAR_in_inclusiveOrExpression408 = new BitSet(new long[]{0x01C4000314007FF0L});
   public static final BitSet FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression414 = new BitSet(new long[]{0x0000040000000002L});
   public static final BitSet FOLLOW_andExpression_in_exclusiveOrExpression459 = new BitSet(new long[]{0x0000080000000002L});
   public static final BitSet FOLLOW_CARET_in_exclusiveOrExpression472 = new BitSet(new long[]{0x01C4000314007FF0L});
   public static final BitSet FOLLOW_andExpression_in_exclusiveOrExpression478 = new BitSet(new long[]{0x0000080000000002L});
   public static final BitSet FOLLOW_equalityExpression_in_andExpression522 = new BitSet(new long[]{0x0000020000000002L});
   public static final BitSet FOLLOW_AMP_in_andExpression535 = new BitSet(new long[]{0x01C4000314007FF0L});
   public static final BitSet FOLLOW_equalityExpression_in_andExpression541 = new BitSet(new long[]{0x0000020000000002L});
   public static final BitSet FOLLOW_relationalExpression_in_equalityExpression586 = new BitSet(new long[]{0x0000200400000002L});
   public static final BitSet FOLLOW_EQEQ_in_equalityExpression618 = new BitSet(new long[]{0x01C4000314007FF0L});
   public static final BitSet FOLLOW_BANGEQ_in_equalityExpression638 = new BitSet(new long[]{0x01C4000314007FF0L});
   public static final BitSet FOLLOW_relationalExpression_in_equalityExpression672 = new BitSet(new long[]{0x0000200400000002L});
   public static final BitSet FOLLOW_shiftExpression_in_relationalExpression712 = new BitSet(new long[]{0x0000C00000000002L});
   public static final BitSet FOLLOW_relationalOp_in_relationalExpression738 = new BitSet(new long[]{0x01C4000314007FF0L});
   public static final BitSet FOLLOW_shiftExpression_in_relationalExpression742 = new BitSet(new long[]{0x0000C00000000002L});
   public static final BitSet FOLLOW_LT_in_relationalOp784 = new BitSet(new long[]{0x0000000080000000L});
   public static final BitSet FOLLOW_EQ_in_relationalOp786 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_GT_in_relationalOp799 = new BitSet(new long[]{0x0000000080000000L});
   public static final BitSet FOLLOW_EQ_in_relationalOp801 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_LT_in_relationalOp813 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_GT_in_relationalOp825 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_additiveExpression_in_shiftExpression856 = new BitSet(new long[]{0x0000C00000000002L});
   public static final BitSet FOLLOW_shiftOp_in_shiftExpression882 = new BitSet(new long[]{0x01C4000314007FF0L});
   public static final BitSet FOLLOW_additiveExpression_in_shiftExpression886 = new BitSet(new long[]{0x0000C00000000002L});
   public static final BitSet FOLLOW_LT_in_shiftOp925 = new BitSet(new long[]{0x0000800000000000L});
   public static final BitSet FOLLOW_LT_in_shiftOp927 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_GT_in_shiftOp940 = new BitSet(new long[]{0x0000400000000000L});
   public static final BitSet FOLLOW_GT_in_shiftOp942 = new BitSet(new long[]{0x0000400000000000L});
   public static final BitSet FOLLOW_GT_in_shiftOp944 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_GT_in_shiftOp957 = new BitSet(new long[]{0x0000400000000000L});
   public static final BitSet FOLLOW_GT_in_shiftOp959 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_multiplicativeExpression_in_additiveExpression990 = new BitSet(new long[]{0x0000006000000002L});
   public static final BitSet FOLLOW_PLUS_in_additiveExpression1022 = new BitSet(new long[]{0x01C4000314007FF0L});
   public static final BitSet FOLLOW_SUB_in_additiveExpression1042 = new BitSet(new long[]{0x01C4000314007FF0L});
   public static final BitSet FOLLOW_multiplicativeExpression_in_additiveExpression1077 = new BitSet(new long[]{0x0000006000000002L});
   public static final BitSet FOLLOW_unaryExpressionNotPlusMinus_in_multiplicativeExpression1129 = new BitSet(new long[]{0x0000118000000002L});
   public static final BitSet FOLLOW_STAR_in_multiplicativeExpression1162 = new BitSet(new long[]{0x01C4000314007FF0L});
   public static final BitSet FOLLOW_SLASH_in_multiplicativeExpression1183 = new BitSet(new long[]{0x01C4000314007FF0L});
   public static final BitSet FOLLOW_PERCENT_in_multiplicativeExpression1204 = new BitSet(new long[]{0x01C4000314007FF0L});
   public static final BitSet FOLLOW_unaryExpressionNotPlusMinus_in_multiplicativeExpression1239 = new BitSet(new long[]{0x0000118000000002L});
   public static final BitSet FOLLOW_TILDE_in_unaryExpressionNotPlusMinus1276 = new BitSet(new long[]{0x01C4000314007FF0L});
   public static final BitSet FOLLOW_multiplicativeExpression_in_unaryExpressionNotPlusMinus1280 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_BANG_in_unaryExpressionNotPlusMinus1292 = new BitSet(new long[]{0x01C4000314007FF0L});
   public static final BitSet FOLLOW_multiplicativeExpression_in_unaryExpressionNotPlusMinus1296 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_primary_in_unaryExpressionNotPlusMinus1310 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_parExpression_in_primary1338 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_listExpression_in_primary1352 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_mapExpression_in_primary1364 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_function_in_primary1378 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_54_in_primary1390 = new BitSet(new long[]{0x0000000050000002L});
   public static final BitSet FOLLOW_identifierSuffix_in_primary1397 = new BitSet(new long[]{0x0000000050000002L});
   public static final BitSet FOLLOW_55_in_primary1411 = new BitSet(new long[]{0x0000000050000002L});
   public static final BitSet FOLLOW_identifierSuffix_in_primary1418 = new BitSet(new long[]{0x0000000050000002L});
   public static final BitSet FOLLOW_56_in_primary1432 = new BitSet(new long[]{0x0000000050000002L});
   public static final BitSet FOLLOW_identifierSuffix_in_primary1439 = new BitSet(new long[]{0x0000000050000002L});
   public static final BitSet FOLLOW_IDENTIFIER_in_primary1453 = new BitSet(new long[]{0x0000000050000002L});
   public static final BitSet FOLLOW_identifierSuffix_in_primary1460 = new BitSet(new long[]{0x0000000050000002L});
   public static final BitSet FOLLOW_literal_in_primary1476 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_DOT_in_identifierSuffix1504 = new BitSet(new long[]{0x0000000000000010L});
   public static final BitSet FOLLOW_IDENTIFIER_in_identifierSuffix1506 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_LBRACKET_in_identifierSuffix1517 = new BitSet(new long[]{0x01C4000314007FF0L});
   public static final BitSet FOLLOW_expression_in_identifierSuffix1521 = new BitSet(new long[]{0x0000000020000000L});
   public static final BitSet FOLLOW_RBRACKET_in_identifierSuffix1523 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_INTLITERAL_in_literal1556 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_LONGLITERAL_in_literal1568 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_FLOATLITERAL_in_literal1580 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_DOUBLELITERAL_in_literal1592 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_STRINGLITERAL_in_literal1604 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_CHARLITERAL_in_literal1616 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_TRUE_in_literal1628 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_FALSE_in_literal1640 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_NULL_in_literal1652 = new BitSet(new long[]{0x0000000000000002L});
   public static final BitSet FOLLOW_RANGELITERAL_in_literal1664 = new BitSet(new long[]{0x0000000000000002L});

}
TOP

Related Classes of cambridge.parser.expressions.ExpressionParser$DFA24

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.