All Downloads are FREE. Search and download functionalities are using the official Maven repository.

eu.stratosphere.meteor.MeteorParser Maven / Gradle / Ivy

The newest version!
// $ANTLR 3.5 /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g 2014-01-13 14:02:53
 
package eu.stratosphere.meteor; 

import eu.stratosphere.sopremo.operator.*;
import eu.stratosphere.sopremo.io.*;
import eu.stratosphere.sopremo.query.*;
import eu.stratosphere.sopremo.pact.*;
import eu.stratosphere.sopremo.expressions.*;
import eu.stratosphere.sopremo.function.*;
import eu.stratosphere.sopremo.type.*;
import java.math.*;
import java.util.IdentityHashMap;


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

import org.antlr.runtime.tree.*;


@SuppressWarnings("all")
public class MeteorParser extends MeteorParserBase {
	public static final String[] tokenNames = new String[] {
		"", "", "", "", "AND", "APOSTROPHE", "COMMENT", 
		"DECIMAL", "DIGIT", "ELSE", "ESC_SEQ", "EXPONENT", "EXPRESSION", "FN", 
		"HEX_DIGIT", "ID", "IF", "IN", "INTEGER", "JAVAUDF", "LOWER_LETTER", "NOT", 
		"OCTAL_ESC", "OPERATOR", "OR", "QUOTATION", "SIGN", "SLASH", "STAR", "STRING", 
		"UINT", "UNICODE_ESC", "UPPER_LETTER", "VAR", "WS", "'!'", "'!='", "'&&'", 
		"'&'", "'('", "')'", "'+'", "'++'", "','", "'-'", "'--'", "'.'", "':'", 
		"';'", "'<'", "'<='", "'='", "'=='", "'>'", "'>='", "'?'", "'?.'", "'['", 
		"']'", "'false'", "'null'", "'read'", "'true'", "'using'", "'write'", 
		"'{'", "'||'", "'}'", "'~'"
	};
	public static final int EOF=-1;
	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 AND=4;
	public static final int APOSTROPHE=5;
	public static final int COMMENT=6;
	public static final int DECIMAL=7;
	public static final int DIGIT=8;
	public static final int ELSE=9;
	public static final int ESC_SEQ=10;
	public static final int EXPONENT=11;
	public static final int EXPRESSION=12;
	public static final int FN=13;
	public static final int HEX_DIGIT=14;
	public static final int ID=15;
	public static final int IF=16;
	public static final int IN=17;
	public static final int INTEGER=18;
	public static final int JAVAUDF=19;
	public static final int LOWER_LETTER=20;
	public static final int NOT=21;
	public static final int OCTAL_ESC=22;
	public static final int OPERATOR=23;
	public static final int OR=24;
	public static final int QUOTATION=25;
	public static final int SIGN=26;
	public static final int SLASH=27;
	public static final int STAR=28;
	public static final int STRING=29;
	public static final int UINT=30;
	public static final int UNICODE_ESC=31;
	public static final int UPPER_LETTER=32;
	public static final int VAR=33;
	public static final int WS=34;

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

	// delegators


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

	protected TreeAdaptor adaptor = new CommonTreeAdaptor();

	public void setTreeAdaptor(TreeAdaptor adaptor) {
		this.adaptor = adaptor;
	}
	public TreeAdaptor getTreeAdaptor() {
		return adaptor;
	}
	@Override public String[] getTokenNames() { return MeteorParser.tokenNames; }
	@Override public String getGrammarFileName() { return "/home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g"; }


	  private Stack paraphrase = new Stack();

	  private boolean setInnerOutput(Token VAR, Operator op) {
		  JsonStreamExpression output = new JsonStreamExpression(op.getOutput(objectCreation_stack.peek().mappings.size()));
		  objectCreation_stack.peek().mappings.add(new ObjectCreation.TagMapping(output, new JsonStreamExpression(op)));
		  getVariableRegistry().getRegistry(1).put(VAR.getText(), output);
		  return true;
		}
	  
	  protected EvaluationExpression getInputSelection(Token inputVar) throws RecognitionException {
	      return getVariableSafely(inputVar).toInputSelection(operator_stack.peek().result);
	  }

	  public void parseSinks() throws RecognitionException {
	    script();
	  }


	public static class script_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "script"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:60:1: script : ( statement ';' )+ ->;
	public final MeteorParser.script_return script() throws RecognitionException {
		MeteorParser.script_return retval = new MeteorParser.script_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token char_literal2=null;
		ParserRuleReturnScope statement1 =null;

		EvaluationExpression char_literal2_tree=null;
		RewriteRuleTokenStream stream_48=new RewriteRuleTokenStream(adaptor,"token 48");
		RewriteRuleSubtreeStream stream_statement=new RewriteRuleSubtreeStream(adaptor,"rule statement");

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:61:2: ( ( statement ';' )+ ->)
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:61:5: ( statement ';' )+
			{
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:61:5: ( statement ';' )+
			int cnt1=0;
			loop1:
			while (true) {
				int alt1=2;
				int LA1_0 = input.LA(1);
				if ( (LA1_0==ID||LA1_0==VAR||LA1_0==61||(LA1_0 >= 63 && LA1_0 <= 64)) ) {
					alt1=1;
				}

				switch (alt1) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:61:6: statement ';'
					{
					pushFollow(FOLLOW_statement_in_script121);
					statement1=statement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statement.add(statement1.getTree());
					char_literal2=(Token)match(input,48,FOLLOW_48_in_script123); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_48.add(char_literal2);

					}
					break;

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

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

			root_0 = (EvaluationExpression)adaptor.nil();
			// 61:22: ->
			{
				root_0 = null;
			}


			retval.tree = root_0;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class statement_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "statement"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:63:1: statement : ( operator | packageImport | functionDefinition | javaudf | adhocSource |m= functionCall ) ->;
	public final MeteorParser.statement_return statement() throws RecognitionException {
		MeteorParser.statement_return retval = new MeteorParser.statement_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		ParserRuleReturnScope m =null;
		ParserRuleReturnScope operator3 =null;
		ParserRuleReturnScope packageImport4 =null;
		ParserRuleReturnScope functionDefinition5 =null;
		ParserRuleReturnScope javaudf6 =null;
		ParserRuleReturnScope adhocSource7 =null;

		RewriteRuleSubtreeStream stream_functionCall=new RewriteRuleSubtreeStream(adaptor,"rule functionCall");
		RewriteRuleSubtreeStream stream_functionDefinition=new RewriteRuleSubtreeStream(adaptor,"rule functionDefinition");
		RewriteRuleSubtreeStream stream_javaudf=new RewriteRuleSubtreeStream(adaptor,"rule javaudf");
		RewriteRuleSubtreeStream stream_adhocSource=new RewriteRuleSubtreeStream(adaptor,"rule adhocSource");
		RewriteRuleSubtreeStream stream_operator=new RewriteRuleSubtreeStream(adaptor,"rule operator");
		RewriteRuleSubtreeStream stream_packageImport=new RewriteRuleSubtreeStream(adaptor,"rule packageImport");

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:64:2: ( ( operator | packageImport | functionDefinition | javaudf | adhocSource |m= functionCall ) ->)
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:64:4: ( operator | packageImport | functionDefinition | javaudf | adhocSource |m= functionCall )
			{
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:64:4: ( operator | packageImport | functionDefinition | javaudf | adhocSource |m= functionCall )
			int alt2=6;
			switch ( input.LA(1) ) {
			case VAR:
				{
				int LA2_1 = input.LA(2);
				if ( (LA2_1==51) ) {
					int LA2_5 = input.LA(3);
					if ( (LA2_5==ID||LA2_5==61) ) {
						alt2=1;
					}
					else if ( (LA2_5==57) ) {
						alt2=5;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return retval;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 2, 5, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}
				else if ( (LA2_1==43) ) {
					alt2=1;
				}

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

				}
				break;
			case 61:
			case 64:
				{
				alt2=1;
				}
				break;
			case ID:
				{
				switch ( input.LA(2) ) {
				case 47:
					{
					int LA2_6 = input.LA(3);
					if ( (LA2_6==ID) ) {
						int LA2_10 = input.LA(4);
						if ( (LA2_10==39) ) {
							alt2=6;
						}
						else if ( (LA2_10==ID||LA2_10==VAR||LA2_10==48) ) {
							alt2=1;
						}

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

					}

					else {
						if (state.backtracking>0) {state.failed=true; return retval;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 2, 6, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

					}
					break;
				case 51:
					{
					int LA2_7 = input.LA(3);
					if ( (LA2_7==JAVAUDF) ) {
						alt2=4;
					}
					else if ( (LA2_7==FN) ) {
						alt2=3;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return retval;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 2, 7, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

					}
					break;
				case 39:
					{
					alt2=6;
					}
					break;
				case ID:
				case VAR:
				case 48:
					{
					alt2=1;
					}
					break;
				default:
					if (state.backtracking>0) {state.failed=true; return retval;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 2, 3, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}
				}
				break;
			case 63:
				{
				alt2=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 2, 0, input);
				throw nvae;
			}
			switch (alt2) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:64:5: operator
					{
					pushFollow(FOLLOW_operator_in_statement137);
					operator3=operator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_operator.add(operator3.getTree());
					}
					break;
				case 2 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:64:16: packageImport
					{
					pushFollow(FOLLOW_packageImport_in_statement141);
					packageImport4=packageImport();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_packageImport.add(packageImport4.getTree());
					}
					break;
				case 3 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:64:32: functionDefinition
					{
					pushFollow(FOLLOW_functionDefinition_in_statement145);
					functionDefinition5=functionDefinition();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_functionDefinition.add(functionDefinition5.getTree());
					}
					break;
				case 4 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:64:53: javaudf
					{
					pushFollow(FOLLOW_javaudf_in_statement149);
					javaudf6=javaudf();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_javaudf.add(javaudf6.getTree());
					}
					break;
				case 5 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:64:63: adhocSource
					{
					pushFollow(FOLLOW_adhocSource_in_statement153);
					adhocSource7=adhocSource();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_adhocSource.add(adhocSource7.getTree());
					}
					break;
				case 6 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:66:4: m= functionCall
					{
					pushFollow(FOLLOW_functionCall_in_statement161);
					m=functionCall();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_functionCall.add(m.getTree());
					if ( state.backtracking==0 ) { (m!=null?((EvaluationExpression)m.getTree()):null).evaluate(MissingNode.getInstance()); }
					}
					break;

			}

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

			root_0 = (EvaluationExpression)adaptor.nil();
			// 66:69: ->
			{
				root_0 = null;
			}


			retval.tree = root_0;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class packageImport_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "packageImport"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:68:1: packageImport : 'using' packageName= ID ( ',' additionalPackage= ID )* ->;
	public final MeteorParser.packageImport_return packageImport() throws RecognitionException {
		MeteorParser.packageImport_return retval = new MeteorParser.packageImport_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token packageName=null;
		Token additionalPackage=null;
		Token string_literal8=null;
		Token char_literal9=null;

		EvaluationExpression packageName_tree=null;
		EvaluationExpression additionalPackage_tree=null;
		EvaluationExpression string_literal8_tree=null;
		EvaluationExpression char_literal9_tree=null;
		RewriteRuleTokenStream stream_43=new RewriteRuleTokenStream(adaptor,"token 43");
		RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
		RewriteRuleTokenStream stream_63=new RewriteRuleTokenStream(adaptor,"token 63");

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:69:3: ( 'using' packageName= ID ( ',' additionalPackage= ID )* ->)
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:69:6: 'using' packageName= ID ( ',' additionalPackage= ID )*
			{
			string_literal8=(Token)match(input,63,FOLLOW_63_in_packageImport178); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_63.add(string_literal8);

			packageName=(Token)match(input,ID,FOLLOW_ID_in_packageImport182); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ID.add(packageName);

			if ( state.backtracking==0 ) { getPackageManager().importPackage((packageName!=null?packageName.getText():null)); }
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:70:6: ( ',' additionalPackage= ID )*
			loop3:
			while (true) {
				int alt3=2;
				int LA3_0 = input.LA(1);
				if ( (LA3_0==43) ) {
					alt3=1;
				}

				switch (alt3) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:70:7: ',' additionalPackage= ID
					{
					char_literal9=(Token)match(input,43,FOLLOW_43_in_packageImport193); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_43.add(char_literal9);

					additionalPackage=(Token)match(input,ID,FOLLOW_ID_in_packageImport197); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ID.add(additionalPackage);

					if ( state.backtracking==0 ) { getPackageManager().importPackage((additionalPackage!=null?additionalPackage.getText():null)); }
					}
					break;

				default :
					break loop3;
				}
			}

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

			root_0 = (EvaluationExpression)adaptor.nil();
			// 70:98: ->
			{
				root_0 = null;
			}


			retval.tree = root_0;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class functionDefinition_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "functionDefinition"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:72:1: functionDefinition : name= ID '=' func= inlineFunction ->;
	public final MeteorParser.functionDefinition_return functionDefinition() throws RecognitionException {
		MeteorParser.functionDefinition_return retval = new MeteorParser.functionDefinition_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token name=null;
		Token char_literal10=null;
		ParserRuleReturnScope func =null;

		EvaluationExpression name_tree=null;
		EvaluationExpression char_literal10_tree=null;
		RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
		RewriteRuleTokenStream stream_51=new RewriteRuleTokenStream(adaptor,"token 51");
		RewriteRuleSubtreeStream stream_inlineFunction=new RewriteRuleSubtreeStream(adaptor,"rule inlineFunction");

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:73:3: (name= ID '=' func= inlineFunction ->)
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:73:5: name= ID '=' func= inlineFunction
			{
			name=(Token)match(input,ID,FOLLOW_ID_in_functionDefinition215); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ID.add(name);

			char_literal10=(Token)match(input,51,FOLLOW_51_in_functionDefinition217); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_51.add(char_literal10);

			pushFollow(FOLLOW_inlineFunction_in_functionDefinition221);
			func=inlineFunction();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_inlineFunction.add(func.getTree());
			if ( state.backtracking==0 ) { addFunction((name!=null?name.getText():null), (func!=null?((MeteorParser.inlineFunction_return)func).func:null)); }
			// AST REWRITE
			// elements: 
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (EvaluationExpression)adaptor.nil();
			// 73:78: ->
			{
				root_0 = null;
			}


			retval.tree = root_0;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class inlineFunction_return extends ParserRuleReturnScope {
		public ExpressionFunction func;
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "inlineFunction"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:75:1: inlineFunction returns [ExpressionFunction func] : FN '(' (param= ID ( ',' param= ID )* )? ')' '{' def= expression '}' ->;
	public final MeteorParser.inlineFunction_return inlineFunction() throws RecognitionException {
		MeteorParser.inlineFunction_return retval = new MeteorParser.inlineFunction_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token param=null;
		Token FN11=null;
		Token char_literal12=null;
		Token char_literal13=null;
		Token char_literal14=null;
		Token char_literal15=null;
		Token char_literal16=null;
		ParserRuleReturnScope def =null;

		EvaluationExpression param_tree=null;
		EvaluationExpression FN11_tree=null;
		EvaluationExpression char_literal12_tree=null;
		EvaluationExpression char_literal13_tree=null;
		EvaluationExpression char_literal14_tree=null;
		EvaluationExpression char_literal15_tree=null;
		EvaluationExpression char_literal16_tree=null;
		RewriteRuleTokenStream stream_67=new RewriteRuleTokenStream(adaptor,"token 67");
		RewriteRuleTokenStream stream_43=new RewriteRuleTokenStream(adaptor,"token 43");
		RewriteRuleTokenStream stream_FN=new RewriteRuleTokenStream(adaptor,"token FN");
		RewriteRuleTokenStream stream_40=new RewriteRuleTokenStream(adaptor,"token 40");
		RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
		RewriteRuleTokenStream stream_65=new RewriteRuleTokenStream(adaptor,"token 65");
		RewriteRuleTokenStream stream_39=new RewriteRuleTokenStream(adaptor,"token 39");
		RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");

		 List params = new ArrayList(); 
		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:77:3: ( FN '(' (param= ID ( ',' param= ID )* )? ')' '{' def= expression '}' ->)
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:77:5: FN '(' (param= ID ( ',' param= ID )* )? ')' '{' def= expression '}'
			{
			FN11=(Token)match(input,FN,FOLLOW_FN_in_inlineFunction247); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_FN.add(FN11);

			char_literal12=(Token)match(input,39,FOLLOW_39_in_inlineFunction249); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_39.add(char_literal12);

			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:78:3: (param= ID ( ',' param= ID )* )?
			int alt5=2;
			int LA5_0 = input.LA(1);
			if ( (LA5_0==ID) ) {
				alt5=1;
			}
			switch (alt5) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:78:4: param= ID ( ',' param= ID )*
					{
					param=(Token)match(input,ID,FOLLOW_ID_in_inlineFunction258); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ID.add(param);

					if ( state.backtracking==0 ) { params.add(param); }
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:79:3: ( ',' param= ID )*
					loop4:
					while (true) {
						int alt4=2;
						int LA4_0 = input.LA(1);
						if ( (LA4_0==43) ) {
							alt4=1;
						}

						switch (alt4) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:79:4: ',' param= ID
							{
							char_literal13=(Token)match(input,43,FOLLOW_43_in_inlineFunction265); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_43.add(char_literal13);

							param=(Token)match(input,ID,FOLLOW_ID_in_inlineFunction269); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_ID.add(param);

							if ( state.backtracking==0 ) { params.add(param); }
							}
							break;

						default :
							break loop4;
						}
					}

					}
					break;

			}

			char_literal14=(Token)match(input,40,FOLLOW_40_in_inlineFunction280); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_40.add(char_literal14);

			if ( state.backtracking==0 ) { 
			    addConstantScope();
			    for(int index = 0; index < params.size(); index++) 
			      this.getConstantRegistry().put(params.get(index).getText(), new InputSelection(index)); 
			  }
			char_literal15=(Token)match(input,65,FOLLOW_65_in_inlineFunction290); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_65.add(char_literal15);

			pushFollow(FOLLOW_expression_in_inlineFunction294);
			def=expression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_expression.add(def.getTree());
			char_literal16=(Token)match(input,67,FOLLOW_67_in_inlineFunction296); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_67.add(char_literal16);

			if ( state.backtracking==0 ) { 
			    retval.func = new ExpressionFunction(params.size(), (def!=null?((EvaluationExpression)def.getTree()):null));
			    removeConstantScope(); 
			  }
			// AST REWRITE
			// elements: 
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (EvaluationExpression)adaptor.nil();
			// 90:5: ->
			{
				root_0 = null;
			}


			retval.tree = root_0;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class javaudf_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "javaudf"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:92:1: javaudf : name= ID '=' JAVAUDF '(' path= STRING ')' ->;
	public final MeteorParser.javaudf_return javaudf() throws RecognitionException {
		MeteorParser.javaudf_return retval = new MeteorParser.javaudf_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token name=null;
		Token path=null;
		Token char_literal17=null;
		Token JAVAUDF18=null;
		Token char_literal19=null;
		Token char_literal20=null;

		EvaluationExpression name_tree=null;
		EvaluationExpression path_tree=null;
		EvaluationExpression char_literal17_tree=null;
		EvaluationExpression JAVAUDF18_tree=null;
		EvaluationExpression char_literal19_tree=null;
		EvaluationExpression char_literal20_tree=null;
		RewriteRuleTokenStream stream_40=new RewriteRuleTokenStream(adaptor,"token 40");
		RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
		RewriteRuleTokenStream stream_51=new RewriteRuleTokenStream(adaptor,"token 51");
		RewriteRuleTokenStream stream_JAVAUDF=new RewriteRuleTokenStream(adaptor,"token JAVAUDF");
		RewriteRuleTokenStream stream_39=new RewriteRuleTokenStream(adaptor,"token 39");
		RewriteRuleTokenStream stream_STRING=new RewriteRuleTokenStream(adaptor,"token STRING");

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:93:3: (name= ID '=' JAVAUDF '(' path= STRING ')' ->)
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:93:5: name= ID '=' JAVAUDF '(' path= STRING ')'
			{
			name=(Token)match(input,ID,FOLLOW_ID_in_javaudf316); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ID.add(name);

			char_literal17=(Token)match(input,51,FOLLOW_51_in_javaudf318); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_51.add(char_literal17);

			JAVAUDF18=(Token)match(input,JAVAUDF,FOLLOW_JAVAUDF_in_javaudf320); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_JAVAUDF.add(JAVAUDF18);

			char_literal19=(Token)match(input,39,FOLLOW_39_in_javaudf322); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_39.add(char_literal19);

			path=(Token)match(input,STRING,FOLLOW_STRING_in_javaudf326); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_STRING.add(path);

			char_literal20=(Token)match(input,40,FOLLOW_40_in_javaudf328); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_40.add(char_literal20);

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

			root_0 = (EvaluationExpression)adaptor.nil();
			// 94:53: ->
			{
				root_0 = null;
			}


			retval.tree = root_0;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	protected static class contextAwareExpression_scope {
		EvaluationExpression context;
	}
	protected Stack contextAwareExpression_stack = new Stack();

	public static class contextAwareExpression_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "contextAwareExpression"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:96:1: contextAwareExpression[EvaluationExpression contextExpression] : ternaryExpression ;
	public final MeteorParser.contextAwareExpression_return contextAwareExpression(EvaluationExpression contextExpression) throws RecognitionException {
		contextAwareExpression_stack.push(new contextAwareExpression_scope());
		MeteorParser.contextAwareExpression_return retval = new MeteorParser.contextAwareExpression_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		ParserRuleReturnScope ternaryExpression21 =null;


		 contextAwareExpression_stack.peek().context = contextExpression; 
		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:99:3: ( ternaryExpression )
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:99:5: ternaryExpression
			{
			root_0 = (EvaluationExpression)adaptor.nil();


			pushFollow(FOLLOW_ternaryExpression_in_contextAwareExpression356);
			ternaryExpression21=ternaryExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) adaptor.addChild(root_0, ternaryExpression21.getTree());

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

		finally {
			// do for sure before leaving
			contextAwareExpression_stack.pop();
		}
		return retval;
	}
	// $ANTLR end "contextAwareExpression"


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


	// $ANTLR start "expression"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:101:1: expression : ( ( ID ( ID | VAR ) )=> operatorExpression | ternaryExpression );
	public final MeteorParser.expression_return expression() throws RecognitionException {
		MeteorParser.expression_return retval = new MeteorParser.expression_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		ParserRuleReturnScope operatorExpression22 =null;
		ParserRuleReturnScope ternaryExpression23 =null;


		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:102:3: ( ( ID ( ID | VAR ) )=> operatorExpression | ternaryExpression )
			int alt6=2;
			int LA6_0 = input.LA(1);
			if ( (LA6_0==VAR) ) {
				int LA6_1 = input.LA(2);
				if ( (LA6_1==51) && (synpred1_Meteor())) {
					alt6=1;
				}
				else if ( (LA6_1==43) ) {
					int LA6_7 = input.LA(3);
					if ( (LA6_7==VAR) ) {
						int LA6_8 = input.LA(4);
						if ( (synpred1_Meteor()) ) {
							alt6=1;
						}
						else if ( (true) ) {
							alt6=2;
						}

					}
					else if ( (LA6_7==DECIMAL||LA6_7==FN||LA6_7==ID||LA6_7==INTEGER||(LA6_7 >= STRING && LA6_7 <= UINT)||LA6_7==35||(LA6_7 >= 38 && LA6_7 <= 39)||LA6_7==42||LA6_7==45||(LA6_7 >= 57 && LA6_7 <= 62)||(LA6_7 >= 64 && LA6_7 <= 65)||(LA6_7 >= 67 && LA6_7 <= 68)) ) {
						alt6=2;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return retval;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 6, 7, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}
				else if ( (LA6_1==AND||(LA6_1 >= ID && LA6_1 <= IN)||LA6_1==NOT||LA6_1==OR||(LA6_1 >= SLASH && LA6_1 <= STAR)||(LA6_1 >= 36 && LA6_1 <= 37)||(LA6_1 >= 40 && LA6_1 <= 41)||LA6_1==44||LA6_1==46||(LA6_1 >= 49 && LA6_1 <= 50)||(LA6_1 >= 52 && LA6_1 <= 58)||(LA6_1 >= 66 && LA6_1 <= 67)) ) {
					alt6=2;
				}

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

			}
			else if ( (LA6_0==61) && (synpred1_Meteor())) {
				alt6=1;
			}
			else if ( (LA6_0==64) && (synpred1_Meteor())) {
				alt6=1;
			}
			else if ( (LA6_0==ID) ) {
				int LA6_4 = input.LA(2);
				if ( (synpred1_Meteor()) ) {
					alt6=1;
				}
				else if ( (true) ) {
					alt6=2;
				}

			}
			else if ( (LA6_0==DECIMAL||LA6_0==FN||LA6_0==INTEGER||(LA6_0 >= STRING && LA6_0 <= UINT)||LA6_0==35||(LA6_0 >= 38 && LA6_0 <= 39)||LA6_0==42||LA6_0==45||LA6_0==57||(LA6_0 >= 59 && LA6_0 <= 60)||LA6_0==62||LA6_0==65||LA6_0==68) ) {
				alt6=2;
			}

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

			switch (alt6) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:102:5: ( ID ( ID | VAR ) )=> operatorExpression
					{
					root_0 = (EvaluationExpression)adaptor.nil();


					pushFollow(FOLLOW_operatorExpression_in_expression379);
					operatorExpression22=operatorExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, operatorExpression22.getTree());

					}
					break;
				case 2 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:103:5: ternaryExpression
					{
					root_0 = (EvaluationExpression)adaptor.nil();


					pushFollow(FOLLOW_ternaryExpression_in_expression385);
					ternaryExpression23=ternaryExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, ternaryExpression23.getTree());

					}
					break;

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class ternaryExpression_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "ternaryExpression"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:105:1: ternaryExpression : ( ( orExpression '?' )=>ifClause= orExpression '?' (ifExpr= orExpression )? ':' elseExpr= orExpression -> ^( EXPRESSION[\"TernaryExpression\"] $ifClause) | ( orExpression IF )=>ifExpr2= orExpression IF ifClause2= orExpression -> ^( EXPRESSION[\"TernaryExpression\"] $ifClause2 $ifExpr2) | orExpression );
	public final MeteorParser.ternaryExpression_return ternaryExpression() throws RecognitionException {
		MeteorParser.ternaryExpression_return retval = new MeteorParser.ternaryExpression_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token char_literal24=null;
		Token char_literal25=null;
		Token IF26=null;
		ParserRuleReturnScope ifClause =null;
		ParserRuleReturnScope ifExpr =null;
		ParserRuleReturnScope elseExpr =null;
		ParserRuleReturnScope ifExpr2 =null;
		ParserRuleReturnScope ifClause2 =null;
		ParserRuleReturnScope orExpression27 =null;

		EvaluationExpression char_literal24_tree=null;
		EvaluationExpression char_literal25_tree=null;
		EvaluationExpression IF26_tree=null;
		RewriteRuleTokenStream stream_47=new RewriteRuleTokenStream(adaptor,"token 47");
		RewriteRuleTokenStream stream_55=new RewriteRuleTokenStream(adaptor,"token 55");
		RewriteRuleTokenStream stream_IF=new RewriteRuleTokenStream(adaptor,"token IF");
		RewriteRuleSubtreeStream stream_orExpression=new RewriteRuleSubtreeStream(adaptor,"rule orExpression");

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:106:2: ( ( orExpression '?' )=>ifClause= orExpression '?' (ifExpr= orExpression )? ':' elseExpr= orExpression -> ^( EXPRESSION[\"TernaryExpression\"] $ifClause) | ( orExpression IF )=>ifExpr2= orExpression IF ifClause2= orExpression -> ^( EXPRESSION[\"TernaryExpression\"] $ifClause2 $ifExpr2) | orExpression )
			int alt8=3;
			switch ( input.LA(1) ) {
			case 42:
				{
				int LA8_1 = input.LA(2);
				if ( (synpred2_Meteor()) ) {
					alt8=1;
				}
				else if ( (synpred3_Meteor()) ) {
					alt8=2;
				}
				else if ( (true) ) {
					alt8=3;
				}

				}
				break;
			case 45:
				{
				int LA8_2 = input.LA(2);
				if ( (synpred2_Meteor()) ) {
					alt8=1;
				}
				else if ( (synpred3_Meteor()) ) {
					alt8=2;
				}
				else if ( (true) ) {
					alt8=3;
				}

				}
				break;
			case 35:
			case 68:
				{
				int LA8_3 = input.LA(2);
				if ( (synpred2_Meteor()) ) {
					alt8=1;
				}
				else if ( (synpred3_Meteor()) ) {
					alt8=2;
				}
				else if ( (true) ) {
					alt8=3;
				}

				}
				break;
			case 39:
				{
				int LA8_4 = input.LA(2);
				if ( (synpred2_Meteor()) ) {
					alt8=1;
				}
				else if ( (synpred3_Meteor()) ) {
					alt8=2;
				}
				else if ( (true) ) {
					alt8=3;
				}

				}
				break;
			case ID:
				{
				int LA8_5 = input.LA(2);
				if ( (synpred2_Meteor()) ) {
					alt8=1;
				}
				else if ( (synpred3_Meteor()) ) {
					alt8=2;
				}
				else if ( (true) ) {
					alt8=3;
				}

				}
				break;
			case 38:
				{
				int LA8_6 = input.LA(2);
				if ( (synpred2_Meteor()) ) {
					alt8=1;
				}
				else if ( (synpred3_Meteor()) ) {
					alt8=2;
				}
				else if ( (true) ) {
					alt8=3;
				}

				}
				break;
			case FN:
				{
				int LA8_7 = input.LA(2);
				if ( (synpred2_Meteor()) ) {
					alt8=1;
				}
				else if ( (synpred3_Meteor()) ) {
					alt8=2;
				}
				else if ( (true) ) {
					alt8=3;
				}

				}
				break;
			case 62:
				{
				int LA8_8 = input.LA(2);
				if ( (synpred2_Meteor()) ) {
					alt8=1;
				}
				else if ( (synpred3_Meteor()) ) {
					alt8=2;
				}
				else if ( (true) ) {
					alt8=3;
				}

				}
				break;
			case 59:
				{
				int LA8_9 = input.LA(2);
				if ( (synpred2_Meteor()) ) {
					alt8=1;
				}
				else if ( (synpred3_Meteor()) ) {
					alt8=2;
				}
				else if ( (true) ) {
					alt8=3;
				}

				}
				break;
			case DECIMAL:
				{
				int LA8_10 = input.LA(2);
				if ( (synpred2_Meteor()) ) {
					alt8=1;
				}
				else if ( (synpred3_Meteor()) ) {
					alt8=2;
				}
				else if ( (true) ) {
					alt8=3;
				}

				}
				break;
			case STRING:
				{
				int LA8_11 = input.LA(2);
				if ( (synpred2_Meteor()) ) {
					alt8=1;
				}
				else if ( (synpred3_Meteor()) ) {
					alt8=2;
				}
				else if ( (true) ) {
					alt8=3;
				}

				}
				break;
			case UINT:
				{
				int LA8_12 = input.LA(2);
				if ( (synpred2_Meteor()) ) {
					alt8=1;
				}
				else if ( (synpred3_Meteor()) ) {
					alt8=2;
				}
				else if ( (true) ) {
					alt8=3;
				}

				}
				break;
			case INTEGER:
				{
				int LA8_13 = input.LA(2);
				if ( (synpred2_Meteor()) ) {
					alt8=1;
				}
				else if ( (synpred3_Meteor()) ) {
					alt8=2;
				}
				else if ( (true) ) {
					alt8=3;
				}

				}
				break;
			case 60:
				{
				int LA8_14 = input.LA(2);
				if ( (synpred2_Meteor()) ) {
					alt8=1;
				}
				else if ( (synpred3_Meteor()) ) {
					alt8=2;
				}
				else if ( (true) ) {
					alt8=3;
				}

				}
				break;
			case VAR:
				{
				int LA8_15 = input.LA(2);
				if ( (synpred2_Meteor()) ) {
					alt8=1;
				}
				else if ( (synpred3_Meteor()) ) {
					alt8=2;
				}
				else if ( (true) ) {
					alt8=3;
				}

				}
				break;
			case 57:
				{
				int LA8_16 = input.LA(2);
				if ( (synpred2_Meteor()) ) {
					alt8=1;
				}
				else if ( (synpred3_Meteor()) ) {
					alt8=2;
				}
				else if ( (true) ) {
					alt8=3;
				}

				}
				break;
			case 65:
				{
				int LA8_17 = input.LA(2);
				if ( (synpred2_Meteor()) ) {
					alt8=1;
				}
				else if ( (synpred3_Meteor()) ) {
					alt8=2;
				}
				else if ( (true) ) {
					alt8=3;
				}

				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 8, 0, input);
				throw nvae;
			}
			switch (alt8) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:106:4: ( orExpression '?' )=>ifClause= orExpression '?' (ifExpr= orExpression )? ':' elseExpr= orExpression
					{
					pushFollow(FOLLOW_orExpression_in_ternaryExpression403);
					ifClause=orExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_orExpression.add(ifClause.getTree());
					char_literal24=(Token)match(input,55,FOLLOW_55_in_ternaryExpression405); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_55.add(char_literal24);

					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:106:57: (ifExpr= orExpression )?
					int alt7=2;
					int LA7_0 = input.LA(1);
					if ( (LA7_0==DECIMAL||LA7_0==FN||LA7_0==ID||LA7_0==INTEGER||(LA7_0 >= STRING && LA7_0 <= UINT)||LA7_0==VAR||LA7_0==35||(LA7_0 >= 38 && LA7_0 <= 39)||LA7_0==42||LA7_0==45||LA7_0==57||(LA7_0 >= 59 && LA7_0 <= 60)||LA7_0==62||LA7_0==65||LA7_0==68) ) {
						alt7=1;
					}
					switch (alt7) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:106:57: ifExpr= orExpression
							{
							pushFollow(FOLLOW_orExpression_in_ternaryExpression409);
							ifExpr=orExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_orExpression.add(ifExpr.getTree());
							}
							break;

					}

					char_literal25=(Token)match(input,47,FOLLOW_47_in_ternaryExpression412); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_47.add(char_literal25);

					pushFollow(FOLLOW_orExpression_in_ternaryExpression416);
					elseExpr=orExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_orExpression.add(elseExpr.getTree());
					// AST REWRITE
					// elements: ifClause
					// token labels: 
					// rule labels: retval, ifClause
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
					RewriteRuleSubtreeStream stream_ifClause=new RewriteRuleSubtreeStream(adaptor,"rule ifClause",ifClause!=null?ifClause.getTree():null);

					root_0 = (EvaluationExpression)adaptor.nil();
					// 107:2: -> ^( EXPRESSION[\"TernaryExpression\"] $ifClause)
					{
						// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:107:5: ^( EXPRESSION[\"TernaryExpression\"] $ifClause)
						{
						EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
						root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "TernaryExpression"), root_1);
						adaptor.addChild(root_1, stream_ifClause.nextTree());
						adaptor.addChild(root_1,  ifExpr == null ? (ifClause!=null?((EvaluationExpression)ifClause.getTree()):null) : (ifExpr!=null?((EvaluationExpression)ifExpr.getTree()):null) );
						adaptor.addChild(root_1,  (elseExpr!=null?((EvaluationExpression)elseExpr.getTree()):null) );
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:108:4: ( orExpression IF )=>ifExpr2= orExpression IF ifClause2= orExpression
					{
					pushFollow(FOLLOW_orExpression_in_ternaryExpression445);
					ifExpr2=orExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_orExpression.add(ifExpr2.getTree());
					IF26=(Token)match(input,IF,FOLLOW_IF_in_ternaryExpression447); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IF.add(IF26);

					pushFollow(FOLLOW_orExpression_in_ternaryExpression451);
					ifClause2=orExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_orExpression.add(ifClause2.getTree());
					// AST REWRITE
					// elements: ifExpr2, ifClause2
					// token labels: 
					// rule labels: retval, ifExpr2, ifClause2
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
					RewriteRuleSubtreeStream stream_ifExpr2=new RewriteRuleSubtreeStream(adaptor,"rule ifExpr2",ifExpr2!=null?ifExpr2.getTree():null);
					RewriteRuleSubtreeStream stream_ifClause2=new RewriteRuleSubtreeStream(adaptor,"rule ifClause2",ifClause2!=null?ifClause2.getTree():null);

					root_0 = (EvaluationExpression)adaptor.nil();
					// 109:3: -> ^( EXPRESSION[\"TernaryExpression\"] $ifClause2 $ifExpr2)
					{
						// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:109:6: ^( EXPRESSION[\"TernaryExpression\"] $ifClause2 $ifExpr2)
						{
						EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
						root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "TernaryExpression"), root_1);
						adaptor.addChild(root_1, stream_ifClause2.nextTree());
						adaptor.addChild(root_1, stream_ifExpr2.nextTree());
						adaptor.addChild(root_1,  EvaluationExpression.VALUE );
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 3 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:110:5: orExpression
					{
					root_0 = (EvaluationExpression)adaptor.nil();


					pushFollow(FOLLOW_orExpression_in_ternaryExpression474);
					orExpression27=orExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, orExpression27.getTree());

					}
					break;

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class orExpression_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "orExpression"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:112:1: orExpression :exprs+= andExpression ( ( OR | '||' ) exprs+= andExpression )* -> { $exprs.size() == 1 }? ->;
	public final MeteorParser.orExpression_return orExpression() throws RecognitionException {
		MeteorParser.orExpression_return retval = new MeteorParser.orExpression_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token OR28=null;
		Token string_literal29=null;
		List list_exprs=null;
		RuleReturnScope exprs = null;
		EvaluationExpression OR28_tree=null;
		EvaluationExpression string_literal29_tree=null;
		RewriteRuleTokenStream stream_66=new RewriteRuleTokenStream(adaptor,"token 66");
		RewriteRuleTokenStream stream_OR=new RewriteRuleTokenStream(adaptor,"token OR");
		RewriteRuleSubtreeStream stream_andExpression=new RewriteRuleSubtreeStream(adaptor,"rule andExpression");

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:113:3: (exprs+= andExpression ( ( OR | '||' ) exprs+= andExpression )* -> { $exprs.size() == 1 }? ->)
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:113:5: exprs+= andExpression ( ( OR | '||' ) exprs+= andExpression )*
			{
			pushFollow(FOLLOW_andExpression_in_orExpression487);
			exprs=andExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_andExpression.add(exprs.getTree());
			if (list_exprs==null) list_exprs=new ArrayList();
			list_exprs.add(exprs.getTree());
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:113:26: ( ( OR | '||' ) exprs+= andExpression )*
			loop10:
			while (true) {
				int alt10=2;
				int LA10_0 = input.LA(1);
				if ( (LA10_0==OR||LA10_0==66) ) {
					alt10=1;
				}

				switch (alt10) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:113:27: ( OR | '||' ) exprs+= andExpression
					{
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:113:27: ( OR | '||' )
					int alt9=2;
					int LA9_0 = input.LA(1);
					if ( (LA9_0==OR) ) {
						alt9=1;
					}
					else if ( (LA9_0==66) ) {
						alt9=2;
					}

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

					switch (alt9) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:113:28: OR
							{
							OR28=(Token)match(input,OR,FOLLOW_OR_in_orExpression491); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_OR.add(OR28);

							}
							break;
						case 2 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:113:33: '||'
							{
							string_literal29=(Token)match(input,66,FOLLOW_66_in_orExpression495); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_66.add(string_literal29);

							}
							break;

					}

					pushFollow(FOLLOW_andExpression_in_orExpression500);
					exprs=andExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_andExpression.add(exprs.getTree());
					if (list_exprs==null) list_exprs=new ArrayList();
					list_exprs.add(exprs.getTree());
					}
					break;

				default :
					break loop10;
				}
			}

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

			root_0 = (EvaluationExpression)adaptor.nil();
			// 114:3: -> { $exprs.size() == 1 }?
			if ( list_exprs.size() == 1 ) {
				adaptor.addChild(root_0,  list_exprs.get(0) );
			}

			else // 115:3: ->
			{
				adaptor.addChild(root_0,  OrExpression.valueOf((List) list_exprs) );
			}


			retval.tree = root_0;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


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


	// $ANTLR start "andExpression"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:117:1: andExpression :exprs+= elementExpression ( ( AND | '&&' ) exprs+= elementExpression )* -> { $exprs.size() == 1 }? ->;
	public final MeteorParser.andExpression_return andExpression() throws RecognitionException {
		MeteorParser.andExpression_return retval = new MeteorParser.andExpression_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token AND30=null;
		Token string_literal31=null;
		List list_exprs=null;
		RuleReturnScope exprs = null;
		EvaluationExpression AND30_tree=null;
		EvaluationExpression string_literal31_tree=null;
		RewriteRuleTokenStream stream_AND=new RewriteRuleTokenStream(adaptor,"token AND");
		RewriteRuleTokenStream stream_37=new RewriteRuleTokenStream(adaptor,"token 37");
		RewriteRuleSubtreeStream stream_elementExpression=new RewriteRuleSubtreeStream(adaptor,"rule elementExpression");

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:118:3: (exprs+= elementExpression ( ( AND | '&&' ) exprs+= elementExpression )* -> { $exprs.size() == 1 }? ->)
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:118:5: exprs+= elementExpression ( ( AND | '&&' ) exprs+= elementExpression )*
			{
			pushFollow(FOLLOW_elementExpression_in_andExpression529);
			exprs=elementExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_elementExpression.add(exprs.getTree());
			if (list_exprs==null) list_exprs=new ArrayList();
			list_exprs.add(exprs.getTree());
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:118:30: ( ( AND | '&&' ) exprs+= elementExpression )*
			loop12:
			while (true) {
				int alt12=2;
				int LA12_0 = input.LA(1);
				if ( (LA12_0==AND||LA12_0==37) ) {
					alt12=1;
				}

				switch (alt12) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:118:31: ( AND | '&&' ) exprs+= elementExpression
					{
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:118:31: ( AND | '&&' )
					int alt11=2;
					int LA11_0 = input.LA(1);
					if ( (LA11_0==AND) ) {
						alt11=1;
					}
					else if ( (LA11_0==37) ) {
						alt11=2;
					}

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

					switch (alt11) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:118:32: AND
							{
							AND30=(Token)match(input,AND,FOLLOW_AND_in_andExpression533); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_AND.add(AND30);

							}
							break;
						case 2 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:118:38: '&&'
							{
							string_literal31=(Token)match(input,37,FOLLOW_37_in_andExpression537); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_37.add(string_literal31);

							}
							break;

					}

					pushFollow(FOLLOW_elementExpression_in_andExpression542);
					exprs=elementExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_elementExpression.add(exprs.getTree());
					if (list_exprs==null) list_exprs=new ArrayList();
					list_exprs.add(exprs.getTree());
					}
					break;

				default :
					break loop12;
				}
			}

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

			root_0 = (EvaluationExpression)adaptor.nil();
			// 119:3: -> { $exprs.size() == 1 }?
			if ( list_exprs.size() == 1 ) {
				adaptor.addChild(root_0,  list_exprs.get(0) );
			}

			else // 120:3: ->
			{
				adaptor.addChild(root_0,  AndExpression.valueOf((List) list_exprs) );
			}


			retval.tree = root_0;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class elementExpression_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "elementExpression"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:122:1: elementExpression : elem= comparisonExpression ( (not= NOT )? IN set= comparisonExpression )? -> { set == null }? $elem -> ^( EXPRESSION[\"ElementInSetExpression\"] $elem $set) ;
	public final MeteorParser.elementExpression_return elementExpression() throws RecognitionException {
		MeteorParser.elementExpression_return retval = new MeteorParser.elementExpression_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token not=null;
		Token IN32=null;
		ParserRuleReturnScope elem =null;
		ParserRuleReturnScope set =null;

		EvaluationExpression not_tree=null;
		EvaluationExpression IN32_tree=null;
		RewriteRuleTokenStream stream_IN=new RewriteRuleTokenStream(adaptor,"token IN");
		RewriteRuleTokenStream stream_NOT=new RewriteRuleTokenStream(adaptor,"token NOT");
		RewriteRuleSubtreeStream stream_comparisonExpression=new RewriteRuleSubtreeStream(adaptor,"rule comparisonExpression");

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:123:2: (elem= comparisonExpression ( (not= NOT )? IN set= comparisonExpression )? -> { set == null }? $elem -> ^( EXPRESSION[\"ElementInSetExpression\"] $elem $set) )
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:123:4: elem= comparisonExpression ( (not= NOT )? IN set= comparisonExpression )?
			{
			pushFollow(FOLLOW_comparisonExpression_in_elementExpression571);
			elem=comparisonExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_comparisonExpression.add(elem.getTree());
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:123:30: ( (not= NOT )? IN set= comparisonExpression )?
			int alt14=2;
			int LA14_0 = input.LA(1);
			if ( (LA14_0==IN||LA14_0==NOT) ) {
				alt14=1;
			}
			switch (alt14) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:123:31: (not= NOT )? IN set= comparisonExpression
					{
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:123:34: (not= NOT )?
					int alt13=2;
					int LA13_0 = input.LA(1);
					if ( (LA13_0==NOT) ) {
						alt13=1;
					}
					switch (alt13) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:123:34: not= NOT
							{
							not=(Token)match(input,NOT,FOLLOW_NOT_in_elementExpression576); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_NOT.add(not);

							}
							break;

					}

					IN32=(Token)match(input,IN,FOLLOW_IN_in_elementExpression579); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IN.add(IN32);

					pushFollow(FOLLOW_comparisonExpression_in_elementExpression583);
					set=comparisonExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_comparisonExpression.add(set.getTree());
					}
					break;

			}

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

			root_0 = (EvaluationExpression)adaptor.nil();
			// 124:2: -> { set == null }? $elem
			if ( set == null ) {
				adaptor.addChild(root_0, stream_elem.nextTree());
			}

			else // 125:2: -> ^( EXPRESSION[\"ElementInSetExpression\"] $elem $set)
			{
				// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:125:5: ^( EXPRESSION[\"ElementInSetExpression\"] $elem $set)
				{
				EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
				root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "ElementInSetExpression"), root_1);
				adaptor.addChild(root_1, stream_elem.nextTree());
				adaptor.addChild(root_1,  not == null ? ElementInSetExpression.Quantor.EXISTS_IN : ElementInSetExpression.Quantor.EXISTS_NOT_IN);
				adaptor.addChild(root_1, stream_set.nextTree());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class comparisonExpression_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "comparisonExpression"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:128:1: comparisonExpression : e1= arithmeticExpression ( (s= '<=' |s= '>=' |s= '<' |s= '>' |s= '==' |s= '!=' ) e2= arithmeticExpression )? -> { $s == null }? $e1 -> { $s.getText().equals(\"!=\") }? ^( EXPRESSION[\"ComparativeExpression\"] $e1 $e2) -> { $s.getText().equals(\"==\") }? ^( EXPRESSION[\"ComparativeExpression\"] $e1 $e2) -> ^( EXPRESSION[\"ComparativeExpression\"] $e1 $e2) ;
	public final MeteorParser.comparisonExpression_return comparisonExpression() throws RecognitionException {
		MeteorParser.comparisonExpression_return retval = new MeteorParser.comparisonExpression_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token s=null;
		ParserRuleReturnScope e1 =null;
		ParserRuleReturnScope e2 =null;

		EvaluationExpression s_tree=null;
		RewriteRuleTokenStream stream_49=new RewriteRuleTokenStream(adaptor,"token 49");
		RewriteRuleTokenStream stream_52=new RewriteRuleTokenStream(adaptor,"token 52");
		RewriteRuleTokenStream stream_36=new RewriteRuleTokenStream(adaptor,"token 36");
		RewriteRuleTokenStream stream_53=new RewriteRuleTokenStream(adaptor,"token 53");
		RewriteRuleTokenStream stream_54=new RewriteRuleTokenStream(adaptor,"token 54");
		RewriteRuleTokenStream stream_50=new RewriteRuleTokenStream(adaptor,"token 50");
		RewriteRuleSubtreeStream stream_arithmeticExpression=new RewriteRuleSubtreeStream(adaptor,"rule arithmeticExpression");

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:129:2: (e1= arithmeticExpression ( (s= '<=' |s= '>=' |s= '<' |s= '>' |s= '==' |s= '!=' ) e2= arithmeticExpression )? -> { $s == null }? $e1 -> { $s.getText().equals(\"!=\") }? ^( EXPRESSION[\"ComparativeExpression\"] $e1 $e2) -> { $s.getText().equals(\"==\") }? ^( EXPRESSION[\"ComparativeExpression\"] $e1 $e2) -> ^( EXPRESSION[\"ComparativeExpression\"] $e1 $e2) )
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:129:4: e1= arithmeticExpression ( (s= '<=' |s= '>=' |s= '<' |s= '>' |s= '==' |s= '!=' ) e2= arithmeticExpression )?
			{
			pushFollow(FOLLOW_arithmeticExpression_in_comparisonExpression624);
			e1=arithmeticExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_arithmeticExpression.add(e1.getTree());
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:129:28: ( (s= '<=' |s= '>=' |s= '<' |s= '>' |s= '==' |s= '!=' ) e2= arithmeticExpression )?
			int alt16=2;
			int LA16_0 = input.LA(1);
			if ( (LA16_0==36||(LA16_0 >= 49 && LA16_0 <= 50)||(LA16_0 >= 52 && LA16_0 <= 54)) ) {
				alt16=1;
			}
			switch (alt16) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:129:29: (s= '<=' |s= '>=' |s= '<' |s= '>' |s= '==' |s= '!=' ) e2= arithmeticExpression
					{
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:129:29: (s= '<=' |s= '>=' |s= '<' |s= '>' |s= '==' |s= '!=' )
					int alt15=6;
					switch ( input.LA(1) ) {
					case 50:
						{
						alt15=1;
						}
						break;
					case 54:
						{
						alt15=2;
						}
						break;
					case 49:
						{
						alt15=3;
						}
						break;
					case 53:
						{
						alt15=4;
						}
						break;
					case 52:
						{
						alt15=5;
						}
						break;
					case 36:
						{
						alt15=6;
						}
						break;
					default:
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae =
							new NoViableAltException("", 15, 0, input);
						throw nvae;
					}
					switch (alt15) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:129:30: s= '<='
							{
							s=(Token)match(input,50,FOLLOW_50_in_comparisonExpression630); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_50.add(s);

							}
							break;
						case 2 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:129:39: s= '>='
							{
							s=(Token)match(input,54,FOLLOW_54_in_comparisonExpression636); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_54.add(s);

							}
							break;
						case 3 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:129:48: s= '<'
							{
							s=(Token)match(input,49,FOLLOW_49_in_comparisonExpression642); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_49.add(s);

							}
							break;
						case 4 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:129:56: s= '>'
							{
							s=(Token)match(input,53,FOLLOW_53_in_comparisonExpression648); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_53.add(s);

							}
							break;
						case 5 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:129:64: s= '=='
							{
							s=(Token)match(input,52,FOLLOW_52_in_comparisonExpression654); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_52.add(s);

							}
							break;
						case 6 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:129:73: s= '!='
							{
							s=(Token)match(input,36,FOLLOW_36_in_comparisonExpression660); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_36.add(s);

							}
							break;

					}

					pushFollow(FOLLOW_arithmeticExpression_in_comparisonExpression665);
					e2=arithmeticExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_arithmeticExpression.add(e2.getTree());
					}
					break;

			}

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

			root_0 = (EvaluationExpression)adaptor.nil();
			// 130:2: -> { $s == null }? $e1
			if ( s == null ) {
				adaptor.addChild(root_0, stream_e1.nextTree());
			}

			else // 131:3: -> { $s.getText().equals(\"!=\") }? ^( EXPRESSION[\"ComparativeExpression\"] $e1 $e2)
			if ( s.getText().equals("!=") ) {
				// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:131:38: ^( EXPRESSION[\"ComparativeExpression\"] $e1 $e2)
				{
				EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
				root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "ComparativeExpression"), root_1);
				adaptor.addChild(root_1, stream_e1.nextTree());
				adaptor.addChild(root_1, ComparativeExpression.BinaryOperator.NOT_EQUAL);
				adaptor.addChild(root_1, stream_e2.nextTree());
				adaptor.addChild(root_0, root_1);
				}

			}

			else // 132:3: -> { $s.getText().equals(\"==\") }? ^( EXPRESSION[\"ComparativeExpression\"] $e1 $e2)
			if ( s.getText().equals("==") ) {
				// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:132:38: ^( EXPRESSION[\"ComparativeExpression\"] $e1 $e2)
				{
				EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
				root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "ComparativeExpression"), root_1);
				adaptor.addChild(root_1, stream_e1.nextTree());
				adaptor.addChild(root_1, ComparativeExpression.BinaryOperator.EQUAL);
				adaptor.addChild(root_1, stream_e2.nextTree());
				adaptor.addChild(root_0, root_1);
				}

			}

			else // 133:2: -> ^( EXPRESSION[\"ComparativeExpression\"] $e1 $e2)
			{
				// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:133:6: ^( EXPRESSION[\"ComparativeExpression\"] $e1 $e2)
				{
				EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
				root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "ComparativeExpression"), root_1);
				adaptor.addChild(root_1, stream_e1.nextTree());
				adaptor.addChild(root_1, ComparativeExpression.BinaryOperator.valueOfSymbol((s!=null?s.getText():null)));
				adaptor.addChild(root_1, stream_e2.nextTree());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class arithmeticExpression_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "arithmeticExpression"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:135:1: arithmeticExpression : e1= multiplicationExpression ( (s= '+' |s= '-' ) e2= multiplicationExpression )? -> { s != null }? ^( EXPRESSION[\"ArithmeticExpression\"] $e1 $e2) -> $e1;
	public final MeteorParser.arithmeticExpression_return arithmeticExpression() throws RecognitionException {
		MeteorParser.arithmeticExpression_return retval = new MeteorParser.arithmeticExpression_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token s=null;
		ParserRuleReturnScope e1 =null;
		ParserRuleReturnScope e2 =null;

		EvaluationExpression s_tree=null;
		RewriteRuleTokenStream stream_44=new RewriteRuleTokenStream(adaptor,"token 44");
		RewriteRuleTokenStream stream_41=new RewriteRuleTokenStream(adaptor,"token 41");
		RewriteRuleSubtreeStream stream_multiplicationExpression=new RewriteRuleSubtreeStream(adaptor,"rule multiplicationExpression");

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:136:2: (e1= multiplicationExpression ( (s= '+' |s= '-' ) e2= multiplicationExpression )? -> { s != null }? ^( EXPRESSION[\"ArithmeticExpression\"] $e1 $e2) -> $e1)
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:136:4: e1= multiplicationExpression ( (s= '+' |s= '-' ) e2= multiplicationExpression )?
			{
			pushFollow(FOLLOW_multiplicationExpression_in_arithmeticExpression745);
			e1=multiplicationExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_multiplicationExpression.add(e1.getTree());
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:136:32: ( (s= '+' |s= '-' ) e2= multiplicationExpression )?
			int alt18=2;
			int LA18_0 = input.LA(1);
			if ( (LA18_0==41||LA18_0==44) ) {
				alt18=1;
			}
			switch (alt18) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:136:33: (s= '+' |s= '-' ) e2= multiplicationExpression
					{
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:136:33: (s= '+' |s= '-' )
					int alt17=2;
					int LA17_0 = input.LA(1);
					if ( (LA17_0==41) ) {
						alt17=1;
					}
					else if ( (LA17_0==44) ) {
						alt17=2;
					}

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

					switch (alt17) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:136:34: s= '+'
							{
							s=(Token)match(input,41,FOLLOW_41_in_arithmeticExpression751); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_41.add(s);

							}
							break;
						case 2 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:136:42: s= '-'
							{
							s=(Token)match(input,44,FOLLOW_44_in_arithmeticExpression757); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_44.add(s);

							}
							break;

					}

					pushFollow(FOLLOW_multiplicationExpression_in_arithmeticExpression762);
					e2=multiplicationExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_multiplicationExpression.add(e2.getTree());
					}
					break;

			}

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

			root_0 = (EvaluationExpression)adaptor.nil();
			// 137:2: -> { s != null }? ^( EXPRESSION[\"ArithmeticExpression\"] $e1 $e2)
			if ( s != null ) {
				// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:137:21: ^( EXPRESSION[\"ArithmeticExpression\"] $e1 $e2)
				{
				EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
				root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "ArithmeticExpression"), root_1);
				adaptor.addChild(root_1, stream_e1.nextTree());
				adaptor.addChild(root_1,  s.getText().equals("+") ? ArithmeticExpression.ArithmeticOperator.ADDITION : ArithmeticExpression.ArithmeticOperator.SUBTRACTION);
				adaptor.addChild(root_1, stream_e2.nextTree());
				adaptor.addChild(root_0, root_1);
				}

			}

			else // 139:2: -> $e1
			{
				adaptor.addChild(root_0, stream_e1.nextTree());
			}


			retval.tree = root_0;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class multiplicationExpression_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "multiplicationExpression"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:141:1: multiplicationExpression : e1= preincrementExpression ( (s= '*' |s= SLASH ) e2= preincrementExpression )? -> { s != null }? ^( EXPRESSION[\"ArithmeticExpression\"] $e1 $e2) -> $e1;
	public final MeteorParser.multiplicationExpression_return multiplicationExpression() throws RecognitionException {
		MeteorParser.multiplicationExpression_return retval = new MeteorParser.multiplicationExpression_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token s=null;
		ParserRuleReturnScope e1 =null;
		ParserRuleReturnScope e2 =null;

		EvaluationExpression s_tree=null;
		RewriteRuleTokenStream stream_STAR=new RewriteRuleTokenStream(adaptor,"token STAR");
		RewriteRuleTokenStream stream_SLASH=new RewriteRuleTokenStream(adaptor,"token SLASH");
		RewriteRuleSubtreeStream stream_preincrementExpression=new RewriteRuleSubtreeStream(adaptor,"rule preincrementExpression");

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:142:2: (e1= preincrementExpression ( (s= '*' |s= SLASH ) e2= preincrementExpression )? -> { s != null }? ^( EXPRESSION[\"ArithmeticExpression\"] $e1 $e2) -> $e1)
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:142:4: e1= preincrementExpression ( (s= '*' |s= SLASH ) e2= preincrementExpression )?
			{
			pushFollow(FOLLOW_preincrementExpression_in_multiplicationExpression805);
			e1=preincrementExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_preincrementExpression.add(e1.getTree());
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:142:30: ( (s= '*' |s= SLASH ) e2= preincrementExpression )?
			int alt20=2;
			int LA20_0 = input.LA(1);
			if ( ((LA20_0 >= SLASH && LA20_0 <= STAR)) ) {
				alt20=1;
			}
			switch (alt20) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:142:31: (s= '*' |s= SLASH ) e2= preincrementExpression
					{
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:142:31: (s= '*' |s= SLASH )
					int alt19=2;
					int LA19_0 = input.LA(1);
					if ( (LA19_0==STAR) ) {
						alt19=1;
					}
					else if ( (LA19_0==SLASH) ) {
						alt19=2;
					}

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

					switch (alt19) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:142:32: s= '*'
							{
							s=(Token)match(input,STAR,FOLLOW_STAR_in_multiplicationExpression811); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_STAR.add(s);

							}
							break;
						case 2 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:142:40: s= SLASH
							{
							s=(Token)match(input,SLASH,FOLLOW_SLASH_in_multiplicationExpression817); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_SLASH.add(s);

							}
							break;

					}

					pushFollow(FOLLOW_preincrementExpression_in_multiplicationExpression822);
					e2=preincrementExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_preincrementExpression.add(e2.getTree());
					}
					break;

			}

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

			root_0 = (EvaluationExpression)adaptor.nil();
			// 143:2: -> { s != null }? ^( EXPRESSION[\"ArithmeticExpression\"] $e1 $e2)
			if ( s != null ) {
				// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:143:21: ^( EXPRESSION[\"ArithmeticExpression\"] $e1 $e2)
				{
				EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
				root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "ArithmeticExpression"), root_1);
				adaptor.addChild(root_1, stream_e1.nextTree());
				adaptor.addChild(root_1,  s.getText().equals("*") ? ArithmeticExpression.ArithmeticOperator.MULTIPLICATION : ArithmeticExpression.ArithmeticOperator.DIVISION);
				adaptor.addChild(root_1, stream_e2.nextTree());
				adaptor.addChild(root_0, root_1);
				}

			}

			else // 145:2: -> $e1
			{
				adaptor.addChild(root_0, stream_e1.nextTree());
			}


			retval.tree = root_0;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class preincrementExpression_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "preincrementExpression"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:147:1: preincrementExpression : ( '++' preincrementExpression | '--' preincrementExpression | unaryExpression );
	public final MeteorParser.preincrementExpression_return preincrementExpression() throws RecognitionException {
		MeteorParser.preincrementExpression_return retval = new MeteorParser.preincrementExpression_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token string_literal33=null;
		Token string_literal35=null;
		ParserRuleReturnScope preincrementExpression34 =null;
		ParserRuleReturnScope preincrementExpression36 =null;
		ParserRuleReturnScope unaryExpression37 =null;

		EvaluationExpression string_literal33_tree=null;
		EvaluationExpression string_literal35_tree=null;

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:148:2: ( '++' preincrementExpression | '--' preincrementExpression | unaryExpression )
			int alt21=3;
			switch ( input.LA(1) ) {
			case 42:
				{
				alt21=1;
				}
				break;
			case 45:
				{
				alt21=2;
				}
				break;
			case DECIMAL:
			case FN:
			case ID:
			case INTEGER:
			case STRING:
			case UINT:
			case VAR:
			case 35:
			case 38:
			case 39:
			case 57:
			case 59:
			case 60:
			case 62:
			case 65:
			case 68:
				{
				alt21=3;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 21, 0, input);
				throw nvae;
			}
			switch (alt21) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:148:4: '++' preincrementExpression
					{
					root_0 = (EvaluationExpression)adaptor.nil();


					string_literal33=(Token)match(input,42,FOLLOW_42_in_preincrementExpression863); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					string_literal33_tree = (EvaluationExpression)adaptor.create(string_literal33);
					adaptor.addChild(root_0, string_literal33_tree);
					}

					pushFollow(FOLLOW_preincrementExpression_in_preincrementExpression865);
					preincrementExpression34=preincrementExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, preincrementExpression34.getTree());

					}
					break;
				case 2 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:149:4: '--' preincrementExpression
					{
					root_0 = (EvaluationExpression)adaptor.nil();


					string_literal35=(Token)match(input,45,FOLLOW_45_in_preincrementExpression870); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					string_literal35_tree = (EvaluationExpression)adaptor.create(string_literal35);
					adaptor.addChild(root_0, string_literal35_tree);
					}

					pushFollow(FOLLOW_preincrementExpression_in_preincrementExpression872);
					preincrementExpression36=preincrementExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, preincrementExpression36.getTree());

					}
					break;
				case 3 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:150:4: unaryExpression
					{
					root_0 = (EvaluationExpression)adaptor.nil();


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

					}
					break;

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


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


	// $ANTLR start "unaryExpression"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:152:1: unaryExpression : ( '!' | '~' )? castExpression ;
	public final MeteorParser.unaryExpression_return unaryExpression() throws RecognitionException {
		MeteorParser.unaryExpression_return retval = new MeteorParser.unaryExpression_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token set38=null;
		ParserRuleReturnScope castExpression39 =null;

		EvaluationExpression set38_tree=null;

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:153:2: ( ( '!' | '~' )? castExpression )
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:153:4: ( '!' | '~' )? castExpression
			{
			root_0 = (EvaluationExpression)adaptor.nil();


			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:153:4: ( '!' | '~' )?
			int alt22=2;
			int LA22_0 = input.LA(1);
			if ( (LA22_0==35||LA22_0==68) ) {
				alt22=1;
			}
			switch (alt22) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:
					{
					set38=input.LT(1);
					if ( input.LA(1)==35||input.LA(1)==68 ) {
						input.consume();
						if ( state.backtracking==0 ) adaptor.addChild(root_0, (EvaluationExpression)adaptor.create(set38));
						state.errorRecovery=false;
						state.failed=false;
					}
					else {
						if (state.backtracking>0) {state.failed=true; return retval;}
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					}
					break;

			}

			pushFollow(FOLLOW_castExpression_in_unaryExpression896);
			castExpression39=castExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) adaptor.addChild(root_0, castExpression39.getTree());

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


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


	// $ANTLR start "castExpression"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:159:1: castExpression : ( ( '(' ID ')' )=> '(' type= ID ')' expr= generalPathExpression ->|expr= generalPathExpression ({...}? ID type= ID )? ->);
	public final MeteorParser.castExpression_return castExpression() throws RecognitionException {
		MeteorParser.castExpression_return retval = new MeteorParser.castExpression_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token type=null;
		Token char_literal40=null;
		Token char_literal41=null;
		Token ID42=null;
		ParserRuleReturnScope expr =null;

		EvaluationExpression type_tree=null;
		EvaluationExpression char_literal40_tree=null;
		EvaluationExpression char_literal41_tree=null;
		EvaluationExpression ID42_tree=null;
		RewriteRuleTokenStream stream_40=new RewriteRuleTokenStream(adaptor,"token 40");
		RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
		RewriteRuleTokenStream stream_39=new RewriteRuleTokenStream(adaptor,"token 39");
		RewriteRuleSubtreeStream stream_generalPathExpression=new RewriteRuleSubtreeStream(adaptor,"rule generalPathExpression");

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:160:2: ( ( '(' ID ')' )=> '(' type= ID ')' expr= generalPathExpression ->|expr= generalPathExpression ({...}? ID type= ID )? ->)
			int alt24=2;
			int LA24_0 = input.LA(1);
			if ( (LA24_0==39) ) {
				int LA24_1 = input.LA(2);
				if ( (synpred4_Meteor()) ) {
					alt24=1;
				}
				else if ( (true) ) {
					alt24=2;
				}

			}
			else if ( (LA24_0==DECIMAL||LA24_0==FN||LA24_0==ID||LA24_0==INTEGER||(LA24_0 >= STRING && LA24_0 <= UINT)||LA24_0==VAR||LA24_0==38||LA24_0==57||(LA24_0 >= 59 && LA24_0 <= 60)||LA24_0==62||LA24_0==65) ) {
				alt24=2;
			}

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

			switch (alt24) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:160:4: ( '(' ID ')' )=> '(' type= ID ')' expr= generalPathExpression
					{
					char_literal40=(Token)match(input,39,FOLLOW_39_in_castExpression916); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_39.add(char_literal40);

					type=(Token)match(input,ID,FOLLOW_ID_in_castExpression920); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ID.add(type);

					char_literal41=(Token)match(input,40,FOLLOW_40_in_castExpression922); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_40.add(char_literal41);

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

					root_0 = (EvaluationExpression)adaptor.nil();
					// 161:3: ->
					{
						adaptor.addChild(root_0,  coerce((type!=null?type.getText():null), (expr!=null?((EvaluationExpression)expr.getTree()):null)) );
					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:162:4: expr= generalPathExpression ({...}? ID type= ID )?
					{
					pushFollow(FOLLOW_generalPathExpression_in_castExpression939);
					expr=generalPathExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_generalPathExpression.add(expr.getTree());
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:162:31: ({...}? ID type= ID )?
					int alt23=2;
					int LA23_0 = input.LA(1);
					if ( (LA23_0==ID) ) {
						int LA23_1 = input.LA(2);
						if ( (LA23_1==ID) ) {
							int LA23_3 = input.LA(3);
							if ( ((input.LT(1).getText().equals("as"))) ) {
								alt23=1;
							}
						}
					}
					switch (alt23) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:162:32: {...}? ID type= ID
							{
							if ( !((input.LT(1).getText().equals("as"))) ) {
								if (state.backtracking>0) {state.failed=true; return retval;}
								throw new FailedPredicateException(input, "castExpression", "input.LT(1).getText().equals(\"as\")");
							}
							ID42=(Token)match(input,ID,FOLLOW_ID_in_castExpression944); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_ID.add(ID42);

							type=(Token)match(input,ID,FOLLOW_ID_in_castExpression948); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_ID.add(type);

							}
							break;

					}

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

					root_0 = (EvaluationExpression)adaptor.nil();
					// 163:2: ->
					{
						adaptor.addChild(root_0,  type == null ? (expr!=null?((EvaluationExpression)expr.getTree()):null) : coerce((type!=null?type.getText():null), (expr!=null?((EvaluationExpression)expr.getTree()):null)));
					}


					retval.tree = root_0;
					}

					}
					break;

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class generalPathExpression_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "generalPathExpression"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:165:1: generalPathExpression : value= valueExpression ( ( pathExpression[EvaluationExpression.VALUE] )=>path= pathExpression[$value.tree] -> $path| -> $value) ;
	public final MeteorParser.generalPathExpression_return generalPathExpression() throws RecognitionException {
		MeteorParser.generalPathExpression_return retval = new MeteorParser.generalPathExpression_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		ParserRuleReturnScope value =null;
		ParserRuleReturnScope path =null;

		RewriteRuleSubtreeStream stream_valueExpression=new RewriteRuleSubtreeStream(adaptor,"rule valueExpression");
		RewriteRuleSubtreeStream stream_pathExpression=new RewriteRuleSubtreeStream(adaptor,"rule pathExpression");

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:166:2: (value= valueExpression ( ( pathExpression[EvaluationExpression.VALUE] )=>path= pathExpression[$value.tree] -> $path| -> $value) )
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:166:4: value= valueExpression ( ( pathExpression[EvaluationExpression.VALUE] )=>path= pathExpression[$value.tree] -> $path| -> $value)
			{
			pushFollow(FOLLOW_valueExpression_in_generalPathExpression967);
			value=valueExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_valueExpression.add(value.getTree());
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:167:4: ( ( pathExpression[EvaluationExpression.VALUE] )=>path= pathExpression[$value.tree] -> $path| -> $value)
			int alt25=2;
			int LA25_0 = input.LA(1);
			if ( (LA25_0==56) && (synpred5_Meteor())) {
				alt25=1;
			}
			else if ( (LA25_0==46) && (synpred5_Meteor())) {
				alt25=1;
			}
			else if ( (LA25_0==57) && (synpred5_Meteor())) {
				alt25=1;
			}
			else if ( (LA25_0==EOF||LA25_0==AND||(LA25_0 >= ID && LA25_0 <= IN)||LA25_0==NOT||LA25_0==OR||(LA25_0 >= SLASH && LA25_0 <= STAR)||(LA25_0 >= 36 && LA25_0 <= 37)||(LA25_0 >= 40 && LA25_0 <= 41)||(LA25_0 >= 43 && LA25_0 <= 44)||(LA25_0 >= 47 && LA25_0 <= 50)||(LA25_0 >= 52 && LA25_0 <= 55)||LA25_0==58||(LA25_0 >= 66 && LA25_0 <= 67)) ) {
				alt25=2;
			}

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

			switch (alt25) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:167:5: ( pathExpression[EvaluationExpression.VALUE] )=>path= pathExpression[$value.tree]
					{
					pushFollow(FOLLOW_pathExpression_in_generalPathExpression982);
					path=pathExpression((value!=null?((EvaluationExpression)value.getTree()):null));
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_pathExpression.add(path.getTree());
					// AST REWRITE
					// elements: path
					// token labels: 
					// rule labels: retval, path
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
					RewriteRuleSubtreeStream stream_path=new RewriteRuleSubtreeStream(adaptor,"rule path",path!=null?path.getTree():null);

					root_0 = (EvaluationExpression)adaptor.nil();
					// 167:85: -> $path
					{
						adaptor.addChild(root_0, stream_path.nextTree());
					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:168:7: 
					{
					// AST REWRITE
					// elements: value
					// token labels: 
					// rule labels: retval, value
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
					RewriteRuleSubtreeStream stream_value=new RewriteRuleSubtreeStream(adaptor,"rule value",value!=null?value.getTree():null);

					root_0 = (EvaluationExpression)adaptor.nil();
					// 168:7: -> $value
					{
						adaptor.addChild(root_0, stream_value.nextTree());
					}


					retval.tree = root_0;
					}

					}
					break;

			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class contextAwarePathExpression_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "contextAwarePathExpression"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:170:1: contextAwarePathExpression[EvaluationExpression context] : pathExpression[context] ;
	public final MeteorParser.contextAwarePathExpression_return contextAwarePathExpression(EvaluationExpression context) throws RecognitionException {
		MeteorParser.contextAwarePathExpression_return retval = new MeteorParser.contextAwarePathExpression_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		ParserRuleReturnScope pathExpression43 =null;


		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:171:3: ( pathExpression[context] )
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:171:5: pathExpression[context]
			{
			root_0 = (EvaluationExpression)adaptor.nil();


			pushFollow(FOLLOW_pathExpression_in_contextAwarePathExpression1011);
			pathExpression43=pathExpression(context);
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpression43.getTree());

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class pathExpression_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "pathExpression"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:173:1: pathExpression[EvaluationExpression inExp] : ( ( '?.' ID '(' )=> '?.' call= methodCall[inExp] ( ( pathSegment )=>path= pathExpression[new TernaryExpression(new NotNullOrMissingBooleanExpression().withInputExpression(inExp), $call.tree)] -> $path| -> ^( EXPRESSION[\"TernaryExpression\"] $call) ) | ( '.' ID '(' )=> '.' call= methodCall[inExp] ( ( pathSegment )=>path= pathExpression[$call.tree] -> $path| -> $call) |seg= pathSegment ( ( pathSegment )=>path= pathExpression[$seg.tree] -> $path| -> $seg) );
	public final MeteorParser.pathExpression_return pathExpression(EvaluationExpression inExp) throws RecognitionException {
		MeteorParser.pathExpression_return retval = new MeteorParser.pathExpression_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token string_literal44=null;
		Token char_literal45=null;
		ParserRuleReturnScope call =null;
		ParserRuleReturnScope path =null;
		ParserRuleReturnScope seg =null;

		EvaluationExpression string_literal44_tree=null;
		EvaluationExpression char_literal45_tree=null;
		RewriteRuleTokenStream stream_56=new RewriteRuleTokenStream(adaptor,"token 56");
		RewriteRuleTokenStream stream_46=new RewriteRuleTokenStream(adaptor,"token 46");
		RewriteRuleSubtreeStream stream_pathSegment=new RewriteRuleSubtreeStream(adaptor,"rule pathSegment");
		RewriteRuleSubtreeStream stream_methodCall=new RewriteRuleSubtreeStream(adaptor,"rule methodCall");
		RewriteRuleSubtreeStream stream_pathExpression=new RewriteRuleSubtreeStream(adaptor,"rule pathExpression");

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:174:3: ( ( '?.' ID '(' )=> '?.' call= methodCall[inExp] ( ( pathSegment )=>path= pathExpression[new TernaryExpression(new NotNullOrMissingBooleanExpression().withInputExpression(inExp), $call.tree)] -> $path| -> ^( EXPRESSION[\"TernaryExpression\"] $call) ) | ( '.' ID '(' )=> '.' call= methodCall[inExp] ( ( pathSegment )=>path= pathExpression[$call.tree] -> $path| -> $call) |seg= pathSegment ( ( pathSegment )=>path= pathExpression[$seg.tree] -> $path| -> $seg) )
			int alt29=3;
			switch ( input.LA(1) ) {
			case 56:
				{
				int LA29_1 = input.LA(2);
				if ( (synpred6_Meteor()) ) {
					alt29=1;
				}
				else if ( (true) ) {
					alt29=3;
				}

				}
				break;
			case 46:
				{
				int LA29_2 = input.LA(2);
				if ( (synpred8_Meteor()) ) {
					alt29=2;
				}
				else if ( (true) ) {
					alt29=3;
				}

				}
				break;
			case 57:
				{
				alt29=3;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 29, 0, input);
				throw nvae;
			}
			switch (alt29) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:175:5: ( '?.' ID '(' )=> '?.' call= methodCall[inExp] ( ( pathSegment )=>path= pathExpression[new TernaryExpression(new NotNullOrMissingBooleanExpression().withInputExpression(inExp), $call.tree)] -> $path| -> ^( EXPRESSION[\"TernaryExpression\"] $call) )
					{
					string_literal44=(Token)match(input,56,FOLLOW_56_in_pathExpression1039); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_56.add(string_literal44);

					pushFollow(FOLLOW_methodCall_in_pathExpression1043);
					call=methodCall(inExp);
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_methodCall.add(call.getTree());
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:176:7: ( ( pathSegment )=>path= pathExpression[new TernaryExpression(new NotNullOrMissingBooleanExpression().withInputExpression(inExp), $call.tree)] -> $path| -> ^( EXPRESSION[\"TernaryExpression\"] $call) )
					int alt26=2;
					int LA26_0 = input.LA(1);
					if ( (LA26_0==56) && (synpred7_Meteor())) {
						alt26=1;
					}
					else if ( (LA26_0==46) && (synpred7_Meteor())) {
						alt26=1;
					}
					else if ( (LA26_0==57) && (synpred7_Meteor())) {
						alt26=1;
					}
					else if ( (LA26_0==EOF||LA26_0==AND||(LA26_0 >= ID && LA26_0 <= IN)||LA26_0==NOT||LA26_0==OR||(LA26_0 >= SLASH && LA26_0 <= STAR)||(LA26_0 >= 36 && LA26_0 <= 37)||(LA26_0 >= 40 && LA26_0 <= 41)||(LA26_0 >= 43 && LA26_0 <= 44)||(LA26_0 >= 47 && LA26_0 <= 50)||(LA26_0 >= 52 && LA26_0 <= 55)||LA26_0==58||(LA26_0 >= 66 && LA26_0 <= 67)) ) {
						alt26=2;
					}

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

					switch (alt26) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:176:8: ( pathSegment )=>path= pathExpression[new TernaryExpression(new NotNullOrMissingBooleanExpression().withInputExpression(inExp), $call.tree)]
							{
							pushFollow(FOLLOW_pathExpression_in_pathExpression1060);
							path=pathExpression(new TernaryExpression(new NotNullOrMissingBooleanExpression().withInputExpression(inExp), (call!=null?((EvaluationExpression)call.getTree()):null)));
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_pathExpression.add(path.getTree());
							// AST REWRITE
							// elements: path
							// token labels: 
							// rule labels: retval, path
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
							RewriteRuleSubtreeStream stream_path=new RewriteRuleSubtreeStream(adaptor,"rule path",path!=null?path.getTree():null);

							root_0 = (EvaluationExpression)adaptor.nil();
							// 176:146: -> $path
							{
								adaptor.addChild(root_0, stream_path.nextTree());
							}


							retval.tree = root_0;
							}

							}
							break;
						case 2 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:177:8: 
							{
							// AST REWRITE
							// elements: call
							// token labels: 
							// rule labels: call, retval
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_call=new RewriteRuleSubtreeStream(adaptor,"rule call",call!=null?call.getTree():null);
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

							root_0 = (EvaluationExpression)adaptor.nil();
							// 177:8: -> ^( EXPRESSION[\"TernaryExpression\"] $call)
							{
								// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:177:11: ^( EXPRESSION[\"TernaryExpression\"] $call)
								{
								EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
								root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "TernaryExpression"), root_1);
								adaptor.addChild(root_1, new NotNullOrMissingBooleanExpression().withInputExpression(inExp));
								adaptor.addChild(root_1, stream_call.nextTree());
								adaptor.addChild(root_1, inExp);
								adaptor.addChild(root_0, root_1);
								}

							}


							retval.tree = root_0;
							}

							}
							break;

					}

					}
					break;
				case 2 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:179:5: ( '.' ID '(' )=> '.' call= methodCall[inExp] ( ( pathSegment )=>path= pathExpression[$call.tree] -> $path| -> $call)
					{
					char_literal45=(Token)match(input,46,FOLLOW_46_in_pathExpression1110); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_46.add(char_literal45);

					pushFollow(FOLLOW_methodCall_in_pathExpression1114);
					call=methodCall(inExp);
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_methodCall.add(call.getTree());
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:180:7: ( ( pathSegment )=>path= pathExpression[$call.tree] -> $path| -> $call)
					int alt27=2;
					int LA27_0 = input.LA(1);
					if ( (LA27_0==56) && (synpred9_Meteor())) {
						alt27=1;
					}
					else if ( (LA27_0==46) && (synpred9_Meteor())) {
						alt27=1;
					}
					else if ( (LA27_0==57) && (synpred9_Meteor())) {
						alt27=1;
					}
					else if ( (LA27_0==EOF||LA27_0==AND||(LA27_0 >= ID && LA27_0 <= IN)||LA27_0==NOT||LA27_0==OR||(LA27_0 >= SLASH && LA27_0 <= STAR)||(LA27_0 >= 36 && LA27_0 <= 37)||(LA27_0 >= 40 && LA27_0 <= 41)||(LA27_0 >= 43 && LA27_0 <= 44)||(LA27_0 >= 47 && LA27_0 <= 50)||(LA27_0 >= 52 && LA27_0 <= 55)||LA27_0==58||(LA27_0 >= 66 && LA27_0 <= 67)) ) {
						alt27=2;
					}

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

					switch (alt27) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:180:8: ( pathSegment )=>path= pathExpression[$call.tree]
							{
							pushFollow(FOLLOW_pathExpression_in_pathExpression1131);
							path=pathExpression((call!=null?((EvaluationExpression)call.getTree()):null));
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_pathExpression.add(path.getTree());
							// AST REWRITE
							// elements: path
							// token labels: 
							// rule labels: retval, path
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
							RewriteRuleSubtreeStream stream_path=new RewriteRuleSubtreeStream(adaptor,"rule path",path!=null?path.getTree():null);

							root_0 = (EvaluationExpression)adaptor.nil();
							// 180:55: -> $path
							{
								adaptor.addChild(root_0, stream_path.nextTree());
							}


							retval.tree = root_0;
							}

							}
							break;
						case 2 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:180:66: 
							{
							// AST REWRITE
							// elements: call
							// token labels: 
							// rule labels: call, retval
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_call=new RewriteRuleSubtreeStream(adaptor,"rule call",call!=null?call.getTree():null);
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

							root_0 = (EvaluationExpression)adaptor.nil();
							// 180:66: -> $call
							{
								adaptor.addChild(root_0, stream_call.nextTree());
							}


							retval.tree = root_0;
							}

							}
							break;

					}

					}
					break;
				case 3 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:182:5: seg= pathSegment ( ( pathSegment )=>path= pathExpression[$seg.tree] -> $path| -> $seg)
					{
					pushFollow(FOLLOW_pathSegment_in_pathExpression1157);
					seg=pathSegment();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_pathSegment.add(seg.getTree());
					if ( state.backtracking==0 ) { ((PathSegmentExpression) seg.getTree()).setInputExpression(inExp); }
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:183:5: ( ( pathSegment )=>path= pathExpression[$seg.tree] -> $path| -> $seg)
					int alt28=2;
					int LA28_0 = input.LA(1);
					if ( (LA28_0==56) && (synpred10_Meteor())) {
						alt28=1;
					}
					else if ( (LA28_0==46) && (synpred10_Meteor())) {
						alt28=1;
					}
					else if ( (LA28_0==57) && (synpred10_Meteor())) {
						alt28=1;
					}
					else if ( (LA28_0==EOF||LA28_0==AND||(LA28_0 >= ID && LA28_0 <= IN)||LA28_0==NOT||LA28_0==OR||(LA28_0 >= SLASH && LA28_0 <= STAR)||(LA28_0 >= 36 && LA28_0 <= 37)||(LA28_0 >= 40 && LA28_0 <= 41)||(LA28_0 >= 43 && LA28_0 <= 44)||(LA28_0 >= 47 && LA28_0 <= 50)||(LA28_0 >= 52 && LA28_0 <= 55)||LA28_0==58||(LA28_0 >= 66 && LA28_0 <= 67)) ) {
						alt28=2;
					}

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

					switch (alt28) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:183:6: ( pathSegment )=>path= pathExpression[$seg.tree]
							{
							pushFollow(FOLLOW_pathExpression_in_pathExpression1173);
							path=pathExpression((seg!=null?((EvaluationExpression)seg.getTree()):null));
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_pathExpression.add(path.getTree());
							// AST REWRITE
							// elements: path
							// token labels: 
							// rule labels: retval, path
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
							RewriteRuleSubtreeStream stream_path=new RewriteRuleSubtreeStream(adaptor,"rule path",path!=null?path.getTree():null);

							root_0 = (EvaluationExpression)adaptor.nil();
							// 183:53: -> $path
							{
								adaptor.addChild(root_0, stream_path.nextTree());
							}


							retval.tree = root_0;
							}

							}
							break;
						case 2 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:183:64: 
							{
							// AST REWRITE
							// elements: seg
							// token labels: 
							// rule labels: retval, seg
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
							RewriteRuleSubtreeStream stream_seg=new RewriteRuleSubtreeStream(adaptor,"rule seg",seg!=null?seg.getTree():null);

							root_0 = (EvaluationExpression)adaptor.nil();
							// 183:64: -> $seg
							{
								adaptor.addChild(root_0, stream_seg.nextTree());
							}


							retval.tree = root_0;
							}

							}
							break;

					}

					}
					break;

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (NoViableAltException re) {
			 explainUsage("in a path expression only .field, ?.field, [...], and .method(...) are allowed", re); 
		}

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


	public static class pathSegment_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "pathSegment"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:186:1: pathSegment : ( ( '?.' )=> '?.' field= ID -> ^( EXPRESSION[\"TernaryExpression\"] ) | ( '.' )=> '.' field= ID -> ^( EXPRESSION[\"ObjectAccess\"] ) | ( '[' )=> arrayAccess );
	public final MeteorParser.pathSegment_return pathSegment() throws RecognitionException {
		MeteorParser.pathSegment_return retval = new MeteorParser.pathSegment_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token field=null;
		Token string_literal46=null;
		Token char_literal47=null;
		ParserRuleReturnScope arrayAccess48 =null;

		EvaluationExpression field_tree=null;
		EvaluationExpression string_literal46_tree=null;
		EvaluationExpression char_literal47_tree=null;
		RewriteRuleTokenStream stream_56=new RewriteRuleTokenStream(adaptor,"token 56");
		RewriteRuleTokenStream stream_46=new RewriteRuleTokenStream(adaptor,"token 46");
		RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");

		  paraphrase.push("a path expression"); 
		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:189:3: ( ( '?.' )=> '?.' field= ID -> ^( EXPRESSION[\"TernaryExpression\"] ) | ( '.' )=> '.' field= ID -> ^( EXPRESSION[\"ObjectAccess\"] ) | ( '[' )=> arrayAccess )
			int alt30=3;
			int LA30_0 = input.LA(1);
			if ( (LA30_0==56) && (synpred11_Meteor())) {
				alt30=1;
			}
			else if ( (LA30_0==46) && (synpred12_Meteor())) {
				alt30=2;
			}
			else if ( (LA30_0==57) && (synpred13_Meteor())) {
				alt30=3;
			}

			switch (alt30) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:190:5: ( '?.' )=> '?.' field= ID
					{
					string_literal46=(Token)match(input,56,FOLLOW_56_in_pathSegment1225); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_56.add(string_literal46);

					field=(Token)match(input,ID,FOLLOW_ID_in_pathSegment1229); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ID.add(field);

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

					root_0 = (EvaluationExpression)adaptor.nil();
					// 190:28: -> ^( EXPRESSION[\"TernaryExpression\"] )
					{
						// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:190:31: ^( EXPRESSION[\"TernaryExpression\"] )
						{
						EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
						root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "TernaryExpression"), root_1);
						adaptor.addChild(root_1, new NotNullOrMissingBooleanExpression());
						adaptor.addChild(root_1, new ObjectAccess((field!=null?field.getText():null)));
						adaptor.addChild(root_1, EvaluationExpression.VALUE);
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:191:5: ( '.' )=> '.' field= ID
					{
					char_literal47=(Token)match(input,46,FOLLOW_46_in_pathSegment1257); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_46.add(char_literal47);

					field=(Token)match(input,ID,FOLLOW_ID_in_pathSegment1261); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ID.add(field);

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

					root_0 = (EvaluationExpression)adaptor.nil();
					// 191:27: -> ^( EXPRESSION[\"ObjectAccess\"] )
					{
						// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:191:30: ^( EXPRESSION[\"ObjectAccess\"] )
						{
						EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
						root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "ObjectAccess"), root_1);
						adaptor.addChild(root_1, (field!=null?field.getText():null));
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 3 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:192:5: ( '[' )=> arrayAccess
					{
					root_0 = (EvaluationExpression)adaptor.nil();


					pushFollow(FOLLOW_arrayAccess_in_pathSegment1286);
					arrayAccess48=arrayAccess();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, arrayAccess48.getTree());

					}
					break;

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
			if ( state.backtracking==0 ) { paraphrase.pop(); }
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class arrayAccess_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "arrayAccess"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:194:1: arrayAccess : ( '[' STAR ']' ( ( '.' methodCall[null] )=> '.' call= methodCall[EvaluationExpression.VALUE] -> ^( EXPRESSION[\"ArrayProjection\"] $call) |path= pathSegment -> ^( EXPRESSION[\"ArrayProjection\"] $path) ) | '[' (pos= INTEGER |pos= UINT ) ']' -> ^( EXPRESSION[\"ArrayAccess\"] ) | '[' (start= INTEGER |start= UINT ) ':' (end= INTEGER |end= UINT ) ']' -> ^( EXPRESSION[\"ArrayAccess\"] ) );
	public final MeteorParser.arrayAccess_return arrayAccess() throws RecognitionException {
		MeteorParser.arrayAccess_return retval = new MeteorParser.arrayAccess_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token pos=null;
		Token start=null;
		Token end=null;
		Token char_literal49=null;
		Token STAR50=null;
		Token char_literal51=null;
		Token char_literal52=null;
		Token char_literal53=null;
		Token char_literal54=null;
		Token char_literal55=null;
		Token char_literal56=null;
		Token char_literal57=null;
		ParserRuleReturnScope call =null;
		ParserRuleReturnScope path =null;

		EvaluationExpression pos_tree=null;
		EvaluationExpression start_tree=null;
		EvaluationExpression end_tree=null;
		EvaluationExpression char_literal49_tree=null;
		EvaluationExpression STAR50_tree=null;
		EvaluationExpression char_literal51_tree=null;
		EvaluationExpression char_literal52_tree=null;
		EvaluationExpression char_literal53_tree=null;
		EvaluationExpression char_literal54_tree=null;
		EvaluationExpression char_literal55_tree=null;
		EvaluationExpression char_literal56_tree=null;
		EvaluationExpression char_literal57_tree=null;
		RewriteRuleTokenStream stream_INTEGER=new RewriteRuleTokenStream(adaptor,"token INTEGER");
		RewriteRuleTokenStream stream_58=new RewriteRuleTokenStream(adaptor,"token 58");
		RewriteRuleTokenStream stream_STAR=new RewriteRuleTokenStream(adaptor,"token STAR");
		RewriteRuleTokenStream stream_57=new RewriteRuleTokenStream(adaptor,"token 57");
		RewriteRuleTokenStream stream_47=new RewriteRuleTokenStream(adaptor,"token 47");
		RewriteRuleTokenStream stream_46=new RewriteRuleTokenStream(adaptor,"token 46");
		RewriteRuleTokenStream stream_UINT=new RewriteRuleTokenStream(adaptor,"token UINT");
		RewriteRuleSubtreeStream stream_methodCall=new RewriteRuleSubtreeStream(adaptor,"rule methodCall");
		RewriteRuleSubtreeStream stream_pathSegment=new RewriteRuleSubtreeStream(adaptor,"rule pathSegment");

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:195:3: ( '[' STAR ']' ( ( '.' methodCall[null] )=> '.' call= methodCall[EvaluationExpression.VALUE] -> ^( EXPRESSION[\"ArrayProjection\"] $call) |path= pathSegment -> ^( EXPRESSION[\"ArrayProjection\"] $path) ) | '[' (pos= INTEGER |pos= UINT ) ']' -> ^( EXPRESSION[\"ArrayAccess\"] ) | '[' (start= INTEGER |start= UINT ) ':' (end= INTEGER |end= UINT ) ']' -> ^( EXPRESSION[\"ArrayAccess\"] ) )
			int alt35=3;
			int LA35_0 = input.LA(1);
			if ( (LA35_0==57) ) {
				switch ( input.LA(2) ) {
				case STAR:
					{
					alt35=1;
					}
					break;
				case INTEGER:
					{
					int LA35_3 = input.LA(3);
					if ( (LA35_3==58) ) {
						alt35=2;
					}
					else if ( (LA35_3==47) ) {
						alt35=3;
					}

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

					}
					break;
				case UINT:
					{
					int LA35_4 = input.LA(3);
					if ( (LA35_4==58) ) {
						alt35=2;
					}
					else if ( (LA35_4==47) ) {
						alt35=3;
					}

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

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

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

			switch (alt35) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:195:5: '[' STAR ']' ( ( '.' methodCall[null] )=> '.' call= methodCall[EvaluationExpression.VALUE] -> ^( EXPRESSION[\"ArrayProjection\"] $call) |path= pathSegment -> ^( EXPRESSION[\"ArrayProjection\"] $path) )
					{
					char_literal49=(Token)match(input,57,FOLLOW_57_in_arrayAccess1296); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_57.add(char_literal49);

					STAR50=(Token)match(input,STAR,FOLLOW_STAR_in_arrayAccess1298); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_STAR.add(STAR50);

					char_literal51=(Token)match(input,58,FOLLOW_58_in_arrayAccess1300); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_58.add(char_literal51);

					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:195:18: ( ( '.' methodCall[null] )=> '.' call= methodCall[EvaluationExpression.VALUE] -> ^( EXPRESSION[\"ArrayProjection\"] $call) |path= pathSegment -> ^( EXPRESSION[\"ArrayProjection\"] $path) )
					int alt31=2;
					int LA31_0 = input.LA(1);
					if ( (LA31_0==46) ) {
						int LA31_1 = input.LA(2);
						if ( (synpred14_Meteor()) ) {
							alt31=1;
						}
						else if ( (true) ) {
							alt31=2;
						}

					}
					else if ( ((LA31_0 >= 56 && LA31_0 <= 57)) ) {
						alt31=2;
					}

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

					switch (alt31) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:195:19: ( '.' methodCall[null] )=> '.' call= methodCall[EvaluationExpression.VALUE]
							{
							char_literal52=(Token)match(input,46,FOLLOW_46_in_arrayAccess1311); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_46.add(char_literal52);

							pushFollow(FOLLOW_methodCall_in_arrayAccess1315);
							call=methodCall(EvaluationExpression.VALUE);
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_methodCall.add(call.getTree());
							// AST REWRITE
							// elements: call
							// token labels: 
							// rule labels: call, retval
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_call=new RewriteRuleSubtreeStream(adaptor,"rule call",call!=null?call.getTree():null);
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

							root_0 = (EvaluationExpression)adaptor.nil();
							// 196:4: -> ^( EXPRESSION[\"ArrayProjection\"] $call)
							{
								// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:196:7: ^( EXPRESSION[\"ArrayProjection\"] $call)
								{
								EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
								root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "ArrayProjection"), root_1);
								adaptor.addChild(root_1, stream_call.nextTree());
								adaptor.addChild(root_0, root_1);
								}

							}


							retval.tree = root_0;
							}

							}
							break;
						case 2 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:197:6: path= pathSegment
							{
							pushFollow(FOLLOW_pathSegment_in_arrayAccess1338);
							path=pathSegment();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_pathSegment.add(path.getTree());
							// AST REWRITE
							// elements: path
							// token labels: 
							// rule labels: retval, path
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
							RewriteRuleSubtreeStream stream_path=new RewriteRuleSubtreeStream(adaptor,"rule path",path!=null?path.getTree():null);

							root_0 = (EvaluationExpression)adaptor.nil();
							// 198:4: -> ^( EXPRESSION[\"ArrayProjection\"] $path)
							{
								// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:198:7: ^( EXPRESSION[\"ArrayProjection\"] $path)
								{
								EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
								root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "ArrayProjection"), root_1);
								adaptor.addChild(root_1, stream_path.nextTree());
								adaptor.addChild(root_0, root_1);
								}

							}


							retval.tree = root_0;
							}

							}
							break;

					}

					}
					break;
				case 2 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:199:5: '[' (pos= INTEGER |pos= UINT ) ']'
					{
					char_literal53=(Token)match(input,57,FOLLOW_57_in_arrayAccess1359); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_57.add(char_literal53);

					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:199:9: (pos= INTEGER |pos= UINT )
					int alt32=2;
					int LA32_0 = input.LA(1);
					if ( (LA32_0==INTEGER) ) {
						alt32=1;
					}
					else if ( (LA32_0==UINT) ) {
						alt32=2;
					}

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

					switch (alt32) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:199:10: pos= INTEGER
							{
							pos=(Token)match(input,INTEGER,FOLLOW_INTEGER_in_arrayAccess1364); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_INTEGER.add(pos);

							}
							break;
						case 2 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:199:24: pos= UINT
							{
							pos=(Token)match(input,UINT,FOLLOW_UINT_in_arrayAccess1370); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_UINT.add(pos);

							}
							break;

					}

					char_literal54=(Token)match(input,58,FOLLOW_58_in_arrayAccess1373); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_58.add(char_literal54);

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

					root_0 = (EvaluationExpression)adaptor.nil();
					// 200:3: -> ^( EXPRESSION[\"ArrayAccess\"] )
					{
						// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:200:6: ^( EXPRESSION[\"ArrayAccess\"] )
						{
						EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
						root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "ArrayAccess"), root_1);
						adaptor.addChild(root_1,  Integer.valueOf((pos!=null?pos.getText():null)) );
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 3 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:201:5: '[' (start= INTEGER |start= UINT ) ':' (end= INTEGER |end= UINT ) ']'
					{
					char_literal55=(Token)match(input,57,FOLLOW_57_in_arrayAccess1391); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_57.add(char_literal55);

					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:201:9: (start= INTEGER |start= UINT )
					int alt33=2;
					int LA33_0 = input.LA(1);
					if ( (LA33_0==INTEGER) ) {
						alt33=1;
					}
					else if ( (LA33_0==UINT) ) {
						alt33=2;
					}

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

					switch (alt33) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:201:10: start= INTEGER
							{
							start=(Token)match(input,INTEGER,FOLLOW_INTEGER_in_arrayAccess1396); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_INTEGER.add(start);

							}
							break;
						case 2 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:201:26: start= UINT
							{
							start=(Token)match(input,UINT,FOLLOW_UINT_in_arrayAccess1402); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_UINT.add(start);

							}
							break;

					}

					char_literal56=(Token)match(input,47,FOLLOW_47_in_arrayAccess1405); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_47.add(char_literal56);

					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:201:42: (end= INTEGER |end= UINT )
					int alt34=2;
					int LA34_0 = input.LA(1);
					if ( (LA34_0==INTEGER) ) {
						alt34=1;
					}
					else if ( (LA34_0==UINT) ) {
						alt34=2;
					}

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

					switch (alt34) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:201:43: end= INTEGER
							{
							end=(Token)match(input,INTEGER,FOLLOW_INTEGER_in_arrayAccess1410); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_INTEGER.add(end);

							}
							break;
						case 2 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:201:57: end= UINT
							{
							end=(Token)match(input,UINT,FOLLOW_UINT_in_arrayAccess1416); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_UINT.add(end);

							}
							break;

					}

					char_literal57=(Token)match(input,58,FOLLOW_58_in_arrayAccess1419); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_58.add(char_literal57);

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

					root_0 = (EvaluationExpression)adaptor.nil();
					// 202:3: -> ^( EXPRESSION[\"ArrayAccess\"] )
					{
						// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:202:6: ^( EXPRESSION[\"ArrayAccess\"] )
						{
						EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
						root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "ArrayAccess"), root_1);
						adaptor.addChild(root_1,  Integer.valueOf((start!=null?start.getText():null)) );
						adaptor.addChild(root_1,  Integer.valueOf((end!=null?end.getText():null)) );
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class valueExpression_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "valueExpression"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:204:1: valueExpression : ( ( ID '(' )=> functionCall | functionReference | ( FN )=>func= inlineFunction -> ^( EXPRESSION[\"ConstantExpression\"] ) | parenthesesExpression | literal | VAR ->| ( ( ID ':' )=>packageName= ID ':' )? constant= ID {...}? => ->| arrayCreation | objectCreation );
	public final MeteorParser.valueExpression_return valueExpression() throws RecognitionException {
		MeteorParser.valueExpression_return retval = new MeteorParser.valueExpression_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token packageName=null;
		Token constant=null;
		Token VAR62=null;
		Token char_literal63=null;
		ParserRuleReturnScope func =null;
		ParserRuleReturnScope functionCall58 =null;
		ParserRuleReturnScope functionReference59 =null;
		ParserRuleReturnScope parenthesesExpression60 =null;
		ParserRuleReturnScope literal61 =null;
		ParserRuleReturnScope arrayCreation64 =null;
		ParserRuleReturnScope objectCreation65 =null;

		EvaluationExpression packageName_tree=null;
		EvaluationExpression constant_tree=null;
		EvaluationExpression VAR62_tree=null;
		EvaluationExpression char_literal63_tree=null;
		RewriteRuleTokenStream stream_VAR=new RewriteRuleTokenStream(adaptor,"token VAR");
		RewriteRuleTokenStream stream_47=new RewriteRuleTokenStream(adaptor,"token 47");
		RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
		RewriteRuleSubtreeStream stream_inlineFunction=new RewriteRuleSubtreeStream(adaptor,"rule inlineFunction");

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:205:2: ( ( ID '(' )=> functionCall | functionReference | ( FN )=>func= inlineFunction -> ^( EXPRESSION[\"ConstantExpression\"] ) | parenthesesExpression | literal | VAR ->| ( ( ID ':' )=>packageName= ID ':' )? constant= ID {...}? => ->| arrayCreation | objectCreation )
			int alt37=9;
			int LA37_0 = input.LA(1);
			if ( (LA37_0==ID) ) {
				int LA37_1 = input.LA(2);
				if ( (LA37_1==47) ) {
					int LA37_9 = input.LA(3);
					if ( (synpred15_Meteor()) ) {
						alt37=1;
					}
					else if ( (true) ) {
						alt37=7;
					}

				}
				else if ( (LA37_1==39) && (synpred15_Meteor())) {
					alt37=1;
				}
				else if ( (LA37_1==EOF||LA37_1==AND||(LA37_1 >= ID && LA37_1 <= IN)||LA37_1==NOT||LA37_1==OR||(LA37_1 >= SLASH && LA37_1 <= STAR)||(LA37_1 >= 36 && LA37_1 <= 37)||(LA37_1 >= 40 && LA37_1 <= 41)||(LA37_1 >= 43 && LA37_1 <= 44)||LA37_1==46||(LA37_1 >= 48 && LA37_1 <= 50)||(LA37_1 >= 52 && LA37_1 <= 58)||(LA37_1 >= 66 && LA37_1 <= 67)) ) {
					alt37=7;
				}

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

			}
			else if ( (LA37_0==38) ) {
				alt37=2;
			}
			else if ( (LA37_0==FN) && (synpred16_Meteor())) {
				alt37=3;
			}
			else if ( (LA37_0==39) ) {
				alt37=4;
			}
			else if ( (LA37_0==DECIMAL||LA37_0==INTEGER||(LA37_0 >= STRING && LA37_0 <= UINT)||(LA37_0 >= 59 && LA37_0 <= 60)||LA37_0==62) ) {
				alt37=5;
			}
			else if ( (LA37_0==VAR) ) {
				alt37=6;
			}
			else if ( (LA37_0==57) ) {
				alt37=8;
			}
			else if ( (LA37_0==65) ) {
				alt37=9;
			}

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

			switch (alt37) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:205:4: ( ID '(' )=> functionCall
					{
					root_0 = (EvaluationExpression)adaptor.nil();


					pushFollow(FOLLOW_functionCall_in_valueExpression1451);
					functionCall58=functionCall();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, functionCall58.getTree());

					}
					break;
				case 2 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:206:4: functionReference
					{
					root_0 = (EvaluationExpression)adaptor.nil();


					pushFollow(FOLLOW_functionReference_in_valueExpression1456);
					functionReference59=functionReference();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, functionReference59.getTree());

					}
					break;
				case 3 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:207:5: ( FN )=>func= inlineFunction
					{
					pushFollow(FOLLOW_inlineFunction_in_valueExpression1469);
					func=inlineFunction();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_inlineFunction.add(func.getTree());
					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (EvaluationExpression)adaptor.nil();
					// 207:32: -> ^( EXPRESSION[\"ConstantExpression\"] )
					{
						// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:207:35: ^( EXPRESSION[\"ConstantExpression\"] )
						{
						EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
						root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "ConstantExpression"), root_1);
						adaptor.addChild(root_1,  new FunctionNode((func!=null?((MeteorParser.inlineFunction_return)func).func:null)) );
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 4 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:208:4: parenthesesExpression
					{
					root_0 = (EvaluationExpression)adaptor.nil();


					pushFollow(FOLLOW_parenthesesExpression_in_valueExpression1483);
					parenthesesExpression60=parenthesesExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, parenthesesExpression60.getTree());

					}
					break;
				case 5 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:209:4: literal
					{
					root_0 = (EvaluationExpression)adaptor.nil();


					pushFollow(FOLLOW_literal_in_valueExpression1489);
					literal61=literal();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, literal61.getTree());

					}
					break;
				case 6 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:210:4: VAR
					{
					VAR62=(Token)match(input,VAR,FOLLOW_VAR_in_valueExpression1495); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_VAR.add(VAR62);

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

					root_0 = (EvaluationExpression)adaptor.nil();
					// 210:8: ->
					{
						adaptor.addChild(root_0,  getInputSelection(VAR62) );
					}


					retval.tree = root_0;
					}

					}
					break;
				case 7 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:211:5: ( ( ID ':' )=>packageName= ID ':' )? constant= ID {...}? =>
					{
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:211:5: ( ( ID ':' )=>packageName= ID ':' )?
					int alt36=2;
					int LA36_0 = input.LA(1);
					if ( (LA36_0==ID) ) {
						int LA36_1 = input.LA(2);
						if ( (LA36_1==47) ) {
							int LA36_2 = input.LA(3);
							if ( (synpred17_Meteor()) ) {
								alt36=1;
							}
						}
					}
					switch (alt36) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:211:6: ( ID ':' )=>packageName= ID ':'
							{
							packageName=(Token)match(input,ID,FOLLOW_ID_in_valueExpression1515); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_ID.add(packageName);

							char_literal63=(Token)match(input,47,FOLLOW_47_in_valueExpression1517); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_47.add(char_literal63);

							}
							break;

					}

					constant=(Token)match(input,ID,FOLLOW_ID_in_valueExpression1523); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ID.add(constant);

					if ( !(( getScope((packageName!=null?packageName.getText():null)).getConstantRegistry().get((constant!=null?constant.getText():null)) != null )) ) {
						if (state.backtracking>0) {state.failed=true; return retval;}
						throw new FailedPredicateException(input, "valueExpression", " getScope($packageName.text).getConstantRegistry().get($constant.text) != null ");
					}
					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (EvaluationExpression)adaptor.nil();
					// 212:5: ->
					{
						adaptor.addChild(root_0,  getScope((packageName!=null?packageName.getText():null)).getConstantRegistry().get((constant!=null?constant.getText():null)) );
					}


					retval.tree = root_0;
					}

					}
					break;
				case 8 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:213:4: arrayCreation
					{
					root_0 = (EvaluationExpression)adaptor.nil();


					pushFollow(FOLLOW_arrayCreation_in_valueExpression1543);
					arrayCreation64=arrayCreation();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, arrayCreation64.getTree());

					}
					break;
				case 9 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:214:4: objectCreation
					{
					root_0 = (EvaluationExpression)adaptor.nil();


					pushFollow(FOLLOW_objectCreation_in_valueExpression1549);
					objectCreation65=objectCreation();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, objectCreation65.getTree());

					}
					break;

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class operatorExpression_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "operatorExpression"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:216:1: operatorExpression : op= operator -> ^( EXPRESSION[\"NestedOperatorExpression\"] ) ;
	public final MeteorParser.operatorExpression_return operatorExpression() throws RecognitionException {
		MeteorParser.operatorExpression_return retval = new MeteorParser.operatorExpression_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		ParserRuleReturnScope op =null;

		RewriteRuleSubtreeStream stream_operator=new RewriteRuleSubtreeStream(adaptor,"rule operator");

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:217:2: (op= operator -> ^( EXPRESSION[\"NestedOperatorExpression\"] ) )
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:217:4: op= operator
			{
			pushFollow(FOLLOW_operator_in_operatorExpression1561);
			op=operator();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_operator.add(op.getTree());
			// AST REWRITE
			// elements: 
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (EvaluationExpression)adaptor.nil();
			// 217:16: -> ^( EXPRESSION[\"NestedOperatorExpression\"] )
			{
				// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:217:19: ^( EXPRESSION[\"NestedOperatorExpression\"] )
				{
				EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
				root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "NestedOperatorExpression"), root_1);
				adaptor.addChild(root_1,  (op!=null?((MeteorParser.operator_return)op).op:null) );
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class parenthesesExpression_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "parenthesesExpression"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:219:1: parenthesesExpression : ( '(' expression ')' ) -> expression ;
	public final MeteorParser.parenthesesExpression_return parenthesesExpression() throws RecognitionException {
		MeteorParser.parenthesesExpression_return retval = new MeteorParser.parenthesesExpression_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token char_literal66=null;
		Token char_literal68=null;
		ParserRuleReturnScope expression67 =null;

		EvaluationExpression char_literal66_tree=null;
		EvaluationExpression char_literal68_tree=null;
		RewriteRuleTokenStream stream_40=new RewriteRuleTokenStream(adaptor,"token 40");
		RewriteRuleTokenStream stream_39=new RewriteRuleTokenStream(adaptor,"token 39");
		RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:220:2: ( ( '(' expression ')' ) -> expression )
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:220:4: ( '(' expression ')' )
			{
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:220:4: ( '(' expression ')' )
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:220:5: '(' expression ')'
			{
			char_literal66=(Token)match(input,39,FOLLOW_39_in_parenthesesExpression1580); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_39.add(char_literal66);

			pushFollow(FOLLOW_expression_in_parenthesesExpression1582);
			expression67=expression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_expression.add(expression67.getTree());
			char_literal68=(Token)match(input,40,FOLLOW_40_in_parenthesesExpression1584); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_40.add(char_literal68);

			}

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

			root_0 = (EvaluationExpression)adaptor.nil();
			// 220:25: -> expression
			{
				adaptor.addChild(root_0, stream_expression.nextTree());
			}


			retval.tree = root_0;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class methodCall_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "methodCall"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:222:1: methodCall[EvaluationExpression targetExpr] : (packageName= ID ':' )? name= ID '(' ( (param= expression ) ( ',' (param= expression ) )* )? ')' ->;
	public final MeteorParser.methodCall_return methodCall(EvaluationExpression targetExpr) throws RecognitionException {
		MeteorParser.methodCall_return retval = new MeteorParser.methodCall_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token packageName=null;
		Token name=null;
		Token char_literal69=null;
		Token char_literal70=null;
		Token char_literal71=null;
		Token char_literal72=null;
		ParserRuleReturnScope param =null;

		EvaluationExpression packageName_tree=null;
		EvaluationExpression name_tree=null;
		EvaluationExpression char_literal69_tree=null;
		EvaluationExpression char_literal70_tree=null;
		EvaluationExpression char_literal71_tree=null;
		EvaluationExpression char_literal72_tree=null;
		RewriteRuleTokenStream stream_43=new RewriteRuleTokenStream(adaptor,"token 43");
		RewriteRuleTokenStream stream_47=new RewriteRuleTokenStream(adaptor,"token 47");
		RewriteRuleTokenStream stream_40=new RewriteRuleTokenStream(adaptor,"token 40");
		RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
		RewriteRuleTokenStream stream_39=new RewriteRuleTokenStream(adaptor,"token 39");
		RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");

		 List params = new ArrayList();
		        paraphrase.push("a method call"); 
		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:226:3: ( (packageName= ID ':' )? name= ID '(' ( (param= expression ) ( ',' (param= expression ) )* )? ')' ->)
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:226:5: (packageName= ID ':' )? name= ID '(' ( (param= expression ) ( ',' (param= expression ) )* )? ')'
			{
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:226:5: (packageName= ID ':' )?
			int alt38=2;
			int LA38_0 = input.LA(1);
			if ( (LA38_0==ID) ) {
				int LA38_1 = input.LA(2);
				if ( (LA38_1==47) ) {
					alt38=1;
				}
			}
			switch (alt38) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:226:6: packageName= ID ':'
					{
					packageName=(Token)match(input,ID,FOLLOW_ID_in_methodCall1614); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ID.add(packageName);

					char_literal69=(Token)match(input,47,FOLLOW_47_in_methodCall1616); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_47.add(char_literal69);

					}
					break;

			}

			name=(Token)match(input,ID,FOLLOW_ID_in_methodCall1622); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ID.add(name);

			char_literal70=(Token)match(input,39,FOLLOW_39_in_methodCall1624); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_39.add(char_literal70);

			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:227:3: ( (param= expression ) ( ',' (param= expression ) )* )?
			int alt40=2;
			int LA40_0 = input.LA(1);
			if ( (LA40_0==DECIMAL||LA40_0==FN||LA40_0==ID||LA40_0==INTEGER||(LA40_0 >= STRING && LA40_0 <= UINT)||LA40_0==VAR||LA40_0==35||(LA40_0 >= 38 && LA40_0 <= 39)||LA40_0==42||LA40_0==45||LA40_0==57||(LA40_0 >= 59 && LA40_0 <= 62)||(LA40_0 >= 64 && LA40_0 <= 65)||LA40_0==68) ) {
				alt40=1;
			}
			switch (alt40) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:227:4: (param= expression ) ( ',' (param= expression ) )*
					{
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:227:4: (param= expression )
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:227:5: param= expression
					{
					pushFollow(FOLLOW_expression_in_methodCall1633);
					param=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(param.getTree());
					if ( state.backtracking==0 ) { params.add((param!=null?((EvaluationExpression)param.getTree()):null)); }
					}

					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:228:3: ( ',' (param= expression ) )*
					loop39:
					while (true) {
						int alt39=2;
						int LA39_0 = input.LA(1);
						if ( (LA39_0==43) ) {
							alt39=1;
						}

						switch (alt39) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:228:4: ',' (param= expression )
							{
							char_literal71=(Token)match(input,43,FOLLOW_43_in_methodCall1642); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_43.add(char_literal71);

							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:228:8: (param= expression )
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:228:9: param= expression
							{
							pushFollow(FOLLOW_expression_in_methodCall1647);
							param=expression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression.add(param.getTree());
							if ( state.backtracking==0 ) { params.add((param!=null?((EvaluationExpression)param.getTree()):null)); }
							}

							}
							break;

						default :
							break loop39;
						}
					}

					}
					break;

			}

			char_literal72=(Token)match(input,40,FOLLOW_40_in_methodCall1659); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_40.add(char_literal72);

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

			root_0 = (EvaluationExpression)adaptor.nil();
			// 229:7: ->
			{
				adaptor.addChild(root_0,  createCheckedMethodCall((packageName!=null?packageName.getText():null), name, targetExpr, params.toArray(new EvaluationExpression[params.size()])) );
			}


			retval.tree = root_0;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
			if ( state.backtracking==0 ) { paraphrase.pop(); }
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class functionCall_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "functionCall"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:231:1: functionCall : methodCall[null] ;
	public final MeteorParser.functionCall_return functionCall() throws RecognitionException {
		MeteorParser.functionCall_return retval = new MeteorParser.functionCall_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		ParserRuleReturnScope methodCall73 =null;


		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:232:2: ( methodCall[null] )
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:232:4: methodCall[null]
			{
			root_0 = (EvaluationExpression)adaptor.nil();


			pushFollow(FOLLOW_methodCall_in_functionCall1674);
			methodCall73=methodCall(null);
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) adaptor.addChild(root_0, methodCall73.getTree());

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class functionReference_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "functionReference"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:234:1: functionReference : '&' ( ( ID ':' )=>packageName= ID ':' )? name= ID -> ^( EXPRESSION[\"ConstantExpression\"] ) ;
	public final MeteorParser.functionReference_return functionReference() throws RecognitionException {
		MeteorParser.functionReference_return retval = new MeteorParser.functionReference_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token packageName=null;
		Token name=null;
		Token char_literal74=null;
		Token char_literal75=null;

		EvaluationExpression packageName_tree=null;
		EvaluationExpression name_tree=null;
		EvaluationExpression char_literal74_tree=null;
		EvaluationExpression char_literal75_tree=null;
		RewriteRuleTokenStream stream_47=new RewriteRuleTokenStream(adaptor,"token 47");
		RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
		RewriteRuleTokenStream stream_38=new RewriteRuleTokenStream(adaptor,"token 38");

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:235:3: ( '&' ( ( ID ':' )=>packageName= ID ':' )? name= ID -> ^( EXPRESSION[\"ConstantExpression\"] ) )
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:235:5: '&' ( ( ID ':' )=>packageName= ID ':' )? name= ID
			{
			char_literal74=(Token)match(input,38,FOLLOW_38_in_functionReference1685); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_38.add(char_literal74);

			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:235:9: ( ( ID ':' )=>packageName= ID ':' )?
			int alt41=2;
			int LA41_0 = input.LA(1);
			if ( (LA41_0==ID) ) {
				int LA41_1 = input.LA(2);
				if ( (LA41_1==47) ) {
					int LA41_2 = input.LA(3);
					if ( (LA41_2==ID) ) {
						int LA41_4 = input.LA(4);
						if ( (synpred18_Meteor()) ) {
							alt41=1;
						}
					}
				}
			}
			switch (alt41) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:235:10: ( ID ':' )=>packageName= ID ':'
					{
					packageName=(Token)match(input,ID,FOLLOW_ID_in_functionReference1697); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ID.add(packageName);

					char_literal75=(Token)match(input,47,FOLLOW_47_in_functionReference1699); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_47.add(char_literal75);

					}
					break;

			}

			name=(Token)match(input,ID,FOLLOW_ID_in_functionReference1705); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ID.add(name);

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

			root_0 = (EvaluationExpression)adaptor.nil();
			// 236:9: -> ^( EXPRESSION[\"ConstantExpression\"] )
			{
				// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:236:12: ^( EXPRESSION[\"ConstantExpression\"] )
				{
				EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
				root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "ConstantExpression"), root_1);
				adaptor.addChild(root_1,  new FunctionNode(getSopremoFunction((packageName!=null?packageName.getText():null), name)) );
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class fieldAssignment_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "fieldAssignment"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:238:1: fieldAssignment : ( ( ( ID ':' )=> ID ':' expression ->) | VAR ( '.' STAR ->|p= contextAwarePathExpression[getVariableSafely($VAR).toInputSelection($operator::result)] ( ':' e2= expression ->| ->) ) );
	public final MeteorParser.fieldAssignment_return fieldAssignment() throws RecognitionException {
		MeteorParser.fieldAssignment_return retval = new MeteorParser.fieldAssignment_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token ID76=null;
		Token char_literal77=null;
		Token VAR79=null;
		Token char_literal80=null;
		Token STAR81=null;
		Token char_literal82=null;
		ParserRuleReturnScope p =null;
		ParserRuleReturnScope e2 =null;
		ParserRuleReturnScope expression78 =null;

		EvaluationExpression ID76_tree=null;
		EvaluationExpression char_literal77_tree=null;
		EvaluationExpression VAR79_tree=null;
		EvaluationExpression char_literal80_tree=null;
		EvaluationExpression STAR81_tree=null;
		EvaluationExpression char_literal82_tree=null;
		RewriteRuleTokenStream stream_VAR=new RewriteRuleTokenStream(adaptor,"token VAR");
		RewriteRuleTokenStream stream_STAR=new RewriteRuleTokenStream(adaptor,"token STAR");
		RewriteRuleTokenStream stream_47=new RewriteRuleTokenStream(adaptor,"token 47");
		RewriteRuleTokenStream stream_46=new RewriteRuleTokenStream(adaptor,"token 46");
		RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
		RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");
		RewriteRuleSubtreeStream stream_contextAwarePathExpression=new RewriteRuleSubtreeStream(adaptor,"rule contextAwarePathExpression");

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:239:2: ( ( ( ID ':' )=> ID ':' expression ->) | VAR ( '.' STAR ->|p= contextAwarePathExpression[getVariableSafely($VAR).toInputSelection($operator::result)] ( ':' e2= expression ->| ->) ) )
			int alt44=2;
			int LA44_0 = input.LA(1);
			if ( (LA44_0==ID) && (synpred19_Meteor())) {
				alt44=1;
			}
			else if ( (LA44_0==VAR) ) {
				alt44=2;
			}

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

			switch (alt44) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:239:4: ( ( ID ':' )=> ID ':' expression ->)
					{
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:239:4: ( ( ID ':' )=> ID ':' expression ->)
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:239:5: ( ID ':' )=> ID ':' expression
					{
					ID76=(Token)match(input,ID,FOLLOW_ID_in_fieldAssignment1741); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ID.add(ID76);

					char_literal77=(Token)match(input,47,FOLLOW_47_in_fieldAssignment1743); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_47.add(char_literal77);

					pushFollow(FOLLOW_expression_in_fieldAssignment1745);
					expression78=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression78.getTree());
					if ( state.backtracking==0 ) { objectCreation_stack.peek().mappings.add(new ObjectCreation.FieldAssignment((ID76!=null?ID76.getText():null), (expression78!=null?((EvaluationExpression)expression78.getTree()):null))); }
					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (EvaluationExpression)adaptor.nil();
					// 240:104: ->
					{
						root_0 = null;
					}


					retval.tree = root_0;
					}

					}

					}
					break;
				case 2 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:241:5: VAR ( '.' STAR ->|p= contextAwarePathExpression[getVariableSafely($VAR).toInputSelection($operator::result)] ( ':' e2= expression ->| ->) )
					{
					VAR79=(Token)match(input,VAR,FOLLOW_VAR_in_fieldAssignment1762); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_VAR.add(VAR79);

					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:242:5: ( '.' STAR ->|p= contextAwarePathExpression[getVariableSafely($VAR).toInputSelection($operator::result)] ( ':' e2= expression ->| ->) )
					int alt43=2;
					int LA43_0 = input.LA(1);
					if ( (LA43_0==46) ) {
						int LA43_1 = input.LA(2);
						if ( (LA43_1==STAR) ) {
							alt43=1;
						}
						else if ( (LA43_1==ID) ) {
							alt43=2;
						}

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

					}
					else if ( ((LA43_0 >= 56 && LA43_0 <= 57)) ) {
						alt43=2;
					}

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

					switch (alt43) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:242:7: '.' STAR
							{
							char_literal80=(Token)match(input,46,FOLLOW_46_in_fieldAssignment1771); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_46.add(char_literal80);

							STAR81=(Token)match(input,STAR,FOLLOW_STAR_in_fieldAssignment1773); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_STAR.add(STAR81);

							if ( state.backtracking==0 ) { objectCreation_stack.peek().mappings.add(new ObjectCreation.CopyFields(getInputSelection(VAR79))); }
							// AST REWRITE
							// elements: 
							// token labels: 
							// rule labels: retval
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

							root_0 = (EvaluationExpression)adaptor.nil();
							// 242:107: ->
							{
								root_0 = null;
							}


							retval.tree = root_0;
							}

							}
							break;
						case 2 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:244:9: p= contextAwarePathExpression[getVariableSafely($VAR).toInputSelection($operator::result)] ( ':' e2= expression ->| ->)
							{
							pushFollow(FOLLOW_contextAwarePathExpression_in_fieldAssignment1790);
							p=contextAwarePathExpression(getVariableSafely(VAR79).toInputSelection(operator_stack.peek().result));
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_contextAwarePathExpression.add(p.getTree());
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:245:7: ( ':' e2= expression ->| ->)
							int alt42=2;
							int LA42_0 = input.LA(1);
							if ( (LA42_0==47) ) {
								alt42=1;
							}
							else if ( (LA42_0==43||LA42_0==67) ) {
								alt42=2;
							}

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

							switch (alt42) {
								case 1 :
									// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:245:9: ':' e2= expression
									{
									char_literal82=(Token)match(input,47,FOLLOW_47_in_fieldAssignment1801); if (state.failed) return retval; 
									if ( state.backtracking==0 ) stream_47.add(char_literal82);

									pushFollow(FOLLOW_expression_in_fieldAssignment1805);
									e2=expression();
									state._fsp--;
									if (state.failed) return retval;
									if ( state.backtracking==0 ) stream_expression.add(e2.getTree());
									if ( state.backtracking==0 ) { objectCreation_stack.peek().mappings.add(new ObjectCreation.TagMapping((p!=null?((EvaluationExpression)p.getTree()):null), (e2!=null?((EvaluationExpression)e2.getTree()):null))); }
									// AST REWRITE
									// elements: 
									// token labels: 
									// rule labels: retval
									// token list labels: 
									// rule list labels: 
									// wildcard labels: 
									if ( state.backtracking==0 ) {
									retval.tree = root_0;
									RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

									root_0 = (EvaluationExpression)adaptor.nil();
									// 245:112: ->
									{
										root_0 = null;
									}


									retval.tree = root_0;
									}

									}
									break;
								case 2 :
									// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:246:23: 
									{
									if ( state.backtracking==0 ) { objectCreation_stack.peek().mappings.add(new ObjectCreation.FieldAssignment(getAssignmentName((p!=null?((EvaluationExpression)p.getTree()):null)), (p!=null?((EvaluationExpression)p.getTree()):null))); }
									// AST REWRITE
									// elements: 
									// token labels: 
									// rule labels: retval
									// token list labels: 
									// rule list labels: 
									// wildcard labels: 
									if ( state.backtracking==0 ) {
									retval.tree = root_0;
									RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

									root_0 = (EvaluationExpression)adaptor.nil();
									// 246:131: ->
									{
										root_0 = null;
									}


									retval.tree = root_0;
									}

									}
									break;

							}

							}
							break;

					}

					}
					break;

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (NoViableAltException re) {
			 explainUsage("inside of a json object {...} only , <$var.path>, <$var = operator> or <$var: expression> are allowed", re); 
		}

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


	protected static class objectCreation_scope {
		List mappings;
	}
	protected Stack objectCreation_stack = new Stack();

	public static class objectCreation_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "objectCreation"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:251:1: objectCreation : '{' ( fieldAssignment ( ',' fieldAssignment )* ( ',' )? )? '}' -> ^( EXPRESSION[\"ObjectCreation\"] ) ;
	public final MeteorParser.objectCreation_return objectCreation() throws RecognitionException {
		objectCreation_stack.push(new objectCreation_scope());
		MeteorParser.objectCreation_return retval = new MeteorParser.objectCreation_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token char_literal83=null;
		Token char_literal85=null;
		Token char_literal87=null;
		Token char_literal88=null;
		ParserRuleReturnScope fieldAssignment84 =null;
		ParserRuleReturnScope fieldAssignment86 =null;

		EvaluationExpression char_literal83_tree=null;
		EvaluationExpression char_literal85_tree=null;
		EvaluationExpression char_literal87_tree=null;
		EvaluationExpression char_literal88_tree=null;
		RewriteRuleTokenStream stream_67=new RewriteRuleTokenStream(adaptor,"token 67");
		RewriteRuleTokenStream stream_43=new RewriteRuleTokenStream(adaptor,"token 43");
		RewriteRuleTokenStream stream_65=new RewriteRuleTokenStream(adaptor,"token 65");
		RewriteRuleSubtreeStream stream_fieldAssignment=new RewriteRuleSubtreeStream(adaptor,"rule fieldAssignment");

		 objectCreation_stack.peek().mappings = new ArrayList(); 
		        paraphrase.push("a json object"); 
		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:256:2: ( '{' ( fieldAssignment ( ',' fieldAssignment )* ( ',' )? )? '}' -> ^( EXPRESSION[\"ObjectCreation\"] ) )
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:256:4: '{' ( fieldAssignment ( ',' fieldAssignment )* ( ',' )? )? '}'
			{
			char_literal83=(Token)match(input,65,FOLLOW_65_in_objectCreation1870); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_65.add(char_literal83);

			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:256:8: ( fieldAssignment ( ',' fieldAssignment )* ( ',' )? )?
			int alt47=2;
			int LA47_0 = input.LA(1);
			if ( (LA47_0==ID||LA47_0==VAR) ) {
				alt47=1;
			}
			switch (alt47) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:256:9: fieldAssignment ( ',' fieldAssignment )* ( ',' )?
					{
					pushFollow(FOLLOW_fieldAssignment_in_objectCreation1873);
					fieldAssignment84=fieldAssignment();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_fieldAssignment.add(fieldAssignment84.getTree());
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:256:25: ( ',' fieldAssignment )*
					loop45:
					while (true) {
						int alt45=2;
						int LA45_0 = input.LA(1);
						if ( (LA45_0==43) ) {
							int LA45_1 = input.LA(2);
							if ( (LA45_1==ID||LA45_1==VAR) ) {
								alt45=1;
							}

						}

						switch (alt45) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:256:26: ',' fieldAssignment
							{
							char_literal85=(Token)match(input,43,FOLLOW_43_in_objectCreation1876); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_43.add(char_literal85);

							pushFollow(FOLLOW_fieldAssignment_in_objectCreation1878);
							fieldAssignment86=fieldAssignment();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_fieldAssignment.add(fieldAssignment86.getTree());
							}
							break;

						default :
							break loop45;
						}
					}

					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:256:48: ( ',' )?
					int alt46=2;
					int LA46_0 = input.LA(1);
					if ( (LA46_0==43) ) {
						alt46=1;
					}
					switch (alt46) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:256:48: ','
							{
							char_literal87=(Token)match(input,43,FOLLOW_43_in_objectCreation1882); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_43.add(char_literal87);

							}
							break;

					}

					}
					break;

			}

			char_literal88=(Token)match(input,67,FOLLOW_67_in_objectCreation1887); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_67.add(char_literal88);

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

			root_0 = (EvaluationExpression)adaptor.nil();
			// 256:59: -> ^( EXPRESSION[\"ObjectCreation\"] )
			{
				// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:256:62: ^( EXPRESSION[\"ObjectCreation\"] )
				{
				EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
				root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "ObjectCreation"), root_1);
				adaptor.addChild(root_1,  objectCreation_stack.peek().mappings );
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
			if ( state.backtracking==0 ) { paraphrase.pop(); }
		}
		catch (MissingTokenException re) {
			 explainUsage("expected <,> or <}> after a complete field assignment inside of a json object", re); 
		}

		finally {
			// do for sure before leaving
			objectCreation_stack.pop();
		}
		return retval;
	}
	// $ANTLR end "objectCreation"


	public static class literal_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "literal"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:259:1: literal : (val= 'true' -> ^( EXPRESSION[\"ConstantExpression\"] ) |val= 'false' -> ^( EXPRESSION[\"ConstantExpression\"] ) |val= DECIMAL -> ^( EXPRESSION[\"ConstantExpression\"] ) |val= STRING -> ^( EXPRESSION[\"ConstantExpression\"] ) | (val= UINT |val= INTEGER ) -> ^( EXPRESSION[\"ConstantExpression\"] ) | 'null' ->);
	public final MeteorParser.literal_return literal() throws RecognitionException {
		MeteorParser.literal_return retval = new MeteorParser.literal_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token val=null;
		Token string_literal89=null;

		EvaluationExpression val_tree=null;
		EvaluationExpression string_literal89_tree=null;
		RewriteRuleTokenStream stream_INTEGER=new RewriteRuleTokenStream(adaptor,"token INTEGER");
		RewriteRuleTokenStream stream_59=new RewriteRuleTokenStream(adaptor,"token 59");
		RewriteRuleTokenStream stream_DECIMAL=new RewriteRuleTokenStream(adaptor,"token DECIMAL");
		RewriteRuleTokenStream stream_62=new RewriteRuleTokenStream(adaptor,"token 62");
		RewriteRuleTokenStream stream_UINT=new RewriteRuleTokenStream(adaptor,"token UINT");
		RewriteRuleTokenStream stream_60=new RewriteRuleTokenStream(adaptor,"token 60");
		RewriteRuleTokenStream stream_STRING=new RewriteRuleTokenStream(adaptor,"token STRING");

		 paraphrase.push("a literal"); 
		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:262:2: (val= 'true' -> ^( EXPRESSION[\"ConstantExpression\"] ) |val= 'false' -> ^( EXPRESSION[\"ConstantExpression\"] ) |val= DECIMAL -> ^( EXPRESSION[\"ConstantExpression\"] ) |val= STRING -> ^( EXPRESSION[\"ConstantExpression\"] ) | (val= UINT |val= INTEGER ) -> ^( EXPRESSION[\"ConstantExpression\"] ) | 'null' ->)
			int alt49=6;
			switch ( input.LA(1) ) {
			case 62:
				{
				alt49=1;
				}
				break;
			case 59:
				{
				alt49=2;
				}
				break;
			case DECIMAL:
				{
				alt49=3;
				}
				break;
			case STRING:
				{
				alt49=4;
				}
				break;
			case INTEGER:
			case UINT:
				{
				alt49=5;
				}
				break;
			case 60:
				{
				alt49=6;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 49, 0, input);
				throw nvae;
			}
			switch (alt49) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:262:4: val= 'true'
					{
					val=(Token)match(input,62,FOLLOW_62_in_literal1925); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_62.add(val);

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

					root_0 = (EvaluationExpression)adaptor.nil();
					// 262:15: -> ^( EXPRESSION[\"ConstantExpression\"] )
					{
						// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:262:18: ^( EXPRESSION[\"ConstantExpression\"] )
						{
						EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
						root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "ConstantExpression"), root_1);
						adaptor.addChild(root_1,  Boolean.TRUE );
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:263:4: val= 'false'
					{
					val=(Token)match(input,59,FOLLOW_59_in_literal1941); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_59.add(val);

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

					root_0 = (EvaluationExpression)adaptor.nil();
					// 263:16: -> ^( EXPRESSION[\"ConstantExpression\"] )
					{
						// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:263:19: ^( EXPRESSION[\"ConstantExpression\"] )
						{
						EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
						root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "ConstantExpression"), root_1);
						adaptor.addChild(root_1,  Boolean.FALSE );
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 3 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:264:4: val= DECIMAL
					{
					val=(Token)match(input,DECIMAL,FOLLOW_DECIMAL_in_literal1957); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_DECIMAL.add(val);

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

					root_0 = (EvaluationExpression)adaptor.nil();
					// 264:16: -> ^( EXPRESSION[\"ConstantExpression\"] )
					{
						// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:264:19: ^( EXPRESSION[\"ConstantExpression\"] )
						{
						EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
						root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "ConstantExpression"), root_1);
						adaptor.addChild(root_1,  new BigDecimal((val!=null?val.getText():null)) );
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 4 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:265:4: val= STRING
					{
					val=(Token)match(input,STRING,FOLLOW_STRING_in_literal1973); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_STRING.add(val);

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

					root_0 = (EvaluationExpression)adaptor.nil();
					// 265:15: -> ^( EXPRESSION[\"ConstantExpression\"] )
					{
						// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:265:18: ^( EXPRESSION[\"ConstantExpression\"] )
						{
						EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
						root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "ConstantExpression"), root_1);
						adaptor.addChild(root_1,  val.getText() );
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 5 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:266:5: (val= UINT |val= INTEGER )
					{
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:266:5: (val= UINT |val= INTEGER )
					int alt48=2;
					int LA48_0 = input.LA(1);
					if ( (LA48_0==UINT) ) {
						alt48=1;
					}
					else if ( (LA48_0==INTEGER) ) {
						alt48=2;
					}

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

					switch (alt48) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:266:6: val= UINT
							{
							val=(Token)match(input,UINT,FOLLOW_UINT_in_literal1991); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_UINT.add(val);

							}
							break;
						case 2 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:266:17: val= INTEGER
							{
							val=(Token)match(input,INTEGER,FOLLOW_INTEGER_in_literal1997); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_INTEGER.add(val);

							}
							break;

					}

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

					root_0 = (EvaluationExpression)adaptor.nil();
					// 266:30: -> ^( EXPRESSION[\"ConstantExpression\"] )
					{
						// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:266:33: ^( EXPRESSION[\"ConstantExpression\"] )
						{
						EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
						root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "ConstantExpression"), root_1);
						adaptor.addChild(root_1,  parseInt((val!=null?val.getText():null)) );
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 6 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:267:5: 'null'
					{
					string_literal89=(Token)match(input,60,FOLLOW_60_in_literal2013); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_60.add(string_literal89);

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

					root_0 = (EvaluationExpression)adaptor.nil();
					// 267:12: ->
					{
						adaptor.addChild(root_0,  ConstantExpression.NULL );
					}


					retval.tree = root_0;
					}

					}
					break;

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
			if ( state.backtracking==0 ) { paraphrase.pop(); }
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class arrayCreation_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "arrayCreation"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:269:1: arrayCreation : '[' (elems+= expression ( ',' elems+= expression )* ( ',' )? )? ']' -> ^( EXPRESSION[\"ArrayCreation\"] ) ;
	public final MeteorParser.arrayCreation_return arrayCreation() throws RecognitionException {
		MeteorParser.arrayCreation_return retval = new MeteorParser.arrayCreation_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token char_literal90=null;
		Token char_literal91=null;
		Token char_literal92=null;
		Token char_literal93=null;
		List list_elems=null;
		RuleReturnScope elems = null;
		EvaluationExpression char_literal90_tree=null;
		EvaluationExpression char_literal91_tree=null;
		EvaluationExpression char_literal92_tree=null;
		EvaluationExpression char_literal93_tree=null;
		RewriteRuleTokenStream stream_58=new RewriteRuleTokenStream(adaptor,"token 58");
		RewriteRuleTokenStream stream_43=new RewriteRuleTokenStream(adaptor,"token 43");
		RewriteRuleTokenStream stream_57=new RewriteRuleTokenStream(adaptor,"token 57");
		RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");

		 paraphrase.push("a json array"); 
		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:272:2: ( '[' (elems+= expression ( ',' elems+= expression )* ( ',' )? )? ']' -> ^( EXPRESSION[\"ArrayCreation\"] ) )
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:272:5: '[' (elems+= expression ( ',' elems+= expression )* ( ',' )? )? ']'
			{
			char_literal90=(Token)match(input,57,FOLLOW_57_in_arrayCreation2037); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_57.add(char_literal90);

			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:272:9: (elems+= expression ( ',' elems+= expression )* ( ',' )? )?
			int alt52=2;
			int LA52_0 = input.LA(1);
			if ( (LA52_0==DECIMAL||LA52_0==FN||LA52_0==ID||LA52_0==INTEGER||(LA52_0 >= STRING && LA52_0 <= UINT)||LA52_0==VAR||LA52_0==35||(LA52_0 >= 38 && LA52_0 <= 39)||LA52_0==42||LA52_0==45||LA52_0==57||(LA52_0 >= 59 && LA52_0 <= 62)||(LA52_0 >= 64 && LA52_0 <= 65)||LA52_0==68) ) {
				alt52=1;
			}
			switch (alt52) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:272:10: elems+= expression ( ',' elems+= expression )* ( ',' )?
					{
					pushFollow(FOLLOW_expression_in_arrayCreation2042);
					elems=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(elems.getTree());
					if (list_elems==null) list_elems=new ArrayList();
					list_elems.add(elems.getTree());
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:272:28: ( ',' elems+= expression )*
					loop50:
					while (true) {
						int alt50=2;
						int LA50_0 = input.LA(1);
						if ( (LA50_0==43) ) {
							int LA50_1 = input.LA(2);
							if ( (LA50_1==DECIMAL||LA50_1==FN||LA50_1==ID||LA50_1==INTEGER||(LA50_1 >= STRING && LA50_1 <= UINT)||LA50_1==VAR||LA50_1==35||(LA50_1 >= 38 && LA50_1 <= 39)||LA50_1==42||LA50_1==45||LA50_1==57||(LA50_1 >= 59 && LA50_1 <= 62)||(LA50_1 >= 64 && LA50_1 <= 65)||LA50_1==68) ) {
								alt50=1;
							}

						}

						switch (alt50) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:272:29: ',' elems+= expression
							{
							char_literal91=(Token)match(input,43,FOLLOW_43_in_arrayCreation2045); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_43.add(char_literal91);

							pushFollow(FOLLOW_expression_in_arrayCreation2049);
							elems=expression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression.add(elems.getTree());
							if (list_elems==null) list_elems=new ArrayList();
							list_elems.add(elems.getTree());
							}
							break;

						default :
							break loop50;
						}
					}

					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:272:53: ( ',' )?
					int alt51=2;
					int LA51_0 = input.LA(1);
					if ( (LA51_0==43) ) {
						alt51=1;
					}
					switch (alt51) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:272:53: ','
							{
							char_literal92=(Token)match(input,43,FOLLOW_43_in_arrayCreation2053); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_43.add(char_literal92);

							}
							break;

					}

					}
					break;

			}

			char_literal93=(Token)match(input,58,FOLLOW_58_in_arrayCreation2058); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_58.add(char_literal93);

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

			root_0 = (EvaluationExpression)adaptor.nil();
			// 272:64: -> ^( EXPRESSION[\"ArrayCreation\"] )
			{
				// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:272:67: ^( EXPRESSION[\"ArrayCreation\"] )
				{
				EvaluationExpression root_1 = (EvaluationExpression)adaptor.nil();
				root_1 = (EvaluationExpression)adaptor.becomeRoot((EvaluationExpression)adaptor.create(EXPRESSION, "ArrayCreation"), root_1);
				adaptor.addChild(root_1,  list_elems == null ? new EvaluationExpression[0] : list_elems.toArray(new EvaluationExpression[list_elems.size()]) );
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
			if ( state.backtracking==0 ) { paraphrase.pop(); }
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	protected static class operator_scope {
		int numInputs;
		Operator result;
	}
	protected Stack operator_stack = new Stack();

	public static class operator_return extends ParserRuleReturnScope {
		public Operator op=null;
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "operator"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:278:1: operator returns [Operator op=null] : ( readOperator | writeOperator | genericOperator );
	public final MeteorParser.operator_return operator() throws RecognitionException {
		operator_stack.push(new operator_scope());
		MeteorParser.operator_return retval = new MeteorParser.operator_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		ParserRuleReturnScope readOperator94 =null;
		ParserRuleReturnScope writeOperator95 =null;
		ParserRuleReturnScope genericOperator96 =null;


		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:282:2: ( readOperator | writeOperator | genericOperator )
			int alt53=3;
			switch ( input.LA(1) ) {
			case VAR:
				{
				int LA53_1 = input.LA(2);
				if ( (LA53_1==51) ) {
					int LA53_5 = input.LA(3);
					if ( (LA53_5==61) ) {
						alt53=1;
					}
					else if ( (LA53_5==ID) ) {
						alt53=3;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return retval;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 53, 5, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}
				else if ( (LA53_1==43) ) {
					alt53=3;
				}

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

				}
				break;
			case 61:
				{
				alt53=1;
				}
				break;
			case 64:
				{
				alt53=2;
				}
				break;
			case ID:
				{
				alt53=3;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 53, 0, input);
				throw nvae;
			}
			switch (alt53) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:282:4: readOperator
					{
					root_0 = (EvaluationExpression)adaptor.nil();


					pushFollow(FOLLOW_readOperator_in_operator2084);
					readOperator94=readOperator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, readOperator94.getTree());

					if ( state.backtracking==0 ) { retval.op = (readOperator94!=null?((MeteorParser.readOperator_return)readOperator94).source:null); }
					}
					break;
				case 2 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:283:5: writeOperator
					{
					root_0 = (EvaluationExpression)adaptor.nil();


					pushFollow(FOLLOW_writeOperator_in_operator2092);
					writeOperator95=writeOperator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, writeOperator95.getTree());

					if ( state.backtracking==0 ) { retval.op = (writeOperator95!=null?((MeteorParser.writeOperator_return)writeOperator95).sink:null); }
					}
					break;
				case 3 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:284:5: genericOperator
					{
					root_0 = (EvaluationExpression)adaptor.nil();


					pushFollow(FOLLOW_genericOperator_in_operator2100);
					genericOperator96=genericOperator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, genericOperator96.getTree());

					if ( state.backtracking==0 ) { retval.op = (genericOperator96!=null?((MeteorParser.genericOperator_return)genericOperator96).op:null); }
					}
					break;

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

		finally {
			// do for sure before leaving
			operator_stack.pop();
		}
		return retval;
	}
	// $ANTLR end "operator"


	public static class adhocSource_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "adhocSource"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:286:1: adhocSource : output= VAR '=' exp= arrayCreation ->;
	public final MeteorParser.adhocSource_return adhocSource() throws RecognitionException {
		MeteorParser.adhocSource_return retval = new MeteorParser.adhocSource_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token output=null;
		Token char_literal97=null;
		ParserRuleReturnScope exp =null;

		EvaluationExpression output_tree=null;
		EvaluationExpression char_literal97_tree=null;
		RewriteRuleTokenStream stream_VAR=new RewriteRuleTokenStream(adaptor,"token VAR");
		RewriteRuleTokenStream stream_51=new RewriteRuleTokenStream(adaptor,"token 51");
		RewriteRuleSubtreeStream stream_arrayCreation=new RewriteRuleSubtreeStream(adaptor,"rule arrayCreation");

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:286:12: (output= VAR '=' exp= arrayCreation ->)
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:287:3: output= VAR '=' exp= arrayCreation
			{
			output=(Token)match(input,VAR,FOLLOW_VAR_in_adhocSource2114); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_VAR.add(output);

			char_literal97=(Token)match(input,51,FOLLOW_51_in_adhocSource2116); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_51.add(char_literal97);

			pushFollow(FOLLOW_arrayCreation_in_adhocSource2120);
			exp=arrayCreation();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_arrayCreation.add(exp.getTree());
			if ( state.backtracking==0 ) { 
			  Source source = new Source((exp!=null?((EvaluationExpression)exp.getTree()):null));
			  putVariable(output, new JsonStreamExpression(source));
			}
			// AST REWRITE
			// elements: 
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (EvaluationExpression)adaptor.nil();
			// 291:3: ->
			{
				root_0 = null;
			}


			retval.tree = root_0;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class readOperator_return extends ParserRuleReturnScope {
		public Source source;
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "readOperator"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:294:1: readOperator returns [Source source] : (output= VAR '=' )? 'read' ( (packageName= ID ':' )? format= ID )? {...}? ID ( (protocol= ID )? filePath= STRING |protocol= ID '(' filePath= STRING ')' ) ( confOption[getOperatorInfo($source), $source] )* ->;
	public final MeteorParser.readOperator_return readOperator() throws RecognitionException {
		MeteorParser.readOperator_return retval = new MeteorParser.readOperator_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token output=null;
		Token packageName=null;
		Token format=null;
		Token protocol=null;
		Token filePath=null;
		Token char_literal98=null;
		Token string_literal99=null;
		Token char_literal100=null;
		Token ID101=null;
		Token char_literal102=null;
		Token char_literal103=null;
		ParserRuleReturnScope confOption104 =null;

		EvaluationExpression output_tree=null;
		EvaluationExpression packageName_tree=null;
		EvaluationExpression format_tree=null;
		EvaluationExpression protocol_tree=null;
		EvaluationExpression filePath_tree=null;
		EvaluationExpression char_literal98_tree=null;
		EvaluationExpression string_literal99_tree=null;
		EvaluationExpression char_literal100_tree=null;
		EvaluationExpression ID101_tree=null;
		EvaluationExpression char_literal102_tree=null;
		EvaluationExpression char_literal103_tree=null;
		RewriteRuleTokenStream stream_VAR=new RewriteRuleTokenStream(adaptor,"token VAR");
		RewriteRuleTokenStream stream_47=new RewriteRuleTokenStream(adaptor,"token 47");
		RewriteRuleTokenStream stream_40=new RewriteRuleTokenStream(adaptor,"token 40");
		RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
		RewriteRuleTokenStream stream_51=new RewriteRuleTokenStream(adaptor,"token 51");
		RewriteRuleTokenStream stream_39=new RewriteRuleTokenStream(adaptor,"token 39");
		RewriteRuleTokenStream stream_61=new RewriteRuleTokenStream(adaptor,"token 61");
		RewriteRuleTokenStream stream_STRING=new RewriteRuleTokenStream(adaptor,"token STRING");
		RewriteRuleSubtreeStream stream_confOption=new RewriteRuleSubtreeStream(adaptor,"rule confOption");

		 
		  ConfObjectInfo formatInfo = null;
		  SopremoFormat fileFormat = null;
		  String path = null;

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:300:2: ( (output= VAR '=' )? 'read' ( (packageName= ID ':' )? format= ID )? {...}? ID ( (protocol= ID )? filePath= STRING |protocol= ID '(' filePath= STRING ')' ) ( confOption[getOperatorInfo($source), $source] )* ->)
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:300:4: (output= VAR '=' )? 'read' ( (packageName= ID ':' )? format= ID )? {...}? ID ( (protocol= ID )? filePath= STRING |protocol= ID '(' filePath= STRING ')' ) ( confOption[getOperatorInfo($source), $source] )*
			{
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:300:4: (output= VAR '=' )?
			int alt54=2;
			int LA54_0 = input.LA(1);
			if ( (LA54_0==VAR) ) {
				alt54=1;
			}
			switch (alt54) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:300:5: output= VAR '='
					{
					output=(Token)match(input,VAR,FOLLOW_VAR_in_readOperator2148); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_VAR.add(output);

					char_literal98=(Token)match(input,51,FOLLOW_51_in_readOperator2150); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_51.add(char_literal98);

					}
					break;

			}

			string_literal99=(Token)match(input,61,FOLLOW_61_in_readOperator2158); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_61.add(string_literal99);

			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:301:11: ( (packageName= ID ':' )? format= ID )?
			int alt56=2;
			int LA56_0 = input.LA(1);
			if ( (LA56_0==ID) ) {
				int LA56_1 = input.LA(2);
				if ( (LA56_1==47) ) {
					alt56=1;
				}
				else if ( (LA56_1==ID) ) {
					int LA56_3 = input.LA(3);
					if ( (!(((input.LT(1).getText().equals("from"))))) ) {
						alt56=1;
					}
				}
			}
			switch (alt56) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:301:12: (packageName= ID ':' )? format= ID
					{
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:301:12: (packageName= ID ':' )?
					int alt55=2;
					int LA55_0 = input.LA(1);
					if ( (LA55_0==ID) ) {
						int LA55_1 = input.LA(2);
						if ( (LA55_1==47) ) {
							alt55=1;
						}
					}
					switch (alt55) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:301:13: packageName= ID ':'
							{
							packageName=(Token)match(input,ID,FOLLOW_ID_in_readOperator2164); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_ID.add(packageName);

							char_literal100=(Token)match(input,47,FOLLOW_47_in_readOperator2166); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_47.add(char_literal100);

							}
							break;

					}

					format=(Token)match(input,ID,FOLLOW_ID_in_readOperator2171); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ID.add(format);

					}
					break;

			}

			if ( !((input.LT(1).getText().equals("from"))) ) {
				if (state.backtracking>0) {state.failed=true; return retval;}
				throw new FailedPredicateException(input, "readOperator", "input.LT(1).getText().equals(\"from\")");
			}
			ID101=(Token)match(input,ID,FOLLOW_ID_in_readOperator2180); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ID.add(ID101);

			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:302:47: ( (protocol= ID )? filePath= STRING |protocol= ID '(' filePath= STRING ')' )
			int alt58=2;
			int LA58_0 = input.LA(1);
			if ( (LA58_0==ID) ) {
				int LA58_1 = input.LA(2);
				if ( (LA58_1==39) ) {
					alt58=2;
				}
				else if ( (LA58_1==STRING) ) {
					alt58=1;
				}

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

			}
			else if ( (LA58_0==STRING) ) {
				alt58=1;
			}

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

			switch (alt58) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:302:48: (protocol= ID )? filePath= STRING
					{
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:302:56: (protocol= ID )?
					int alt57=2;
					int LA57_0 = input.LA(1);
					if ( (LA57_0==ID) ) {
						alt57=1;
					}
					switch (alt57) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:302:56: protocol= ID
							{
							protocol=(Token)match(input,ID,FOLLOW_ID_in_readOperator2185); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_ID.add(protocol);

							}
							break;

					}

					filePath=(Token)match(input,STRING,FOLLOW_STRING_in_readOperator2190); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_STRING.add(filePath);

					}
					break;
				case 2 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:302:79: protocol= ID '(' filePath= STRING ')'
					{
					protocol=(Token)match(input,ID,FOLLOW_ID_in_readOperator2196); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ID.add(protocol);

					char_literal102=(Token)match(input,39,FOLLOW_39_in_readOperator2198); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_39.add(char_literal102);

					filePath=(Token)match(input,STRING,FOLLOW_STRING_in_readOperator2202); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_STRING.add(filePath);

					char_literal103=(Token)match(input,40,FOLLOW_40_in_readOperator2204); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_40.add(char_literal103);

					}
					break;

			}

			if ( state.backtracking==0 ) { 
			  path = makeFilePath(protocol, (filePath!=null?filePath.getText():null));
			  formatInfo = findFormat((packageName!=null?packageName.getText():null), format, path);
			  fileFormat = formatInfo.newInstance(); 
			  retval.source = new Source(fileFormat, path); 
			  if(output != null)
			    putVariable(output, new JsonStreamExpression(retval.source));
			}
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:310:4: ( confOption[getOperatorInfo($source), $source] )*
			loop59:
			while (true) {
				int alt59=2;
				int LA59_0 = input.LA(1);
				if ( (LA59_0==ID) ) {
					alt59=1;
				}

				switch (alt59) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:310:4: confOption[getOperatorInfo($source), $source]
					{
					pushFollow(FOLLOW_confOption_in_readOperator2211);
					confOption104=confOption(getOperatorInfo(retval.source), retval.source);
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_confOption.add(confOption104.getTree());
					}
					break;

				default :
					break loop59;
				}
			}

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

			root_0 = (EvaluationExpression)adaptor.nil();
			// 311:2: ->
			{
				root_0 = null;
			}


			retval.tree = root_0;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class writeOperator_return extends ParserRuleReturnScope {
		public Sink sink;
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "writeOperator"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:314:1: writeOperator returns [Sink sink] : 'write' ( (packageName= ID ':' )? format= ID )? from= VAR {...}? ID ( (protocol= ID )? filePath= STRING |protocol= ID '(' filePath= STRING ')' ) ( confOption[getOperatorInfo($sink), $sink] )* ->;
	public final MeteorParser.writeOperator_return writeOperator() throws RecognitionException {
		MeteorParser.writeOperator_return retval = new MeteorParser.writeOperator_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token packageName=null;
		Token format=null;
		Token from=null;
		Token protocol=null;
		Token filePath=null;
		Token string_literal105=null;
		Token char_literal106=null;
		Token ID107=null;
		Token char_literal108=null;
		Token char_literal109=null;
		ParserRuleReturnScope confOption110 =null;

		EvaluationExpression packageName_tree=null;
		EvaluationExpression format_tree=null;
		EvaluationExpression from_tree=null;
		EvaluationExpression protocol_tree=null;
		EvaluationExpression filePath_tree=null;
		EvaluationExpression string_literal105_tree=null;
		EvaluationExpression char_literal106_tree=null;
		EvaluationExpression ID107_tree=null;
		EvaluationExpression char_literal108_tree=null;
		EvaluationExpression char_literal109_tree=null;
		RewriteRuleTokenStream stream_VAR=new RewriteRuleTokenStream(adaptor,"token VAR");
		RewriteRuleTokenStream stream_47=new RewriteRuleTokenStream(adaptor,"token 47");
		RewriteRuleTokenStream stream_40=new RewriteRuleTokenStream(adaptor,"token 40");
		RewriteRuleTokenStream stream_64=new RewriteRuleTokenStream(adaptor,"token 64");
		RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
		RewriteRuleTokenStream stream_39=new RewriteRuleTokenStream(adaptor,"token 39");
		RewriteRuleTokenStream stream_STRING=new RewriteRuleTokenStream(adaptor,"token STRING");
		RewriteRuleSubtreeStream stream_confOption=new RewriteRuleSubtreeStream(adaptor,"rule confOption");

		 
		  ConfObjectInfo formatInfo = null;
		  SopremoFormat fileFormat = null;
		  String path = null;
		  if(state.backtracking == 0) 
		    addScope();

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:324:3: ( 'write' ( (packageName= ID ':' )? format= ID )? from= VAR {...}? ID ( (protocol= ID )? filePath= STRING |protocol= ID '(' filePath= STRING ')' ) ( confOption[getOperatorInfo($sink), $sink] )* ->)
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:324:5: 'write' ( (packageName= ID ':' )? format= ID )? from= VAR {...}? ID ( (protocol= ID )? filePath= STRING |protocol= ID '(' filePath= STRING ')' ) ( confOption[getOperatorInfo($sink), $sink] )*
			{
			string_literal105=(Token)match(input,64,FOLLOW_64_in_writeOperator2240); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_64.add(string_literal105);

			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:325:5: ( (packageName= ID ':' )? format= ID )?
			int alt61=2;
			int LA61_0 = input.LA(1);
			if ( (LA61_0==ID) ) {
				alt61=1;
			}
			switch (alt61) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:325:6: (packageName= ID ':' )? format= ID
					{
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:325:6: (packageName= ID ':' )?
					int alt60=2;
					int LA60_0 = input.LA(1);
					if ( (LA60_0==ID) ) {
						int LA60_1 = input.LA(2);
						if ( (LA60_1==47) ) {
							alt60=1;
						}
					}
					switch (alt60) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:325:7: packageName= ID ':'
							{
							packageName=(Token)match(input,ID,FOLLOW_ID_in_writeOperator2251); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_ID.add(packageName);

							char_literal106=(Token)match(input,47,FOLLOW_47_in_writeOperator2253); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_47.add(char_literal106);

							}
							break;

					}

					format=(Token)match(input,ID,FOLLOW_ID_in_writeOperator2258); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ID.add(format);

					}
					break;

			}

			from=(Token)match(input,VAR,FOLLOW_VAR_in_writeOperator2264); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_VAR.add(from);

			if ( !((input.LT(1).getText().equals("to"))) ) {
				if (state.backtracking>0) {state.failed=true; return retval;}
				throw new FailedPredicateException(input, "writeOperator", "input.LT(1).getText().equals(\"to\")");
			}
			ID107=(Token)match(input,ID,FOLLOW_ID_in_writeOperator2272); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ID.add(ID107);

			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:327:4: ( (protocol= ID )? filePath= STRING |protocol= ID '(' filePath= STRING ')' )
			int alt63=2;
			int LA63_0 = input.LA(1);
			if ( (LA63_0==ID) ) {
				int LA63_1 = input.LA(2);
				if ( (LA63_1==39) ) {
					alt63=2;
				}
				else if ( (LA63_1==STRING) ) {
					alt63=1;
				}

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

			}
			else if ( (LA63_0==STRING) ) {
				alt63=1;
			}

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

			switch (alt63) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:327:5: (protocol= ID )? filePath= STRING
					{
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:327:13: (protocol= ID )?
					int alt62=2;
					int LA62_0 = input.LA(1);
					if ( (LA62_0==ID) ) {
						alt62=1;
					}
					switch (alt62) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:327:13: protocol= ID
							{
							protocol=(Token)match(input,ID,FOLLOW_ID_in_writeOperator2281); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_ID.add(protocol);

							}
							break;

					}

					filePath=(Token)match(input,STRING,FOLLOW_STRING_in_writeOperator2286); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_STRING.add(filePath);

					}
					break;
				case 2 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:327:36: protocol= ID '(' filePath= STRING ')'
					{
					protocol=(Token)match(input,ID,FOLLOW_ID_in_writeOperator2292); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ID.add(protocol);

					char_literal108=(Token)match(input,39,FOLLOW_39_in_writeOperator2294); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_39.add(char_literal108);

					filePath=(Token)match(input,STRING,FOLLOW_STRING_in_writeOperator2298); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_STRING.add(filePath);

					char_literal109=(Token)match(input,40,FOLLOW_40_in_writeOperator2300); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_40.add(char_literal109);

					}
					break;

			}

			if ( state.backtracking==0 ) { 
			  path = makeFilePath(protocol, (filePath!=null?filePath.getText():null));
			  formatInfo = findFormat((packageName!=null?packageName.getText():null), format, path);
			  fileFormat = formatInfo.newInstance();
				retval.sink = new Sink(fileFormat, makeFilePath(protocol, path));
			  retval.sink.setInputs(getVariableSafely(from).getStream());
			  this.sinks.add(retval.sink);
			}
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:335:3: ( confOption[getOperatorInfo($sink), $sink] )*
			loop64:
			while (true) {
				int alt64=2;
				int LA64_0 = input.LA(1);
				if ( (LA64_0==ID) ) {
					alt64=1;
				}

				switch (alt64) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:335:3: confOption[getOperatorInfo($sink), $sink]
					{
					pushFollow(FOLLOW_confOption_in_writeOperator2305);
					confOption110=confOption(getOperatorInfo(retval.sink), retval.sink);
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_confOption.add(confOption110.getTree());
					}
					break;

				default :
					break loop64;
				}
			}

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

			root_0 = (EvaluationExpression)adaptor.nil();
			// 335:46: ->
			{
				root_0 = null;
			}


			retval.tree = root_0;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
			if ( state.backtracking==0 ) {
			  removeScope();
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class genericOperator_return extends ParserRuleReturnScope {
		public Operator op;
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "genericOperator"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:341:1: genericOperator returns [Operator op] : (targets+= VAR ( ',' targets+= VAR )* '=' )? (packageName= ID ':' )? name= ID {...}? => ( ( VAR )=> input[operatorInfo, $op] ( ( ',' )=> ',' input[operatorInfo, $op] )* )? ( confOption[operatorInfo, $op] )* ->;
	public final MeteorParser.genericOperator_return genericOperator() throws RecognitionException {
		MeteorParser.genericOperator_return retval = new MeteorParser.genericOperator_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token packageName=null;
		Token name=null;
		Token char_literal111=null;
		Token char_literal112=null;
		Token char_literal113=null;
		Token char_literal115=null;
		Token targets=null;
		List list_targets=null;
		ParserRuleReturnScope input114 =null;
		ParserRuleReturnScope input116 =null;
		ParserRuleReturnScope confOption117 =null;

		EvaluationExpression packageName_tree=null;
		EvaluationExpression name_tree=null;
		EvaluationExpression char_literal111_tree=null;
		EvaluationExpression char_literal112_tree=null;
		EvaluationExpression char_literal113_tree=null;
		EvaluationExpression char_literal115_tree=null;
		EvaluationExpression targets_tree=null;
		RewriteRuleTokenStream stream_43=new RewriteRuleTokenStream(adaptor,"token 43");
		RewriteRuleTokenStream stream_VAR=new RewriteRuleTokenStream(adaptor,"token VAR");
		RewriteRuleTokenStream stream_47=new RewriteRuleTokenStream(adaptor,"token 47");
		RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
		RewriteRuleTokenStream stream_51=new RewriteRuleTokenStream(adaptor,"token 51");
		RewriteRuleSubtreeStream stream_input=new RewriteRuleSubtreeStream(adaptor,"rule input");
		RewriteRuleSubtreeStream stream_confOption=new RewriteRuleSubtreeStream(adaptor,"rule confOption");

		 
		  ConfObjectInfo> operatorInfo;

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:347:3: ( (targets+= VAR ( ',' targets+= VAR )* '=' )? (packageName= ID ':' )? name= ID {...}? => ( ( VAR )=> input[operatorInfo, $op] ( ( ',' )=> ',' input[operatorInfo, $op] )* )? ( confOption[operatorInfo, $op] )* ->)
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:348:2: (targets+= VAR ( ',' targets+= VAR )* '=' )? (packageName= ID ':' )? name= ID {...}? => ( ( VAR )=> input[operatorInfo, $op] ( ( ',' )=> ',' input[operatorInfo, $op] )* )? ( confOption[operatorInfo, $op] )*
			{
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:348:2: (targets+= VAR ( ',' targets+= VAR )* '=' )?
			int alt66=2;
			int LA66_0 = input.LA(1);
			if ( (LA66_0==VAR) ) {
				alt66=1;
			}
			switch (alt66) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:348:2: targets+= VAR ( ',' targets+= VAR )* '='
					{
					targets=(Token)match(input,VAR,FOLLOW_VAR_in_genericOperator2339); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_VAR.add(targets);

					if (list_targets==null) list_targets=new ArrayList();
					list_targets.add(targets);
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:348:15: ( ',' targets+= VAR )*
					loop65:
					while (true) {
						int alt65=2;
						int LA65_0 = input.LA(1);
						if ( (LA65_0==43) ) {
							alt65=1;
						}

						switch (alt65) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:348:16: ',' targets+= VAR
							{
							char_literal111=(Token)match(input,43,FOLLOW_43_in_genericOperator2342); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_43.add(char_literal111);

							targets=(Token)match(input,VAR,FOLLOW_VAR_in_genericOperator2346); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_VAR.add(targets);

							if (list_targets==null) list_targets=new ArrayList();
							list_targets.add(targets);
							}
							break;

						default :
							break loop65;
						}
					}

					char_literal112=(Token)match(input,51,FOLLOW_51_in_genericOperator2350); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_51.add(char_literal112);

					}
					break;

			}

			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:349:2: (packageName= ID ':' )?
			int alt67=2;
			int LA67_0 = input.LA(1);
			if ( (LA67_0==ID) ) {
				int LA67_1 = input.LA(2);
				if ( (LA67_1==47) ) {
					alt67=1;
				}
			}
			switch (alt67) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:349:2: packageName= ID ':'
					{
					packageName=(Token)match(input,ID,FOLLOW_ID_in_genericOperator2358); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ID.add(packageName);

					char_literal113=(Token)match(input,47,FOLLOW_47_in_genericOperator2360); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_47.add(char_literal113);

					}
					break;

			}

			name=(Token)match(input,ID,FOLLOW_ID_in_genericOperator2366); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ID.add(name);

			if ( !(( (operatorInfo = findOperatorGreedily((packageName!=null?packageName.getText():null), name)) != null  )) ) {
				if (state.backtracking>0) {state.failed=true; return retval;}
				throw new FailedPredicateException(input, "genericOperator", " (operatorInfo = findOperatorGreedily($packageName.text, $name)) != null  ");
			}
			if ( state.backtracking==0 ) { 
			  operator_stack.peek().result = retval.op = operatorInfo.newInstance(); 
			  // add scope for input variables and recursive definition
			  if(state.backtracking == 0) 
			    addScope();   
			}
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:357:2: ( ( VAR )=> input[operatorInfo, $op] ( ( ',' )=> ',' input[operatorInfo, $op] )* )?
			int alt69=2;
			int LA69_0 = input.LA(1);
			if ( (LA69_0==VAR) && (synpred20_Meteor())) {
				alt69=1;
			}
			switch (alt69) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:357:2: ( VAR )=> input[operatorInfo, $op] ( ( ',' )=> ',' input[operatorInfo, $op] )*
					{
					pushFollow(FOLLOW_input_in_genericOperator2382);
					input114=input(operatorInfo, retval.op);
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_input.add(input114.getTree());
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:357:35: ( ( ',' )=> ',' input[operatorInfo, $op] )*
					loop68:
					while (true) {
						int alt68=2;
						int LA68_0 = input.LA(1);
						if ( (LA68_0==43) ) {
							int LA68_2 = input.LA(2);
							if ( (LA68_2==VAR) ) {
								int LA68_3 = input.LA(3);
								if ( (synpred21_Meteor()) ) {
									alt68=1;
								}

							}

						}

						switch (alt68) {
						case 1 :
							// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:357:36: ( ',' )=> ',' input[operatorInfo, $op]
							{
							char_literal115=(Token)match(input,43,FOLLOW_43_in_genericOperator2391); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_43.add(char_literal115);

							pushFollow(FOLLOW_input_in_genericOperator2393);
							input116=input(operatorInfo, retval.op);
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_input.add(input116.getTree());
							}
							break;

						default :
							break loop68;
						}
					}

					}
					break;

			}

			if ( state.backtracking==0 ) { // register output names for explicit references to output 
			  if(list_targets != null)
			    for(int index = 0; index < list_targets.size(); index++)
			      putVariable((Token) list_targets.get(index), new JsonStreamExpression(retval.op.getOutput(index)), 1);   
			}
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:363:11: ( confOption[operatorInfo, $op] )*
			loop70:
			while (true) {
				int alt70=2;
				int LA70_0 = input.LA(1);
				if ( (LA70_0==ID) ) {
					alt70=1;
				}

				switch (alt70) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:363:11: confOption[operatorInfo, $op]
					{
					pushFollow(FOLLOW_confOption_in_genericOperator2403);
					confOption117=confOption(operatorInfo, retval.op);
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_confOption.add(confOption117.getTree());
					}
					break;

				default :
					break loop70;
				}
			}

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

			root_0 = (EvaluationExpression)adaptor.nil();
			// 364:3: ->
			{
				root_0 = null;
			}


			retval.tree = root_0;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
			if ( state.backtracking==0 ) {
			  removeScope();
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class confOption_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "confOption"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:366:1: confOption[ConfObjectInfo info, ConfigurableSopremoType object] : name= ID {...}? =>expr= ternaryExpression ->;
	public final MeteorParser.confOption_return confOption(ConfObjectInfo info, ConfigurableSopremoType object) throws RecognitionException {
		MeteorParser.confOption_return retval = new MeteorParser.confOption_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token name=null;
		ParserRuleReturnScope expr =null;

		EvaluationExpression name_tree=null;
		RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
		RewriteRuleSubtreeStream stream_ternaryExpression=new RewriteRuleSubtreeStream(adaptor,"rule ternaryExpression");


		 ConfObjectInfo.ConfObjectPropertyInfo property = null;

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:369:3: (name= ID {...}? =>expr= ternaryExpression ->)
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:370:3: name= ID {...}? =>expr= ternaryExpression
			{
			name=(Token)match(input,ID,FOLLOW_ID_in_confOption2430); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ID.add(name);

			if ( !(( (property = findPropertyGreedily(object, info, name)) != null )) ) {
				if (state.backtracking>0) {state.failed=true; return retval;}
				throw new FailedPredicateException(input, "confOption", " (property = findPropertyGreedily(object, info, name)) != null ");
			}
			pushFollow(FOLLOW_ternaryExpression_in_confOption2440);
			expr=ternaryExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_ternaryExpression.add(expr.getTree());
			if ( state.backtracking==0 ) { property.setValue(object, (expr!=null?((EvaluationExpression)expr.getTree()):null)); }
			// AST REWRITE
			// elements: 
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (EvaluationExpression)adaptor.nil();
			// 372:69: ->
			{
				root_0 = null;
			}


			retval.tree = root_0;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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


	public static class input_return extends ParserRuleReturnScope {
		EvaluationExpression tree;
		@Override
		public EvaluationExpression getTree() { return tree; }
	};


	// $ANTLR start "input"
	// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:374:1: input[ConfObjectInfo info, Operator object] : (name= VAR IN )? from= VAR ({...}? =>expr= ternaryExpression )? ->;
	public final MeteorParser.input_return input(ConfObjectInfo info, Operator object) throws RecognitionException {
		MeteorParser.input_return retval = new MeteorParser.input_return();
		retval.start = input.LT(1);

		EvaluationExpression root_0 = null;

		Token name=null;
		Token from=null;
		Token IN118=null;
		ParserRuleReturnScope expr =null;

		EvaluationExpression name_tree=null;
		EvaluationExpression from_tree=null;
		EvaluationExpression IN118_tree=null;
		RewriteRuleTokenStream stream_VAR=new RewriteRuleTokenStream(adaptor,"token VAR");
		RewriteRuleTokenStream stream_IN=new RewriteRuleTokenStream(adaptor,"token IN");
		RewriteRuleSubtreeStream stream_ternaryExpression=new RewriteRuleSubtreeStream(adaptor,"rule ternaryExpression");


		 ConfObjectInfo.ConfObjectIndexedPropertyInfo inputProperty = null;

		try {
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:377:3: ( (name= VAR IN )? from= VAR ({...}? =>expr= ternaryExpression )? ->)
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:377:5: (name= VAR IN )? from= VAR ({...}? =>expr= ternaryExpression )?
			{
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:377:5: (name= VAR IN )?
			int alt71=2;
			int LA71_0 = input.LA(1);
			if ( (LA71_0==VAR) ) {
				int LA71_1 = input.LA(2);
				if ( (LA71_1==IN) ) {
					alt71=1;
				}
			}
			switch (alt71) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:377:6: name= VAR IN
					{
					name=(Token)match(input,VAR,FOLLOW_VAR_in_input2462); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_VAR.add(name);

					IN118=(Token)match(input,IN,FOLLOW_IN_in_input2464); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IN.add(IN118);

					}
					break;

			}

			from=(Token)match(input,VAR,FOLLOW_VAR_in_input2470); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_VAR.add(from);

			if ( state.backtracking==0 ) { 
			  int inputIndex = operator_stack.peek().numInputs++;
			  JsonStreamExpression input = getVariableSafely(from);
			  object.setInput(inputIndex, input.getStream());
			  
			  if(operator_stack.size() == 1) {
				  JsonStreamExpression inputExpression = new JsonStreamExpression(input.getStream(), inputIndex);
				  putVariable(name != null ? name : from, inputExpression);
			  }
			}
			// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:388:2: ({...}? =>expr= ternaryExpression )?
			int alt72=2;
			int LA72_0 = input.LA(1);
			if ( (LA72_0==DECIMAL||LA72_0==FN||LA72_0==INTEGER||(LA72_0 >= STRING && LA72_0 <= UINT)||LA72_0==VAR||LA72_0==35||(LA72_0 >= 38 && LA72_0 <= 39)||LA72_0==42||LA72_0==45||LA72_0==57||(LA72_0 >= 59 && LA72_0 <= 60)||LA72_0==62||LA72_0==65||LA72_0==68) && (( (findInputPropertyRelunctantly(object, info, input.LT(1), false) != null) ))) {
				alt72=1;
			}
			else if ( (LA72_0==ID) ) {
				int LA72_5 = input.LA(2);
				if ( (( (findInputPropertyRelunctantly(object, info, input.LT(1), false) != null) )) ) {
					alt72=1;
				}
			}
			switch (alt72) {
				case 1 :
					// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:388:2: {...}? =>expr= ternaryExpression
					{
					if ( !(( (findInputPropertyRelunctantly(object, info, input.LT(1), false) != null) )) ) {
						if (state.backtracking>0) {state.failed=true; return retval;}
						throw new FailedPredicateException(input, "input", " (findInputPropertyRelunctantly(object, info, input.LT(1), false) != null) ");
					}
					if ( state.backtracking==0 ) { inputProperty = findInputPropertyRelunctantly(object, info, input.LT(1), true); }
					pushFollow(FOLLOW_ternaryExpression_in_input2487);
					expr=ternaryExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_ternaryExpression.add(expr.getTree());
					if ( state.backtracking==0 ) { inputProperty.setValue(object, operator_stack.peek().numInputs-1, (expr!=null?((EvaluationExpression)expr.getTree()):null)); }
					}
					break;

			}

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

			root_0 = (EvaluationExpression)adaptor.nil();
			// 391:4: ->
			{
				root_0 = null;
			}


			retval.tree = root_0;
			}

			}

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

			if ( state.backtracking==0 ) {
			retval.tree = (EvaluationExpression)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}

		catch (RecognitionException e) {
		  throw e;
		}

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

	// $ANTLR start synpred1_Meteor
	public final void synpred1_Meteor_fragment() throws RecognitionException {
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:102:5: ( ID ( ID | VAR ) )
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:102:6: ID ( ID | VAR )
		{
		match(input,ID,FOLLOW_ID_in_synpred1_Meteor367); if (state.failed) return;

		if ( input.LA(1)==ID||input.LA(1)==VAR ) {
			input.consume();
			state.errorRecovery=false;
			state.failed=false;
		}
		else {
			if (state.backtracking>0) {state.failed=true; return;}
			MismatchedSetException mse = new MismatchedSetException(null,input);
			throw mse;
		}
		}

	}
	// $ANTLR end synpred1_Meteor

	// $ANTLR start synpred2_Meteor
	public final void synpred2_Meteor_fragment() throws RecognitionException {
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:106:4: ( orExpression '?' )
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:106:5: orExpression '?'
		{
		pushFollow(FOLLOW_orExpression_in_synpred2_Meteor395);
		orExpression();
		state._fsp--;
		if (state.failed) return;

		match(input,55,FOLLOW_55_in_synpred2_Meteor397); if (state.failed) return;

		}

	}
	// $ANTLR end synpred2_Meteor

	// $ANTLR start synpred3_Meteor
	public final void synpred3_Meteor_fragment() throws RecognitionException {
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:108:4: ( orExpression IF )
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:108:5: orExpression IF
		{
		pushFollow(FOLLOW_orExpression_in_synpred3_Meteor437);
		orExpression();
		state._fsp--;
		if (state.failed) return;

		match(input,IF,FOLLOW_IF_in_synpred3_Meteor439); if (state.failed) return;

		}

	}
	// $ANTLR end synpred3_Meteor

	// $ANTLR start synpred4_Meteor
	public final void synpred4_Meteor_fragment() throws RecognitionException {
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:160:4: ( '(' ID ')' )
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:160:5: '(' ID ')'
		{
		match(input,39,FOLLOW_39_in_synpred4_Meteor908); if (state.failed) return;

		match(input,ID,FOLLOW_ID_in_synpred4_Meteor910); if (state.failed) return;

		match(input,40,FOLLOW_40_in_synpred4_Meteor912); if (state.failed) return;

		}

	}
	// $ANTLR end synpred4_Meteor

	// $ANTLR start synpred5_Meteor
	public final void synpred5_Meteor_fragment() throws RecognitionException {
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:167:5: ( pathExpression[EvaluationExpression.VALUE] )
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:167:6: pathExpression[EvaluationExpression.VALUE]
		{
		pushFollow(FOLLOW_pathExpression_in_synpred5_Meteor975);
		pathExpression(EvaluationExpression.VALUE);
		state._fsp--;
		if (state.failed) return;

		}

	}
	// $ANTLR end synpred5_Meteor

	// $ANTLR start synpred6_Meteor
	public final void synpred6_Meteor_fragment() throws RecognitionException {
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:175:5: ( '?.' ID '(' )
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:175:6: '?.' ID '('
		{
		match(input,56,FOLLOW_56_in_synpred6_Meteor1031); if (state.failed) return;

		match(input,ID,FOLLOW_ID_in_synpred6_Meteor1033); if (state.failed) return;

		match(input,39,FOLLOW_39_in_synpred6_Meteor1035); if (state.failed) return;

		}

	}
	// $ANTLR end synpred6_Meteor

	// $ANTLR start synpred7_Meteor
	public final void synpred7_Meteor_fragment() throws RecognitionException {
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:176:8: ( pathSegment )
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:176:9: pathSegment
		{
		pushFollow(FOLLOW_pathSegment_in_synpred7_Meteor1054);
		pathSegment();
		state._fsp--;
		if (state.failed) return;

		}

	}
	// $ANTLR end synpred7_Meteor

	// $ANTLR start synpred8_Meteor
	public final void synpred8_Meteor_fragment() throws RecognitionException {
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:179:5: ( '.' ID '(' )
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:179:6: '.' ID '('
		{
		match(input,46,FOLLOW_46_in_synpred8_Meteor1102); if (state.failed) return;

		match(input,ID,FOLLOW_ID_in_synpred8_Meteor1104); if (state.failed) return;

		match(input,39,FOLLOW_39_in_synpred8_Meteor1106); if (state.failed) return;

		}

	}
	// $ANTLR end synpred8_Meteor

	// $ANTLR start synpred9_Meteor
	public final void synpred9_Meteor_fragment() throws RecognitionException {
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:180:8: ( pathSegment )
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:180:9: pathSegment
		{
		pushFollow(FOLLOW_pathSegment_in_synpred9_Meteor1125);
		pathSegment();
		state._fsp--;
		if (state.failed) return;

		}

	}
	// $ANTLR end synpred9_Meteor

	// $ANTLR start synpred10_Meteor
	public final void synpred10_Meteor_fragment() throws RecognitionException {
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:183:6: ( pathSegment )
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:183:7: pathSegment
		{
		pushFollow(FOLLOW_pathSegment_in_synpred10_Meteor1167);
		pathSegment();
		state._fsp--;
		if (state.failed) return;

		}

	}
	// $ANTLR end synpred10_Meteor

	// $ANTLR start synpred11_Meteor
	public final void synpred11_Meteor_fragment() throws RecognitionException {
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:190:5: ( '?.' )
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:190:6: '?.'
		{
		match(input,56,FOLLOW_56_in_synpred11_Meteor1221); if (state.failed) return;

		}

	}
	// $ANTLR end synpred11_Meteor

	// $ANTLR start synpred12_Meteor
	public final void synpred12_Meteor_fragment() throws RecognitionException {
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:191:5: ( '.' )
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:191:6: '.'
		{
		match(input,46,FOLLOW_46_in_synpred12_Meteor1252); if (state.failed) return;

		}

	}
	// $ANTLR end synpred12_Meteor

	// $ANTLR start synpred13_Meteor
	public final void synpred13_Meteor_fragment() throws RecognitionException {
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:192:5: ( '[' )
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:192:6: '['
		{
		match(input,57,FOLLOW_57_in_synpred13_Meteor1281); if (state.failed) return;

		}

	}
	// $ANTLR end synpred13_Meteor

	// $ANTLR start synpred14_Meteor
	public final void synpred14_Meteor_fragment() throws RecognitionException {
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:195:19: ( '.' methodCall[null] )
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:195:20: '.' methodCall[null]
		{
		match(input,46,FOLLOW_46_in_synpred14_Meteor1304); if (state.failed) return;

		pushFollow(FOLLOW_methodCall_in_synpred14_Meteor1306);
		methodCall(null);
		state._fsp--;
		if (state.failed) return;

		}

	}
	// $ANTLR end synpred14_Meteor

	// $ANTLR start synpred15_Meteor
	public final void synpred15_Meteor_fragment() throws RecognitionException {
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:205:4: ( ID '(' )
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:205:5: ID '('
		{
		match(input,ID,FOLLOW_ID_in_synpred15_Meteor1445); if (state.failed) return;

		match(input,39,FOLLOW_39_in_synpred15_Meteor1447); if (state.failed) return;

		}

	}
	// $ANTLR end synpred15_Meteor

	// $ANTLR start synpred16_Meteor
	public final void synpred16_Meteor_fragment() throws RecognitionException {
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:207:5: ( FN )
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:207:6: FN
		{
		match(input,FN,FOLLOW_FN_in_synpred16_Meteor1463); if (state.failed) return;

		}

	}
	// $ANTLR end synpred16_Meteor

	// $ANTLR start synpred17_Meteor
	public final void synpred17_Meteor_fragment() throws RecognitionException {
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:211:6: ( ID ':' )
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:211:7: ID ':'
		{
		match(input,ID,FOLLOW_ID_in_synpred17_Meteor1507); if (state.failed) return;

		match(input,47,FOLLOW_47_in_synpred17_Meteor1509); if (state.failed) return;

		}

	}
	// $ANTLR end synpred17_Meteor

	// $ANTLR start synpred18_Meteor
	public final void synpred18_Meteor_fragment() throws RecognitionException {
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:235:10: ( ID ':' )
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:235:11: ID ':'
		{
		match(input,ID,FOLLOW_ID_in_synpred18_Meteor1689); if (state.failed) return;

		match(input,47,FOLLOW_47_in_synpred18_Meteor1691); if (state.failed) return;

		}

	}
	// $ANTLR end synpred18_Meteor

	// $ANTLR start synpred19_Meteor
	public final void synpred19_Meteor_fragment() throws RecognitionException {
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:239:5: ( ID ':' )
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:239:6: ID ':'
		{
		match(input,ID,FOLLOW_ID_in_synpred19_Meteor1735); if (state.failed) return;

		match(input,47,FOLLOW_47_in_synpred19_Meteor1737); if (state.failed) return;

		}

	}
	// $ANTLR end synpred19_Meteor

	// $ANTLR start synpred20_Meteor
	public final void synpred20_Meteor_fragment() throws RecognitionException {
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:357:2: ( VAR )
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:357:3: VAR
		{
		match(input,VAR,FOLLOW_VAR_in_synpred20_Meteor2378); if (state.failed) return;

		}

	}
	// $ANTLR end synpred20_Meteor

	// $ANTLR start synpred21_Meteor
	public final void synpred21_Meteor_fragment() throws RecognitionException {
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:357:36: ( ',' )
		// /home/arv/workspace/stratosphere-sopremo/meteor/meteor-meteor/src/main/java/eu/stratosphere/meteor/Meteor.g:357:37: ','
		{
		match(input,43,FOLLOW_43_in_synpred21_Meteor2387); if (state.failed) return;

		}

	}
	// $ANTLR end synpred21_Meteor

	// Delegated rules

	public final boolean synpred14_Meteor() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred14_Meteor_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred19_Meteor() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred19_Meteor_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred17_Meteor() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred17_Meteor_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_Meteor() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred2_Meteor_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred13_Meteor() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred13_Meteor_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred8_Meteor() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred8_Meteor_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_Meteor() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred6_Meteor_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred18_Meteor() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred18_Meteor_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred15_Meteor() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred15_Meteor_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred1_Meteor() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred1_Meteor_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_Meteor() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred3_Meteor_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred5_Meteor() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred5_Meteor_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_Meteor() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred10_Meteor_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_Meteor() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred12_Meteor_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_Meteor() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred11_Meteor_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_Meteor() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred20_Meteor_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred21_Meteor() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred21_Meteor_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred4_Meteor() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred4_Meteor_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred7_Meteor() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred7_Meteor_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred9_Meteor() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred9_Meteor_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred16_Meteor() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred16_Meteor_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_statement_in_script121 = new BitSet(new long[]{0x0001000000000000L});
	public static final BitSet FOLLOW_48_in_script123 = new BitSet(new long[]{0xA000000200008002L,0x0000000000000001L});
	public static final BitSet FOLLOW_operator_in_statement137 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_packageImport_in_statement141 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_functionDefinition_in_statement145 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_javaudf_in_statement149 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_adhocSource_in_statement153 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_functionCall_in_statement161 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_63_in_packageImport178 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_ID_in_packageImport182 = new BitSet(new long[]{0x0000080000000002L});
	public static final BitSet FOLLOW_43_in_packageImport193 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_ID_in_packageImport197 = new BitSet(new long[]{0x0000080000000002L});
	public static final BitSet FOLLOW_ID_in_functionDefinition215 = new BitSet(new long[]{0x0008000000000000L});
	public static final BitSet FOLLOW_51_in_functionDefinition217 = new BitSet(new long[]{0x0000000000002000L});
	public static final BitSet FOLLOW_inlineFunction_in_functionDefinition221 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FN_in_inlineFunction247 = new BitSet(new long[]{0x0000008000000000L});
	public static final BitSet FOLLOW_39_in_inlineFunction249 = new BitSet(new long[]{0x0000010000008000L});
	public static final BitSet FOLLOW_ID_in_inlineFunction258 = new BitSet(new long[]{0x0000090000000000L});
	public static final BitSet FOLLOW_43_in_inlineFunction265 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_ID_in_inlineFunction269 = new BitSet(new long[]{0x0000090000000000L});
	public static final BitSet FOLLOW_40_in_inlineFunction280 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_65_in_inlineFunction290 = new BitSet(new long[]{0x7A0024CA6004A080L,0x0000000000000013L});
	public static final BitSet FOLLOW_expression_in_inlineFunction294 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_67_in_inlineFunction296 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_javaudf316 = new BitSet(new long[]{0x0008000000000000L});
	public static final BitSet FOLLOW_51_in_javaudf318 = new BitSet(new long[]{0x0000000000080000L});
	public static final BitSet FOLLOW_JAVAUDF_in_javaudf320 = new BitSet(new long[]{0x0000008000000000L});
	public static final BitSet FOLLOW_39_in_javaudf322 = new BitSet(new long[]{0x0000000020000000L});
	public static final BitSet FOLLOW_STRING_in_javaudf326 = new BitSet(new long[]{0x0000010000000000L});
	public static final BitSet FOLLOW_40_in_javaudf328 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ternaryExpression_in_contextAwareExpression356 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_operatorExpression_in_expression379 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ternaryExpression_in_expression385 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_orExpression_in_ternaryExpression403 = new BitSet(new long[]{0x0080000000000000L});
	public static final BitSet FOLLOW_55_in_ternaryExpression405 = new BitSet(new long[]{0x5A00A4CA6004A080L,0x0000000000000012L});
	public static final BitSet FOLLOW_orExpression_in_ternaryExpression409 = new BitSet(new long[]{0x0000800000000000L});
	public static final BitSet FOLLOW_47_in_ternaryExpression412 = new BitSet(new long[]{0x5A0024CA6004A080L,0x0000000000000012L});
	public static final BitSet FOLLOW_orExpression_in_ternaryExpression416 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_orExpression_in_ternaryExpression445 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_IF_in_ternaryExpression447 = new BitSet(new long[]{0x5A0024CA6004A080L,0x0000000000000012L});
	public static final BitSet FOLLOW_orExpression_in_ternaryExpression451 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_orExpression_in_ternaryExpression474 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_andExpression_in_orExpression487 = new BitSet(new long[]{0x0000000001000002L,0x0000000000000004L});
	public static final BitSet FOLLOW_OR_in_orExpression491 = new BitSet(new long[]{0x5A0024CA6004A080L,0x0000000000000012L});
	public static final BitSet FOLLOW_66_in_orExpression495 = new BitSet(new long[]{0x5A0024CA6004A080L,0x0000000000000012L});
	public static final BitSet FOLLOW_andExpression_in_orExpression500 = new BitSet(new long[]{0x0000000001000002L,0x0000000000000004L});
	public static final BitSet FOLLOW_elementExpression_in_andExpression529 = new BitSet(new long[]{0x0000002000000012L});
	public static final BitSet FOLLOW_AND_in_andExpression533 = new BitSet(new long[]{0x5A0024CA6004A080L,0x0000000000000012L});
	public static final BitSet FOLLOW_37_in_andExpression537 = new BitSet(new long[]{0x5A0024CA6004A080L,0x0000000000000012L});
	public static final BitSet FOLLOW_elementExpression_in_andExpression542 = new BitSet(new long[]{0x0000002000000012L});
	public static final BitSet FOLLOW_comparisonExpression_in_elementExpression571 = new BitSet(new long[]{0x0000000000220002L});
	public static final BitSet FOLLOW_NOT_in_elementExpression576 = new BitSet(new long[]{0x0000000000020000L});
	public static final BitSet FOLLOW_IN_in_elementExpression579 = new BitSet(new long[]{0x5A0024CA6004A080L,0x0000000000000012L});
	public static final BitSet FOLLOW_comparisonExpression_in_elementExpression583 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_arithmeticExpression_in_comparisonExpression624 = new BitSet(new long[]{0x0076001000000002L});
	public static final BitSet FOLLOW_50_in_comparisonExpression630 = new BitSet(new long[]{0x5A0024CA6004A080L,0x0000000000000012L});
	public static final BitSet FOLLOW_54_in_comparisonExpression636 = new BitSet(new long[]{0x5A0024CA6004A080L,0x0000000000000012L});
	public static final BitSet FOLLOW_49_in_comparisonExpression642 = new BitSet(new long[]{0x5A0024CA6004A080L,0x0000000000000012L});
	public static final BitSet FOLLOW_53_in_comparisonExpression648 = new BitSet(new long[]{0x5A0024CA6004A080L,0x0000000000000012L});
	public static final BitSet FOLLOW_52_in_comparisonExpression654 = new BitSet(new long[]{0x5A0024CA6004A080L,0x0000000000000012L});
	public static final BitSet FOLLOW_36_in_comparisonExpression660 = new BitSet(new long[]{0x5A0024CA6004A080L,0x0000000000000012L});
	public static final BitSet FOLLOW_arithmeticExpression_in_comparisonExpression665 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_multiplicationExpression_in_arithmeticExpression745 = new BitSet(new long[]{0x0000120000000002L});
	public static final BitSet FOLLOW_41_in_arithmeticExpression751 = new BitSet(new long[]{0x5A0024CA6004A080L,0x0000000000000012L});
	public static final BitSet FOLLOW_44_in_arithmeticExpression757 = new BitSet(new long[]{0x5A0024CA6004A080L,0x0000000000000012L});
	public static final BitSet FOLLOW_multiplicationExpression_in_arithmeticExpression762 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_preincrementExpression_in_multiplicationExpression805 = new BitSet(new long[]{0x0000000018000002L});
	public static final BitSet FOLLOW_STAR_in_multiplicationExpression811 = new BitSet(new long[]{0x5A0024CA6004A080L,0x0000000000000012L});
	public static final BitSet FOLLOW_SLASH_in_multiplicationExpression817 = new BitSet(new long[]{0x5A0024CA6004A080L,0x0000000000000012L});
	public static final BitSet FOLLOW_preincrementExpression_in_multiplicationExpression822 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_42_in_preincrementExpression863 = new BitSet(new long[]{0x5A0024CA6004A080L,0x0000000000000012L});
	public static final BitSet FOLLOW_preincrementExpression_in_preincrementExpression865 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_45_in_preincrementExpression870 = new BitSet(new long[]{0x5A0024CA6004A080L,0x0000000000000012L});
	public static final BitSet FOLLOW_preincrementExpression_in_preincrementExpression872 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_unaryExpression_in_preincrementExpression877 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_castExpression_in_unaryExpression896 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_39_in_castExpression916 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_ID_in_castExpression920 = new BitSet(new long[]{0x0000010000000000L});
	public static final BitSet FOLLOW_40_in_castExpression922 = new BitSet(new long[]{0x5A0000C26004A080L,0x0000000000000002L});
	public static final BitSet FOLLOW_generalPathExpression_in_castExpression926 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_generalPathExpression_in_castExpression939 = new BitSet(new long[]{0x0000000000008002L});
	public static final BitSet FOLLOW_ID_in_castExpression944 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_ID_in_castExpression948 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_valueExpression_in_generalPathExpression967 = new BitSet(new long[]{0x0300400000000002L});
	public static final BitSet FOLLOW_pathExpression_in_generalPathExpression982 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pathExpression_in_contextAwarePathExpression1011 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_56_in_pathExpression1039 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_methodCall_in_pathExpression1043 = new BitSet(new long[]{0x0300400000000002L});
	public static final BitSet FOLLOW_pathExpression_in_pathExpression1060 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_46_in_pathExpression1110 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_methodCall_in_pathExpression1114 = new BitSet(new long[]{0x0300400000000002L});
	public static final BitSet FOLLOW_pathExpression_in_pathExpression1131 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pathSegment_in_pathExpression1157 = new BitSet(new long[]{0x0300400000000002L});
	public static final BitSet FOLLOW_pathExpression_in_pathExpression1173 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_56_in_pathSegment1225 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_ID_in_pathSegment1229 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_46_in_pathSegment1257 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_ID_in_pathSegment1261 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_arrayAccess_in_pathSegment1286 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_57_in_arrayAccess1296 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_STAR_in_arrayAccess1298 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_58_in_arrayAccess1300 = new BitSet(new long[]{0x0300400000000000L});
	public static final BitSet FOLLOW_46_in_arrayAccess1311 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_methodCall_in_arrayAccess1315 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pathSegment_in_arrayAccess1338 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_57_in_arrayAccess1359 = new BitSet(new long[]{0x0000000040040000L});
	public static final BitSet FOLLOW_INTEGER_in_arrayAccess1364 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_UINT_in_arrayAccess1370 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_58_in_arrayAccess1373 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_57_in_arrayAccess1391 = new BitSet(new long[]{0x0000000040040000L});
	public static final BitSet FOLLOW_INTEGER_in_arrayAccess1396 = new BitSet(new long[]{0x0000800000000000L});
	public static final BitSet FOLLOW_UINT_in_arrayAccess1402 = new BitSet(new long[]{0x0000800000000000L});
	public static final BitSet FOLLOW_47_in_arrayAccess1405 = new BitSet(new long[]{0x0000000040040000L});
	public static final BitSet FOLLOW_INTEGER_in_arrayAccess1410 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_UINT_in_arrayAccess1416 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_58_in_arrayAccess1419 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_functionCall_in_valueExpression1451 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_functionReference_in_valueExpression1456 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_inlineFunction_in_valueExpression1469 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_parenthesesExpression_in_valueExpression1483 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_literal_in_valueExpression1489 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_VAR_in_valueExpression1495 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_valueExpression1515 = new BitSet(new long[]{0x0000800000000000L});
	public static final BitSet FOLLOW_47_in_valueExpression1517 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_ID_in_valueExpression1523 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_arrayCreation_in_valueExpression1543 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_objectCreation_in_valueExpression1549 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_operator_in_operatorExpression1561 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_39_in_parenthesesExpression1580 = new BitSet(new long[]{0x7A0024CA6004A080L,0x0000000000000013L});
	public static final BitSet FOLLOW_expression_in_parenthesesExpression1582 = new BitSet(new long[]{0x0000010000000000L});
	public static final BitSet FOLLOW_40_in_parenthesesExpression1584 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_methodCall1614 = new BitSet(new long[]{0x0000800000000000L});
	public static final BitSet FOLLOW_47_in_methodCall1616 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_ID_in_methodCall1622 = new BitSet(new long[]{0x0000008000000000L});
	public static final BitSet FOLLOW_39_in_methodCall1624 = new BitSet(new long[]{0x7A0025CA6004A080L,0x0000000000000013L});
	public static final BitSet FOLLOW_expression_in_methodCall1633 = new BitSet(new long[]{0x0000090000000000L});
	public static final BitSet FOLLOW_43_in_methodCall1642 = new BitSet(new long[]{0x7A0024CA6004A080L,0x0000000000000013L});
	public static final BitSet FOLLOW_expression_in_methodCall1647 = new BitSet(new long[]{0x0000090000000000L});
	public static final BitSet FOLLOW_40_in_methodCall1659 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_methodCall_in_functionCall1674 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_38_in_functionReference1685 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_ID_in_functionReference1697 = new BitSet(new long[]{0x0000800000000000L});
	public static final BitSet FOLLOW_47_in_functionReference1699 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_ID_in_functionReference1705 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_fieldAssignment1741 = new BitSet(new long[]{0x0000800000000000L});
	public static final BitSet FOLLOW_47_in_fieldAssignment1743 = new BitSet(new long[]{0x7A0024CA6004A080L,0x0000000000000013L});
	public static final BitSet FOLLOW_expression_in_fieldAssignment1745 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_VAR_in_fieldAssignment1762 = new BitSet(new long[]{0x0300400000000000L});
	public static final BitSet FOLLOW_46_in_fieldAssignment1771 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_STAR_in_fieldAssignment1773 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_contextAwarePathExpression_in_fieldAssignment1790 = new BitSet(new long[]{0x0000800000000002L});
	public static final BitSet FOLLOW_47_in_fieldAssignment1801 = new BitSet(new long[]{0x7A0024CA6004A080L,0x0000000000000013L});
	public static final BitSet FOLLOW_expression_in_fieldAssignment1805 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_65_in_objectCreation1870 = new BitSet(new long[]{0x0000000200008000L,0x0000000000000008L});
	public static final BitSet FOLLOW_fieldAssignment_in_objectCreation1873 = new BitSet(new long[]{0x0000080000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_43_in_objectCreation1876 = new BitSet(new long[]{0x0000000200008000L});
	public static final BitSet FOLLOW_fieldAssignment_in_objectCreation1878 = new BitSet(new long[]{0x0000080000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_43_in_objectCreation1882 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_67_in_objectCreation1887 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_62_in_literal1925 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_59_in_literal1941 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DECIMAL_in_literal1957 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STRING_in_literal1973 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_UINT_in_literal1991 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INTEGER_in_literal1997 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_60_in_literal2013 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_57_in_arrayCreation2037 = new BitSet(new long[]{0x7E0024CA6004A080L,0x0000000000000013L});
	public static final BitSet FOLLOW_expression_in_arrayCreation2042 = new BitSet(new long[]{0x0400080000000000L});
	public static final BitSet FOLLOW_43_in_arrayCreation2045 = new BitSet(new long[]{0x7A0024CA6004A080L,0x0000000000000013L});
	public static final BitSet FOLLOW_expression_in_arrayCreation2049 = new BitSet(new long[]{0x0400080000000000L});
	public static final BitSet FOLLOW_43_in_arrayCreation2053 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_58_in_arrayCreation2058 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_readOperator_in_operator2084 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_writeOperator_in_operator2092 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_genericOperator_in_operator2100 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_VAR_in_adhocSource2114 = new BitSet(new long[]{0x0008000000000000L});
	public static final BitSet FOLLOW_51_in_adhocSource2116 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_arrayCreation_in_adhocSource2120 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_VAR_in_readOperator2148 = new BitSet(new long[]{0x0008000000000000L});
	public static final BitSet FOLLOW_51_in_readOperator2150 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_61_in_readOperator2158 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_ID_in_readOperator2164 = new BitSet(new long[]{0x0000800000000000L});
	public static final BitSet FOLLOW_47_in_readOperator2166 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_ID_in_readOperator2171 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_ID_in_readOperator2180 = new BitSet(new long[]{0x0000000020008000L});
	public static final BitSet FOLLOW_ID_in_readOperator2185 = new BitSet(new long[]{0x0000000020000000L});
	public static final BitSet FOLLOW_STRING_in_readOperator2190 = new BitSet(new long[]{0x0000000000008002L});
	public static final BitSet FOLLOW_ID_in_readOperator2196 = new BitSet(new long[]{0x0000008000000000L});
	public static final BitSet FOLLOW_39_in_readOperator2198 = new BitSet(new long[]{0x0000000020000000L});
	public static final BitSet FOLLOW_STRING_in_readOperator2202 = new BitSet(new long[]{0x0000010000000000L});
	public static final BitSet FOLLOW_40_in_readOperator2204 = new BitSet(new long[]{0x0000000000008002L});
	public static final BitSet FOLLOW_confOption_in_readOperator2211 = new BitSet(new long[]{0x0000000000008002L});
	public static final BitSet FOLLOW_64_in_writeOperator2240 = new BitSet(new long[]{0x0000000200008000L});
	public static final BitSet FOLLOW_ID_in_writeOperator2251 = new BitSet(new long[]{0x0000800000000000L});
	public static final BitSet FOLLOW_47_in_writeOperator2253 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_ID_in_writeOperator2258 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_VAR_in_writeOperator2264 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_ID_in_writeOperator2272 = new BitSet(new long[]{0x0000000020008000L});
	public static final BitSet FOLLOW_ID_in_writeOperator2281 = new BitSet(new long[]{0x0000000020000000L});
	public static final BitSet FOLLOW_STRING_in_writeOperator2286 = new BitSet(new long[]{0x0000000000008002L});
	public static final BitSet FOLLOW_ID_in_writeOperator2292 = new BitSet(new long[]{0x0000008000000000L});
	public static final BitSet FOLLOW_39_in_writeOperator2294 = new BitSet(new long[]{0x0000000020000000L});
	public static final BitSet FOLLOW_STRING_in_writeOperator2298 = new BitSet(new long[]{0x0000010000000000L});
	public static final BitSet FOLLOW_40_in_writeOperator2300 = new BitSet(new long[]{0x0000000000008002L});
	public static final BitSet FOLLOW_confOption_in_writeOperator2305 = new BitSet(new long[]{0x0000000000008002L});
	public static final BitSet FOLLOW_VAR_in_genericOperator2339 = new BitSet(new long[]{0x0008080000000000L});
	public static final BitSet FOLLOW_43_in_genericOperator2342 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_VAR_in_genericOperator2346 = new BitSet(new long[]{0x0008080000000000L});
	public static final BitSet FOLLOW_51_in_genericOperator2350 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_ID_in_genericOperator2358 = new BitSet(new long[]{0x0000800000000000L});
	public static final BitSet FOLLOW_47_in_genericOperator2360 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_ID_in_genericOperator2366 = new BitSet(new long[]{0x0000000200008002L});
	public static final BitSet FOLLOW_input_in_genericOperator2382 = new BitSet(new long[]{0x0000080000008002L});
	public static final BitSet FOLLOW_43_in_genericOperator2391 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_input_in_genericOperator2393 = new BitSet(new long[]{0x0000080000008002L});
	public static final BitSet FOLLOW_confOption_in_genericOperator2403 = new BitSet(new long[]{0x0000000000008002L});
	public static final BitSet FOLLOW_ID_in_confOption2430 = new BitSet(new long[]{0x5A0024CA6004A080L,0x0000000000000012L});
	public static final BitSet FOLLOW_ternaryExpression_in_confOption2440 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_VAR_in_input2462 = new BitSet(new long[]{0x0000000000020000L});
	public static final BitSet FOLLOW_IN_in_input2464 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_VAR_in_input2470 = new BitSet(new long[]{0x5A0024CA6004A082L,0x0000000000000012L});
	public static final BitSet FOLLOW_ternaryExpression_in_input2487 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_synpred1_Meteor367 = new BitSet(new long[]{0x0000000200008000L});
	public static final BitSet FOLLOW_set_in_synpred1_Meteor369 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_orExpression_in_synpred2_Meteor395 = new BitSet(new long[]{0x0080000000000000L});
	public static final BitSet FOLLOW_55_in_synpred2_Meteor397 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_orExpression_in_synpred3_Meteor437 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_IF_in_synpred3_Meteor439 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_39_in_synpred4_Meteor908 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_ID_in_synpred4_Meteor910 = new BitSet(new long[]{0x0000010000000000L});
	public static final BitSet FOLLOW_40_in_synpred4_Meteor912 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pathExpression_in_synpred5_Meteor975 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_56_in_synpred6_Meteor1031 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_ID_in_synpred6_Meteor1033 = new BitSet(new long[]{0x0000008000000000L});
	public static final BitSet FOLLOW_39_in_synpred6_Meteor1035 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pathSegment_in_synpred7_Meteor1054 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_46_in_synpred8_Meteor1102 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_ID_in_synpred8_Meteor1104 = new BitSet(new long[]{0x0000008000000000L});
	public static final BitSet FOLLOW_39_in_synpred8_Meteor1106 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pathSegment_in_synpred9_Meteor1125 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pathSegment_in_synpred10_Meteor1167 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_56_in_synpred11_Meteor1221 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_46_in_synpred12_Meteor1252 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_57_in_synpred13_Meteor1281 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_46_in_synpred14_Meteor1304 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_methodCall_in_synpred14_Meteor1306 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_synpred15_Meteor1445 = new BitSet(new long[]{0x0000008000000000L});
	public static final BitSet FOLLOW_39_in_synpred15_Meteor1447 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FN_in_synpred16_Meteor1463 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_synpred17_Meteor1507 = new BitSet(new long[]{0x0000800000000000L});
	public static final BitSet FOLLOW_47_in_synpred17_Meteor1509 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_synpred18_Meteor1689 = new BitSet(new long[]{0x0000800000000000L});
	public static final BitSet FOLLOW_47_in_synpred18_Meteor1691 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_synpred19_Meteor1735 = new BitSet(new long[]{0x0000800000000000L});
	public static final BitSet FOLLOW_47_in_synpred19_Meteor1737 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_VAR_in_synpred20_Meteor2378 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_43_in_synpred21_Meteor2387 = new BitSet(new long[]{0x0000000000000002L});
}