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

org.btrplace.btrpsl.antlr.ANTLRBtrplaceSL2Parser Maven / Gradle / Ivy

// $ANTLR 3.5.2 org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g 2019-12-17 10:07:52

package org.btrplace.btrpsl.antlr;
	
	import java.util.LinkedList;
	import java.util.List;
	import org.btrplace.btrpsl.ErrorReporter;


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

import org.antlr.runtime.tree.*;


@SuppressWarnings("all")
public class ANTLRBtrplaceSL2Parser extends Parser {
	public static final String[] tokenNames = new String[] {
		"", "", "", "", "AND", "BLANK", "BLOCK", "CARDINALITY", 
		"CName", "COMMENT", "CONSTRAINTIDENTIFIER", "DECIMAL", "DISCRETE", "DIV", 
		"DIV_EQUALS", "Digit", "Digits", "ENUM_FQDN", "ENUM_ID", "ENUM_VAR", "EQ", 
		"EQUALS", "ESC_SEQ", "EXPLODED_SET", "EXPORT", "FLOAT", "FOR", "GEQ", 
		"GT", "HEXA", "HEX_DIGIT", "Hex_Content", "Hostname", "IDENTIFIER", "IF", 
		"INT_OR_FLOAT_OR_RANGE_OR_HEXA", "LEFTFQDN", "LEFTIDENTIFIER", "LEFTVAR", 
		"LEQ", "LT", "LblTail", "LeftFQDN", "LeftIdentifier", "Letter", "MINUS", 
		"MINUS_EQUALS", "NAMESPACE", "NEQ", "NODE_NAME", "NOT", "OCTAL", "ONETONIME", 
		"OR", "PLUS", "PLUS_EQUALS", "POWER", "PkgTail", "RANGE", "REMAINDER", 
		"REMAINDER_EQUALS", "RIGHT", "STRING", "TEMPLATE_OPTION", "TIMES", "TIMES_EQUALS", 
		"TYPE_DEFINITION", "USE", "VARIABLE", "WS", "'#'", "'('", "')'", "','", 
		"';'", "'else'", "'export'", "'for'", "'if'", "'import'", "'in'", "'namespace'", 
		"'to'", "'{'", "'}'"
	};
	public static final int EOF=-1;
	public static final int T__70=70;
	public static final int T__71=71;
	public static final int T__72=72;
	public static final int T__73=73;
	public static final int T__74=74;
	public static final int T__75=75;
	public static final int T__76=76;
	public static final int T__77=77;
	public static final int T__78=78;
	public static final int T__79=79;
	public static final int T__80=80;
	public static final int T__81=81;
	public static final int T__82=82;
	public static final int T__83=83;
	public static final int T__84=84;
	public static final int AND=4;
	public static final int BLANK=5;
	public static final int BLOCK=6;
	public static final int CARDINALITY=7;
	public static final int CName=8;
	public static final int COMMENT=9;
	public static final int CONSTRAINTIDENTIFIER=10;
	public static final int DECIMAL=11;
	public static final int DISCRETE=12;
	public static final int DIV=13;
	public static final int DIV_EQUALS=14;
	public static final int Digit=15;
	public static final int Digits=16;
	public static final int ENUM_FQDN=17;
	public static final int ENUM_ID=18;
	public static final int ENUM_VAR=19;
	public static final int EQ=20;
	public static final int EQUALS=21;
	public static final int ESC_SEQ=22;
	public static final int EXPLODED_SET=23;
	public static final int EXPORT=24;
	public static final int FLOAT=25;
	public static final int FOR=26;
	public static final int GEQ=27;
	public static final int GT=28;
	public static final int HEXA=29;
	public static final int HEX_DIGIT=30;
	public static final int Hex_Content=31;
	public static final int Hostname=32;
	public static final int IDENTIFIER=33;
	public static final int IF=34;
	public static final int INT_OR_FLOAT_OR_RANGE_OR_HEXA=35;
	public static final int LEFTFQDN=36;
	public static final int LEFTIDENTIFIER=37;
	public static final int LEFTVAR=38;
	public static final int LEQ=39;
	public static final int LT=40;
	public static final int LblTail=41;
	public static final int LeftFQDN=42;
	public static final int LeftIdentifier=43;
	public static final int Letter=44;
	public static final int MINUS=45;
	public static final int MINUS_EQUALS=46;
	public static final int NAMESPACE=47;
	public static final int NEQ=48;
	public static final int NODE_NAME=49;
	public static final int NOT=50;
	public static final int OCTAL=51;
	public static final int ONETONIME=52;
	public static final int OR=53;
	public static final int PLUS=54;
	public static final int PLUS_EQUALS=55;
	public static final int POWER=56;
	public static final int PkgTail=57;
	public static final int RANGE=58;
	public static final int REMAINDER=59;
	public static final int REMAINDER_EQUALS=60;
	public static final int RIGHT=61;
	public static final int STRING=62;
	public static final int TEMPLATE_OPTION=63;
	public static final int TIMES=64;
	public static final int TIMES_EQUALS=65;
	public static final int TYPE_DEFINITION=66;
	public static final int USE=67;
	public static final int VARIABLE=68;
	public static final int WS=69;

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

	// delegators


	public ANTLRBtrplaceSL2Parser(TokenStream input) {
		this(input, new RecognizerSharedState());
	}
	public ANTLRBtrplaceSL2Parser(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 ANTLRBtrplaceSL2Parser.tokenNames; }
	@Override public String getGrammarFileName() { return "org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g"; }


	  private ErrorReporter errReporter;

	  public void setErrorReporter(ErrorReporter errReporter) {
	    this.errReporter = errReporter;
	  }

	  public void displayRecognitionError(String[] tokenNames,
	                                        RecognitionException e) {
	        if (errReporter != null) {
	            int lineNo = e.line;
	            int colNo = e.charPositionInLine;
	            if (lineNo == 0) { //EOF ?
	                for (int i = e.token.getTokenIndex(); i >= 0; i--) {
	                    Token t = input.get(i);
	                    if (t.getLine() != 0) {
	                        lineNo = t.getLine();
	                        colNo = t.getCharPositionInLine();
	                        break;
	                    }
	                }
	            }
	            errReporter.append(lineNo, colNo, getErrorMessage(e, tokenNames));
	        }
	  }


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


	// $ANTLR start "cardinality"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:225:1: cardinality : x= '#' powerable -> ^( CARDINALITY[$x] powerable ) ;
	public final ANTLRBtrplaceSL2Parser.cardinality_return cardinality() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.cardinality_return retval = new ANTLRBtrplaceSL2Parser.cardinality_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token x=null;
		ParserRuleReturnScope powerable1 =null;

		Object x_tree=null;
		RewriteRuleTokenStream stream_70=new RewriteRuleTokenStream(adaptor,"token 70");
		RewriteRuleSubtreeStream stream_powerable=new RewriteRuleSubtreeStream(adaptor,"rule powerable");

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:225:12: (x= '#' powerable -> ^( CARDINALITY[$x] powerable ) )
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:225:14: x= '#' powerable
			{
			x=(Token)match(input,70,FOLLOW_70_in_cardinality976);  
			stream_70.add(x);

			pushFollow(FOLLOW_powerable_in_cardinality978);
			powerable1=powerable();
			state._fsp--;

			stream_powerable.add(powerable1.getTree());
			// AST REWRITE
			// elements: powerable
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 225:30: -> ^( CARDINALITY[$x] powerable )
			{
				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:225:33: ^( CARDINALITY[$x] powerable )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(CARDINALITY, x), root_1);
				adaptor.addChild(root_1, stream_powerable.nextTree());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "cardinality"


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


	// $ANTLR start "number"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:227:1: number : ( DECIMAL | OCTAL | HEXA | FLOAT );
	public final ANTLRBtrplaceSL2Parser.number_return number() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.number_return retval = new ANTLRBtrplaceSL2Parser.number_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token set2=null;

		Object set2_tree=null;

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:227:7: ( DECIMAL | OCTAL | HEXA | FLOAT )
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:
			{
			root_0 = (Object)adaptor.nil();


			set2=input.LT(1);
			if ( input.LA(1)==DECIMAL||input.LA(1)==FLOAT||input.LA(1)==HEXA||input.LA(1)==OCTAL ) {
				input.consume();
				adaptor.addChild(root_0, (Object)adaptor.create(set2));
				state.errorRecovery=false;
			}
			else {
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			}

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "number"


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


	// $ANTLR start "set"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:232:1: set : ( explodedSet | rangeVar | rangeFqdn | rangeIdentifier );
	public final ANTLRBtrplaceSL2Parser.set_return set() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.set_return retval = new ANTLRBtrplaceSL2Parser.set_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope explodedSet3 =null;
		ParserRuleReturnScope rangeVar4 =null;
		ParserRuleReturnScope rangeFqdn5 =null;
		ParserRuleReturnScope rangeIdentifier6 =null;


		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:232:5: ( explodedSet | rangeVar | rangeFqdn | rangeIdentifier )
			int alt1=4;
			switch ( input.LA(1) ) {
			case 83:
				{
				alt1=1;
				}
				break;
			case LEFTVAR:
				{
				alt1=2;
				}
				break;
			case LEFTFQDN:
				{
				alt1=3;
				}
				break;
			case LEFTIDENTIFIER:
				{
				alt1=4;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 1, 0, input);
				throw nvae;
			}
			switch (alt1) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:232:7: explodedSet
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_explodedSet_in_set1015);
					explodedSet3=explodedSet();
					state._fsp--;

					adaptor.addChild(root_0, explodedSet3.getTree());

					}
					break;
				case 2 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:233:3: rangeVar
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_rangeVar_in_set1019);
					rangeVar4=rangeVar();
					state._fsp--;

					adaptor.addChild(root_0, rangeVar4.getTree());

					}
					break;
				case 3 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:234:3: rangeFqdn
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_rangeFqdn_in_set1023);
					rangeFqdn5=rangeFqdn();
					state._fsp--;

					adaptor.addChild(root_0, rangeFqdn5.getTree());

					}
					break;
				case 4 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:235:3: rangeIdentifier
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_rangeIdentifier_in_set1027);
					rangeIdentifier6=rangeIdentifier();
					state._fsp--;

					adaptor.addChild(root_0, rangeIdentifier6.getTree());

					}
					break;

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "set"


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


	// $ANTLR start "explodedSet"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:237:1: explodedSet : x= '{' ( setContent ( ',' setContent )* )? '}' -> ^( EXPLODED_SET[$x] ( setContent )* ) ;
	public final ANTLRBtrplaceSL2Parser.explodedSet_return explodedSet() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.explodedSet_return retval = new ANTLRBtrplaceSL2Parser.explodedSet_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token x=null;
		Token char_literal8=null;
		Token char_literal10=null;
		ParserRuleReturnScope setContent7 =null;
		ParserRuleReturnScope setContent9 =null;

		Object x_tree=null;
		Object char_literal8_tree=null;
		Object char_literal10_tree=null;
		RewriteRuleTokenStream stream_83=new RewriteRuleTokenStream(adaptor,"token 83");
		RewriteRuleTokenStream stream_84=new RewriteRuleTokenStream(adaptor,"token 84");
		RewriteRuleTokenStream stream_73=new RewriteRuleTokenStream(adaptor,"token 73");
		RewriteRuleSubtreeStream stream_setContent=new RewriteRuleSubtreeStream(adaptor,"rule setContent");

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:237:12: (x= '{' ( setContent ( ',' setContent )* )? '}' -> ^( EXPLODED_SET[$x] ( setContent )* ) )
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:237:14: x= '{' ( setContent ( ',' setContent )* )? '}'
			{
			x=(Token)match(input,83,FOLLOW_83_in_explodedSet1036);  
			stream_83.add(x);

			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:237:20: ( setContent ( ',' setContent )* )?
			int alt3=2;
			int LA3_0 = input.LA(1);
			if ( (LA3_0==BLANK||LA3_0==DECIMAL||LA3_0==FLOAT||LA3_0==HEXA||LA3_0==IDENTIFIER||(LA3_0 >= LEFTFQDN && LA3_0 <= LEFTVAR)||LA3_0==MINUS||(LA3_0 >= NODE_NAME && LA3_0 <= OCTAL)||LA3_0==STRING||LA3_0==VARIABLE||(LA3_0 >= 70 && LA3_0 <= 71)||LA3_0==83) ) {
				alt3=1;
			}
			switch (alt3) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:237:21: setContent ( ',' setContent )*
					{
					pushFollow(FOLLOW_setContent_in_explodedSet1039);
					setContent7=setContent();
					state._fsp--;

					stream_setContent.add(setContent7.getTree());
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:237:32: ( ',' setContent )*
					loop2:
					while (true) {
						int alt2=2;
						int LA2_0 = input.LA(1);
						if ( (LA2_0==73) ) {
							alt2=1;
						}

						switch (alt2) {
						case 1 :
							// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:237:33: ',' setContent
							{
							char_literal8=(Token)match(input,73,FOLLOW_73_in_explodedSet1042);  
							stream_73.add(char_literal8);

							pushFollow(FOLLOW_setContent_in_explodedSet1044);
							setContent9=setContent();
							state._fsp--;

							stream_setContent.add(setContent9.getTree());
							}
							break;

						default :
							break loop2;
						}
					}

					}
					break;

			}

			char_literal10=(Token)match(input,84,FOLLOW_84_in_explodedSet1050);  
			stream_84.add(char_literal10);

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

			root_0 = (Object)adaptor.nil();
			// 237:56: -> ^( EXPLODED_SET[$x] ( setContent )* )
			{
				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:237:59: ^( EXPLODED_SET[$x] ( setContent )* )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(EXPLODED_SET, x), root_1);
				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:237:78: ( setContent )*
				while ( stream_setContent.hasNext() ) {
					adaptor.addChild(root_1, stream_setContent.nextTree());
				}
				stream_setContent.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "explodedSet"


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


	// $ANTLR start "rangeVar"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:243:1: rangeVar : LEFTVAR r1= braceContent ( ',' r2= braceContent )* RIGHT -> ^( ENUM_VAR LEFTVAR ( braceContent )+ RIGHT ) ;
	public final ANTLRBtrplaceSL2Parser.rangeVar_return rangeVar() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.rangeVar_return retval = new ANTLRBtrplaceSL2Parser.rangeVar_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token LEFTVAR11=null;
		Token char_literal12=null;
		Token RIGHT13=null;
		ParserRuleReturnScope r1 =null;
		ParserRuleReturnScope r2 =null;

		Object LEFTVAR11_tree=null;
		Object char_literal12_tree=null;
		Object RIGHT13_tree=null;
		RewriteRuleTokenStream stream_LEFTVAR=new RewriteRuleTokenStream(adaptor,"token LEFTVAR");
		RewriteRuleTokenStream stream_RIGHT=new RewriteRuleTokenStream(adaptor,"token RIGHT");
		RewriteRuleTokenStream stream_73=new RewriteRuleTokenStream(adaptor,"token 73");
		RewriteRuleSubtreeStream stream_braceContent=new RewriteRuleSubtreeStream(adaptor,"rule braceContent");

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:243:9: ( LEFTVAR r1= braceContent ( ',' r2= braceContent )* RIGHT -> ^( ENUM_VAR LEFTVAR ( braceContent )+ RIGHT ) )
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:243:11: LEFTVAR r1= braceContent ( ',' r2= braceContent )* RIGHT
			{
			LEFTVAR11=(Token)match(input,LEFTVAR,FOLLOW_LEFTVAR_in_rangeVar1098);  
			stream_LEFTVAR.add(LEFTVAR11);

			pushFollow(FOLLOW_braceContent_in_rangeVar1102);
			r1=braceContent();
			state._fsp--;

			stream_braceContent.add(r1.getTree());
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:243:35: ( ',' r2= braceContent )*
			loop4:
			while (true) {
				int alt4=2;
				int LA4_0 = input.LA(1);
				if ( (LA4_0==73) ) {
					alt4=1;
				}

				switch (alt4) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:243:36: ',' r2= braceContent
					{
					char_literal12=(Token)match(input,73,FOLLOW_73_in_rangeVar1105);  
					stream_73.add(char_literal12);

					pushFollow(FOLLOW_braceContent_in_rangeVar1109);
					r2=braceContent();
					state._fsp--;

					stream_braceContent.add(r2.getTree());
					}
					break;

				default :
					break loop4;
				}
			}

			RIGHT13=(Token)match(input,RIGHT,FOLLOW_RIGHT_in_rangeVar1113);  
			stream_RIGHT.add(RIGHT13);

			// AST REWRITE
			// elements: RIGHT, braceContent, LEFTVAR
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 243:64: -> ^( ENUM_VAR LEFTVAR ( braceContent )+ RIGHT )
			{
				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:243:67: ^( ENUM_VAR LEFTVAR ( braceContent )+ RIGHT )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ENUM_VAR, "ENUM_VAR"), root_1);
				adaptor.addChild(root_1, stream_LEFTVAR.nextNode());
				if ( !(stream_braceContent.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_braceContent.hasNext() ) {
					adaptor.addChild(root_1, stream_braceContent.nextTree());
				}
				stream_braceContent.reset();

				adaptor.addChild(root_1, stream_RIGHT.nextNode());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "rangeVar"


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


	// $ANTLR start "rangeFqdn"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:246:1: rangeFqdn : LEFTFQDN r1= braceContent ( ',' r2= braceContent )* RIGHT -> ^( ENUM_FQDN LEFTFQDN ( braceContent )+ RIGHT ) ;
	public final ANTLRBtrplaceSL2Parser.rangeFqdn_return rangeFqdn() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.rangeFqdn_return retval = new ANTLRBtrplaceSL2Parser.rangeFqdn_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token LEFTFQDN14=null;
		Token char_literal15=null;
		Token RIGHT16=null;
		ParserRuleReturnScope r1 =null;
		ParserRuleReturnScope r2 =null;

		Object LEFTFQDN14_tree=null;
		Object char_literal15_tree=null;
		Object RIGHT16_tree=null;
		RewriteRuleTokenStream stream_LEFTFQDN=new RewriteRuleTokenStream(adaptor,"token LEFTFQDN");
		RewriteRuleTokenStream stream_RIGHT=new RewriteRuleTokenStream(adaptor,"token RIGHT");
		RewriteRuleTokenStream stream_73=new RewriteRuleTokenStream(adaptor,"token 73");
		RewriteRuleSubtreeStream stream_braceContent=new RewriteRuleSubtreeStream(adaptor,"rule braceContent");

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:246:10: ( LEFTFQDN r1= braceContent ( ',' r2= braceContent )* RIGHT -> ^( ENUM_FQDN LEFTFQDN ( braceContent )+ RIGHT ) )
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:246:13: LEFTFQDN r1= braceContent ( ',' r2= braceContent )* RIGHT
			{
			LEFTFQDN14=(Token)match(input,LEFTFQDN,FOLLOW_LEFTFQDN_in_rangeFqdn1140);  
			stream_LEFTFQDN.add(LEFTFQDN14);

			pushFollow(FOLLOW_braceContent_in_rangeFqdn1144);
			r1=braceContent();
			state._fsp--;

			stream_braceContent.add(r1.getTree());
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:246:38: ( ',' r2= braceContent )*
			loop5:
			while (true) {
				int alt5=2;
				int LA5_0 = input.LA(1);
				if ( (LA5_0==73) ) {
					alt5=1;
				}

				switch (alt5) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:246:39: ',' r2= braceContent
					{
					char_literal15=(Token)match(input,73,FOLLOW_73_in_rangeFqdn1147);  
					stream_73.add(char_literal15);

					pushFollow(FOLLOW_braceContent_in_rangeFqdn1151);
					r2=braceContent();
					state._fsp--;

					stream_braceContent.add(r2.getTree());
					}
					break;

				default :
					break loop5;
				}
			}

			RIGHT16=(Token)match(input,RIGHT,FOLLOW_RIGHT_in_rangeFqdn1155);  
			stream_RIGHT.add(RIGHT16);

			// AST REWRITE
			// elements: braceContent, RIGHT, LEFTFQDN
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 246:67: -> ^( ENUM_FQDN LEFTFQDN ( braceContent )+ RIGHT )
			{
				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:246:70: ^( ENUM_FQDN LEFTFQDN ( braceContent )+ RIGHT )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ENUM_FQDN, "ENUM_FQDN"), root_1);
				adaptor.addChild(root_1, stream_LEFTFQDN.nextNode());
				if ( !(stream_braceContent.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_braceContent.hasNext() ) {
					adaptor.addChild(root_1, stream_braceContent.nextTree());
				}
				stream_braceContent.reset();

				adaptor.addChild(root_1, stream_RIGHT.nextNode());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "rangeFqdn"


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


	// $ANTLR start "rangeIdentifier"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:249:1: rangeIdentifier : LEFTIDENTIFIER r1= braceContent ( ',' r2= braceContent )* RIGHT -> ^( ENUM_ID LEFTIDENTIFIER ( braceContent )+ RIGHT ) ;
	public final ANTLRBtrplaceSL2Parser.rangeIdentifier_return rangeIdentifier() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.rangeIdentifier_return retval = new ANTLRBtrplaceSL2Parser.rangeIdentifier_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token LEFTIDENTIFIER17=null;
		Token char_literal18=null;
		Token RIGHT19=null;
		ParserRuleReturnScope r1 =null;
		ParserRuleReturnScope r2 =null;

		Object LEFTIDENTIFIER17_tree=null;
		Object char_literal18_tree=null;
		Object RIGHT19_tree=null;
		RewriteRuleTokenStream stream_LEFTIDENTIFIER=new RewriteRuleTokenStream(adaptor,"token LEFTIDENTIFIER");
		RewriteRuleTokenStream stream_RIGHT=new RewriteRuleTokenStream(adaptor,"token RIGHT");
		RewriteRuleTokenStream stream_73=new RewriteRuleTokenStream(adaptor,"token 73");
		RewriteRuleSubtreeStream stream_braceContent=new RewriteRuleSubtreeStream(adaptor,"rule braceContent");

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:249:16: ( LEFTIDENTIFIER r1= braceContent ( ',' r2= braceContent )* RIGHT -> ^( ENUM_ID LEFTIDENTIFIER ( braceContent )+ RIGHT ) )
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:249:20: LEFTIDENTIFIER r1= braceContent ( ',' r2= braceContent )* RIGHT
			{
			LEFTIDENTIFIER17=(Token)match(input,LEFTIDENTIFIER,FOLLOW_LEFTIDENTIFIER_in_rangeIdentifier1189);  
			stream_LEFTIDENTIFIER.add(LEFTIDENTIFIER17);

			pushFollow(FOLLOW_braceContent_in_rangeIdentifier1193);
			r1=braceContent();
			state._fsp--;

			stream_braceContent.add(r1.getTree());
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:249:51: ( ',' r2= braceContent )*
			loop6:
			while (true) {
				int alt6=2;
				int LA6_0 = input.LA(1);
				if ( (LA6_0==73) ) {
					alt6=1;
				}

				switch (alt6) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:249:52: ',' r2= braceContent
					{
					char_literal18=(Token)match(input,73,FOLLOW_73_in_rangeIdentifier1196);  
					stream_73.add(char_literal18);

					pushFollow(FOLLOW_braceContent_in_rangeIdentifier1200);
					r2=braceContent();
					state._fsp--;

					stream_braceContent.add(r2.getTree());
					}
					break;

				default :
					break loop6;
				}
			}

			RIGHT19=(Token)match(input,RIGHT,FOLLOW_RIGHT_in_rangeIdentifier1204);  
			stream_RIGHT.add(RIGHT19);

			// AST REWRITE
			// elements: braceContent, RIGHT, LEFTIDENTIFIER
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 249:80: -> ^( ENUM_ID LEFTIDENTIFIER ( braceContent )+ RIGHT )
			{
				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:249:83: ^( ENUM_ID LEFTIDENTIFIER ( braceContent )+ RIGHT )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ENUM_ID, "ENUM_ID"), root_1);
				adaptor.addChild(root_1, stream_LEFTIDENTIFIER.nextNode());
				if ( !(stream_braceContent.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_braceContent.hasNext() ) {
					adaptor.addChild(root_1, stream_braceContent.nextTree());
				}
				stream_braceContent.reset();

				adaptor.addChild(root_1, stream_RIGHT.nextNode());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "rangeIdentifier"


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


	// $ANTLR start "braceContent"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:251:1: braceContent : range -> ^( RANGE range ) ;
	public final ANTLRBtrplaceSL2Parser.braceContent_return braceContent() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.braceContent_return retval = new ANTLRBtrplaceSL2Parser.braceContent_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope range20 =null;

		RewriteRuleSubtreeStream stream_range=new RewriteRuleSubtreeStream(adaptor,"rule range");

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:251:14: ( range -> ^( RANGE range ) )
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:251:16: range
			{
			pushFollow(FOLLOW_range_in_braceContent1225);
			range20=range();
			state._fsp--;

			stream_range.add(range20.getTree());
			// AST REWRITE
			// elements: range
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 251:22: -> ^( RANGE range )
			{
				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:251:25: ^( RANGE range )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(RANGE, "RANGE"), root_1);
				adaptor.addChild(root_1, stream_range.nextTree());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "braceContent"


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


	// $ANTLR start "range"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:253:1: range : term ( RANGE ! term )? ;
	public final ANTLRBtrplaceSL2Parser.range_return range() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.range_return retval = new ANTLRBtrplaceSL2Parser.range_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token RANGE22=null;
		ParserRuleReturnScope term21 =null;
		ParserRuleReturnScope term23 =null;

		Object RANGE22_tree=null;

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:253:8: ( term ( RANGE ! term )? )
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:253:10: term ( RANGE ! term )?
			{
			root_0 = (Object)adaptor.nil();


			pushFollow(FOLLOW_term_in_range1242);
			term21=term();
			state._fsp--;

			adaptor.addChild(root_0, term21.getTree());

			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:253:15: ( RANGE ! term )?
			int alt7=2;
			int LA7_0 = input.LA(1);
			if ( (LA7_0==RANGE) ) {
				alt7=1;
			}
			switch (alt7) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:253:16: RANGE ! term
					{
					RANGE22=(Token)match(input,RANGE,FOLLOW_RANGE_in_range1245); 
					pushFollow(FOLLOW_term_in_range1248);
					term23=term();
					state._fsp--;

					adaptor.addChild(root_0, term23.getTree());

					}
					break;

			}

			}

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "range"


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


	// $ANTLR start "setContent"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:255:1: setContent : ( expression | BLANK );
	public final ANTLRBtrplaceSL2Parser.setContent_return setContent() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.setContent_return retval = new ANTLRBtrplaceSL2Parser.setContent_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token BLANK25=null;
		ParserRuleReturnScope expression24 =null;

		Object BLANK25_tree=null;

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:255:11: ( expression | BLANK )
			int alt8=2;
			int LA8_0 = input.LA(1);
			if ( (LA8_0==DECIMAL||LA8_0==FLOAT||LA8_0==HEXA||LA8_0==IDENTIFIER||(LA8_0 >= LEFTFQDN && LA8_0 <= LEFTVAR)||LA8_0==MINUS||(LA8_0 >= NODE_NAME && LA8_0 <= OCTAL)||LA8_0==STRING||LA8_0==VARIABLE||(LA8_0 >= 70 && LA8_0 <= 71)||LA8_0==83) ) {
				alt8=1;
			}
			else if ( (LA8_0==BLANK) ) {
				alt8=2;
			}

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

			switch (alt8) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:255:13: expression
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_expression_in_setContent1261);
					expression24=expression();
					state._fsp--;

					adaptor.addChild(root_0, expression24.getTree());

					}
					break;
				case 2 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:256:8: BLANK
					{
					root_0 = (Object)adaptor.nil();


					BLANK25=(Token)match(input,BLANK,FOLLOW_BLANK_in_setContent1270); 
					BLANK25_tree = (Object)adaptor.create(BLANK25);
					adaptor.addChild(root_0, BLANK25_tree);

					}
					break;

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "setContent"


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


	// $ANTLR start "term"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:258:1: term : ( '(' expression ')' -> expression | IDENTIFIER | NODE_NAME | number | VARIABLE | STRING | set );
	public final ANTLRBtrplaceSL2Parser.term_return term() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.term_return retval = new ANTLRBtrplaceSL2Parser.term_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token char_literal26=null;
		Token char_literal28=null;
		Token IDENTIFIER29=null;
		Token NODE_NAME30=null;
		Token VARIABLE32=null;
		Token STRING33=null;
		ParserRuleReturnScope expression27 =null;
		ParserRuleReturnScope number31 =null;
		ParserRuleReturnScope set34 =null;

		Object char_literal26_tree=null;
		Object char_literal28_tree=null;
		Object IDENTIFIER29_tree=null;
		Object NODE_NAME30_tree=null;
		Object VARIABLE32_tree=null;
		Object STRING33_tree=null;
		RewriteRuleTokenStream stream_71=new RewriteRuleTokenStream(adaptor,"token 71");
		RewriteRuleTokenStream stream_72=new RewriteRuleTokenStream(adaptor,"token 72");
		RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:258:6: ( '(' expression ')' -> expression | IDENTIFIER | NODE_NAME | number | VARIABLE | STRING | set )
			int alt9=7;
			switch ( input.LA(1) ) {
			case 71:
				{
				alt9=1;
				}
				break;
			case IDENTIFIER:
				{
				alt9=2;
				}
				break;
			case NODE_NAME:
				{
				alt9=3;
				}
				break;
			case DECIMAL:
			case FLOAT:
			case HEXA:
			case OCTAL:
				{
				alt9=4;
				}
				break;
			case VARIABLE:
				{
				alt9=5;
				}
				break;
			case STRING:
				{
				alt9=6;
				}
				break;
			case LEFTFQDN:
			case LEFTIDENTIFIER:
			case LEFTVAR:
			case 83:
				{
				alt9=7;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 9, 0, input);
				throw nvae;
			}
			switch (alt9) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:258:8: '(' expression ')'
					{
					char_literal26=(Token)match(input,71,FOLLOW_71_in_term1283);  
					stream_71.add(char_literal26);

					pushFollow(FOLLOW_expression_in_term1285);
					expression27=expression();
					state._fsp--;

					stream_expression.add(expression27.getTree());
					char_literal28=(Token)match(input,72,FOLLOW_72_in_term1287);  
					stream_72.add(char_literal28);

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

					root_0 = (Object)adaptor.nil();
					// 258:27: -> expression
					{
						adaptor.addChild(root_0, stream_expression.nextTree());
					}


					retval.tree = root_0;

					}
					break;
				case 2 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:259:4: IDENTIFIER
					{
					root_0 = (Object)adaptor.nil();


					IDENTIFIER29=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_term1296); 
					IDENTIFIER29_tree = (Object)adaptor.create(IDENTIFIER29);
					adaptor.addChild(root_0, IDENTIFIER29_tree);

					}
					break;
				case 3 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:260:4: NODE_NAME
					{
					root_0 = (Object)adaptor.nil();


					NODE_NAME30=(Token)match(input,NODE_NAME,FOLLOW_NODE_NAME_in_term1301); 
					NODE_NAME30_tree = (Object)adaptor.create(NODE_NAME30);
					adaptor.addChild(root_0, NODE_NAME30_tree);

					}
					break;
				case 4 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:261:4: number
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_number_in_term1306);
					number31=number();
					state._fsp--;

					adaptor.addChild(root_0, number31.getTree());

					}
					break;
				case 5 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:262:4: VARIABLE
					{
					root_0 = (Object)adaptor.nil();


					VARIABLE32=(Token)match(input,VARIABLE,FOLLOW_VARIABLE_in_term1311); 
					VARIABLE32_tree = (Object)adaptor.create(VARIABLE32);
					adaptor.addChild(root_0, VARIABLE32_tree);

					}
					break;
				case 6 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:263:4: STRING
					{
					root_0 = (Object)adaptor.nil();


					STRING33=(Token)match(input,STRING,FOLLOW_STRING_in_term1318); 
					STRING33_tree = (Object)adaptor.create(STRING33);
					adaptor.addChild(root_0, STRING33_tree);

					}
					break;
				case 7 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:264:4: set
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_set_in_term1323);
					set34=set();
					state._fsp--;

					adaptor.addChild(root_0, set34.getTree());

					}
					break;

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "term"


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


	// $ANTLR start "powerable"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:267:1: powerable : term ( POWER ^ term )? ;
	public final ANTLRBtrplaceSL2Parser.powerable_return powerable() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.powerable_return retval = new ANTLRBtrplaceSL2Parser.powerable_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token POWER36=null;
		ParserRuleReturnScope term35 =null;
		ParserRuleReturnScope term37 =null;

		Object POWER36_tree=null;

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:267:10: ( term ( POWER ^ term )? )
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:267:12: term ( POWER ^ term )?
			{
			root_0 = (Object)adaptor.nil();


			pushFollow(FOLLOW_term_in_powerable1331);
			term35=term();
			state._fsp--;

			adaptor.addChild(root_0, term35.getTree());

			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:267:17: ( POWER ^ term )?
			int alt10=2;
			int LA10_0 = input.LA(1);
			if ( (LA10_0==POWER) ) {
				alt10=1;
			}
			switch (alt10) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:267:18: POWER ^ term
					{
					POWER36=(Token)match(input,POWER,FOLLOW_POWER_in_powerable1334); 
					POWER36_tree = (Object)adaptor.create(POWER36);
					root_0 = (Object)adaptor.becomeRoot(POWER36_tree, root_0);

					pushFollow(FOLLOW_term_in_powerable1337);
					term37=term();
					state._fsp--;

					adaptor.addChild(root_0, term37.getTree());

					}
					break;

			}

			}

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "powerable"


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


	// $ANTLR start "negation"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:268:1: negation : ( NOT ^ powerable | cardinality | powerable );
	public final ANTLRBtrplaceSL2Parser.negation_return negation() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.negation_return retval = new ANTLRBtrplaceSL2Parser.negation_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token NOT38=null;
		ParserRuleReturnScope powerable39 =null;
		ParserRuleReturnScope cardinality40 =null;
		ParserRuleReturnScope powerable41 =null;

		Object NOT38_tree=null;

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:268:9: ( NOT ^ powerable | cardinality | powerable )
			int alt11=3;
			switch ( input.LA(1) ) {
			case NOT:
				{
				alt11=1;
				}
				break;
			case 70:
				{
				alt11=2;
				}
				break;
			case DECIMAL:
			case FLOAT:
			case HEXA:
			case IDENTIFIER:
			case LEFTFQDN:
			case LEFTIDENTIFIER:
			case LEFTVAR:
			case NODE_NAME:
			case OCTAL:
			case STRING:
			case VARIABLE:
			case 71:
			case 83:
				{
				alt11=3;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 11, 0, input);
				throw nvae;
			}
			switch (alt11) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:268:11: NOT ^ powerable
					{
					root_0 = (Object)adaptor.nil();


					NOT38=(Token)match(input,NOT,FOLLOW_NOT_in_negation1349); 
					NOT38_tree = (Object)adaptor.create(NOT38);
					root_0 = (Object)adaptor.becomeRoot(NOT38_tree, root_0);

					pushFollow(FOLLOW_powerable_in_negation1352);
					powerable39=powerable();
					state._fsp--;

					adaptor.addChild(root_0, powerable39.getTree());

					}
					break;
				case 2 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:269:4: cardinality
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_cardinality_in_negation1357);
					cardinality40=cardinality();
					state._fsp--;

					adaptor.addChild(root_0, cardinality40.getTree());

					}
					break;
				case 3 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:270:4: powerable
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_powerable_in_negation1362);
					powerable41=powerable();
					state._fsp--;

					adaptor.addChild(root_0, powerable41.getTree());

					}
					break;

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "negation"


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


	// $ANTLR start "unary"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:271:1: unary : ( MINUS negation -> ^( MINUS negation ) | negation -> negation );
	public final ANTLRBtrplaceSL2Parser.unary_return unary() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.unary_return retval = new ANTLRBtrplaceSL2Parser.unary_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token MINUS42=null;
		ParserRuleReturnScope negation43 =null;
		ParserRuleReturnScope negation44 =null;

		Object MINUS42_tree=null;
		RewriteRuleTokenStream stream_MINUS=new RewriteRuleTokenStream(adaptor,"token MINUS");
		RewriteRuleSubtreeStream stream_negation=new RewriteRuleSubtreeStream(adaptor,"rule negation");

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:271:6: ( MINUS negation -> ^( MINUS negation ) | negation -> negation )
			int alt12=2;
			int LA12_0 = input.LA(1);
			if ( (LA12_0==MINUS) ) {
				alt12=1;
			}
			else if ( (LA12_0==DECIMAL||LA12_0==FLOAT||LA12_0==HEXA||LA12_0==IDENTIFIER||(LA12_0 >= LEFTFQDN && LA12_0 <= LEFTVAR)||(LA12_0 >= NODE_NAME && LA12_0 <= OCTAL)||LA12_0==STRING||LA12_0==VARIABLE||(LA12_0 >= 70 && LA12_0 <= 71)||LA12_0==83) ) {
				alt12=2;
			}

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

			switch (alt12) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:271:8: MINUS negation
					{
					MINUS42=(Token)match(input,MINUS,FOLLOW_MINUS_in_unary1368);  
					stream_MINUS.add(MINUS42);

					pushFollow(FOLLOW_negation_in_unary1370);
					negation43=negation();
					state._fsp--;

					stream_negation.add(negation43.getTree());
					// AST REWRITE
					// elements: MINUS, negation
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 271:23: -> ^( MINUS negation )
					{
						// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:271:26: ^( MINUS negation )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_MINUS.nextNode(), root_1);
						adaptor.addChild(root_1, stream_negation.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;
				case 2 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:272:9: negation
					{
					pushFollow(FOLLOW_negation_in_unary1388);
					negation44=negation();
					state._fsp--;

					stream_negation.add(negation44.getTree());
					// AST REWRITE
					// elements: negation
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 272:18: -> negation
					{
						adaptor.addChild(root_0, stream_negation.nextTree());
					}


					retval.tree = root_0;

					}
					break;

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "unary"


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


	// $ANTLR start "mult"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:273:1: mult : unary ( ( TIMES | DIV | REMAINDER ) ^ unary )* ;
	public final ANTLRBtrplaceSL2Parser.mult_return mult() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.mult_return retval = new ANTLRBtrplaceSL2Parser.mult_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token set46=null;
		ParserRuleReturnScope unary45 =null;
		ParserRuleReturnScope unary47 =null;

		Object set46_tree=null;

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:273:5: ( unary ( ( TIMES | DIV | REMAINDER ) ^ unary )* )
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:273:7: unary ( ( TIMES | DIV | REMAINDER ) ^ unary )*
			{
			root_0 = (Object)adaptor.nil();


			pushFollow(FOLLOW_unary_in_mult1398);
			unary45=unary();
			state._fsp--;

			adaptor.addChild(root_0, unary45.getTree());

			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:273:13: ( ( TIMES | DIV | REMAINDER ) ^ unary )*
			loop13:
			while (true) {
				int alt13=2;
				int LA13_0 = input.LA(1);
				if ( (LA13_0==DIV||LA13_0==REMAINDER||LA13_0==TIMES) ) {
					alt13=1;
				}

				switch (alt13) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:273:14: ( TIMES | DIV | REMAINDER ) ^ unary
					{
					set46=input.LT(1);
					set46=input.LT(1);
					if ( input.LA(1)==DIV||input.LA(1)==REMAINDER||input.LA(1)==TIMES ) {
						input.consume();
						root_0 = (Object)adaptor.becomeRoot((Object)adaptor.create(set46), root_0);
						state.errorRecovery=false;
					}
					else {
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					pushFollow(FOLLOW_unary_in_mult1410);
					unary47=unary();
					state._fsp--;

					adaptor.addChild(root_0, unary47.getTree());

					}
					break;

				default :
					break loop13;
				}
			}

			}

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "mult"


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


	// $ANTLR start "add"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:275:1: add : mult ( ( PLUS | MINUS ) ^ mult )* ;
	public final ANTLRBtrplaceSL2Parser.add_return add() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.add_return retval = new ANTLRBtrplaceSL2Parser.add_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token set49=null;
		ParserRuleReturnScope mult48 =null;
		ParserRuleReturnScope mult50 =null;

		Object set49_tree=null;

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:275:4: ( mult ( ( PLUS | MINUS ) ^ mult )* )
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:275:6: mult ( ( PLUS | MINUS ) ^ mult )*
			{
			root_0 = (Object)adaptor.nil();


			pushFollow(FOLLOW_mult_in_add1419);
			mult48=mult();
			state._fsp--;

			adaptor.addChild(root_0, mult48.getTree());

			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:275:11: ( ( PLUS | MINUS ) ^ mult )*
			loop14:
			while (true) {
				int alt14=2;
				int LA14_0 = input.LA(1);
				if ( (LA14_0==MINUS||LA14_0==PLUS) ) {
					alt14=1;
				}

				switch (alt14) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:275:12: ( PLUS | MINUS ) ^ mult
					{
					set49=input.LT(1);
					set49=input.LT(1);
					if ( input.LA(1)==MINUS||input.LA(1)==PLUS ) {
						input.consume();
						root_0 = (Object)adaptor.becomeRoot((Object)adaptor.create(set49), root_0);
						state.errorRecovery=false;
					}
					else {
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					pushFollow(FOLLOW_mult_in_add1429);
					mult50=mult();
					state._fsp--;

					adaptor.addChild(root_0, mult50.getTree());

					}
					break;

				default :
					break loop14;
				}
			}

			}

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "add"


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


	// $ANTLR start "relation"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:277:1: relation : add ( ( EQ | NEQ | LT | LEQ | GT | GEQ ) ^ add )* ;
	public final ANTLRBtrplaceSL2Parser.relation_return relation() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.relation_return retval = new ANTLRBtrplaceSL2Parser.relation_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token set52=null;
		ParserRuleReturnScope add51 =null;
		ParserRuleReturnScope add53 =null;

		Object set52_tree=null;

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:277:9: ( add ( ( EQ | NEQ | LT | LEQ | GT | GEQ ) ^ add )* )
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:277:11: add ( ( EQ | NEQ | LT | LEQ | GT | GEQ ) ^ add )*
			{
			root_0 = (Object)adaptor.nil();


			pushFollow(FOLLOW_add_in_relation1438);
			add51=add();
			state._fsp--;

			adaptor.addChild(root_0, add51.getTree());

			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:277:15: ( ( EQ | NEQ | LT | LEQ | GT | GEQ ) ^ add )*
			loop15:
			while (true) {
				int alt15=2;
				int LA15_0 = input.LA(1);
				if ( (LA15_0==EQ||(LA15_0 >= GEQ && LA15_0 <= GT)||(LA15_0 >= LEQ && LA15_0 <= LT)||LA15_0==NEQ) ) {
					alt15=1;
				}

				switch (alt15) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:277:16: ( EQ | NEQ | LT | LEQ | GT | GEQ ) ^ add
					{
					set52=input.LT(1);
					set52=input.LT(1);
					if ( input.LA(1)==EQ||(input.LA(1) >= GEQ && input.LA(1) <= GT)||(input.LA(1) >= LEQ && input.LA(1) <= LT)||input.LA(1)==NEQ ) {
						input.consume();
						root_0 = (Object)adaptor.becomeRoot((Object)adaptor.create(set52), root_0);
						state.errorRecovery=false;
					}
					else {
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					pushFollow(FOLLOW_add_in_relation1466);
					add53=add();
					state._fsp--;

					adaptor.addChild(root_0, add53.getTree());

					}
					break;

				default :
					break loop15;
				}
			}

			}

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "relation"


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


	// $ANTLR start "expression"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:278:1: expression : relation ( ( AND | OR ) ^ relation )* ;
	public final ANTLRBtrplaceSL2Parser.expression_return expression() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.expression_return retval = new ANTLRBtrplaceSL2Parser.expression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token set55=null;
		ParserRuleReturnScope relation54 =null;
		ParserRuleReturnScope relation56 =null;

		Object set55_tree=null;

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:278:11: ( relation ( ( AND | OR ) ^ relation )* )
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:278:13: relation ( ( AND | OR ) ^ relation )*
			{
			root_0 = (Object)adaptor.nil();


			pushFollow(FOLLOW_relation_in_expression1474);
			relation54=relation();
			state._fsp--;

			adaptor.addChild(root_0, relation54.getTree());

			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:278:22: ( ( AND | OR ) ^ relation )*
			loop16:
			while (true) {
				int alt16=2;
				int LA16_0 = input.LA(1);
				if ( (LA16_0==AND||LA16_0==OR) ) {
					alt16=1;
				}

				switch (alt16) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:278:23: ( AND | OR ) ^ relation
					{
					set55=input.LT(1);
					set55=input.LT(1);
					if ( input.LA(1)==AND||input.LA(1)==OR ) {
						input.consume();
						root_0 = (Object)adaptor.becomeRoot((Object)adaptor.create(set55), root_0);
						state.errorRecovery=false;
					}
					else {
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					pushFollow(FOLLOW_relation_in_expression1486);
					relation56=relation();
					state._fsp--;

					adaptor.addChild(root_0, relation56.getTree());

					}
					break;

				default :
					break loop16;
				}
			}

			}

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "expression"


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


	// $ANTLR start "forEachStatement"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:281:1: forEachStatement : x= 'for' VARIABLE 'in' expression '{' bloc '}' -> ^( FOR[x] VARIABLE expression bloc ) ;
	public final ANTLRBtrplaceSL2Parser.forEachStatement_return forEachStatement() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.forEachStatement_return retval = new ANTLRBtrplaceSL2Parser.forEachStatement_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token x=null;
		Token VARIABLE57=null;
		Token string_literal58=null;
		Token char_literal60=null;
		Token char_literal62=null;
		ParserRuleReturnScope expression59 =null;
		ParserRuleReturnScope bloc61 =null;

		Object x_tree=null;
		Object VARIABLE57_tree=null;
		Object string_literal58_tree=null;
		Object char_literal60_tree=null;
		Object char_literal62_tree=null;
		RewriteRuleTokenStream stream_77=new RewriteRuleTokenStream(adaptor,"token 77");
		RewriteRuleTokenStream stream_VARIABLE=new RewriteRuleTokenStream(adaptor,"token VARIABLE");
		RewriteRuleTokenStream stream_80=new RewriteRuleTokenStream(adaptor,"token 80");
		RewriteRuleTokenStream stream_83=new RewriteRuleTokenStream(adaptor,"token 83");
		RewriteRuleTokenStream stream_84=new RewriteRuleTokenStream(adaptor,"token 84");
		RewriteRuleSubtreeStream stream_bloc=new RewriteRuleSubtreeStream(adaptor,"rule bloc");
		RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:281:17: (x= 'for' VARIABLE 'in' expression '{' bloc '}' -> ^( FOR[x] VARIABLE expression bloc ) )
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:281:19: x= 'for' VARIABLE 'in' expression '{' bloc '}'
			{
			x=(Token)match(input,77,FOLLOW_77_in_forEachStatement1498);  
			stream_77.add(x);

			VARIABLE57=(Token)match(input,VARIABLE,FOLLOW_VARIABLE_in_forEachStatement1500);  
			stream_VARIABLE.add(VARIABLE57);

			string_literal58=(Token)match(input,80,FOLLOW_80_in_forEachStatement1502);  
			stream_80.add(string_literal58);

			pushFollow(FOLLOW_expression_in_forEachStatement1504);
			expression59=expression();
			state._fsp--;

			stream_expression.add(expression59.getTree());
			char_literal60=(Token)match(input,83,FOLLOW_83_in_forEachStatement1506);  
			stream_83.add(char_literal60);

			pushFollow(FOLLOW_bloc_in_forEachStatement1508);
			bloc61=bloc();
			state._fsp--;

			stream_bloc.add(bloc61.getTree());
			char_literal62=(Token)match(input,84,FOLLOW_84_in_forEachStatement1510);  
			stream_84.add(char_literal62);

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

			root_0 = (Object)adaptor.nil();
			// 281:65: -> ^( FOR[x] VARIABLE expression bloc )
			{
				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:281:68: ^( FOR[x] VARIABLE expression bloc )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FOR, x), root_1);
				adaptor.addChild(root_1, stream_VARIABLE.nextNode());
				adaptor.addChild(root_1, stream_expression.nextTree());
				adaptor.addChild(root_1, stream_bloc.nextTree());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "forEachStatement"


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


	// $ANTLR start "constraintCallStatement"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:283:1: constraintCallStatement : (d= '>>' )? CONSTRAINTIDENTIFIER expression ( ',' expression )* ')' ';' -> ^( CONSTRAINTIDENTIFIER ( $d)? ( expression )+ ) ;
	public final ANTLRBtrplaceSL2Parser.constraintCallStatement_return constraintCallStatement() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.constraintCallStatement_return retval = new ANTLRBtrplaceSL2Parser.constraintCallStatement_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token d=null;
		Token CONSTRAINTIDENTIFIER63=null;
		Token char_literal65=null;
		Token char_literal67=null;
		Token char_literal68=null;
		ParserRuleReturnScope expression64 =null;
		ParserRuleReturnScope expression66 =null;

		Object d_tree=null;
		Object CONSTRAINTIDENTIFIER63_tree=null;
		Object char_literal65_tree=null;
		Object char_literal67_tree=null;
		Object char_literal68_tree=null;
		RewriteRuleTokenStream stream_CONSTRAINTIDENTIFIER=new RewriteRuleTokenStream(adaptor,"token CONSTRAINTIDENTIFIER");
		RewriteRuleTokenStream stream_DISCRETE=new RewriteRuleTokenStream(adaptor,"token DISCRETE");
		RewriteRuleTokenStream stream_72=new RewriteRuleTokenStream(adaptor,"token 72");
		RewriteRuleTokenStream stream_73=new RewriteRuleTokenStream(adaptor,"token 73");
		RewriteRuleTokenStream stream_74=new RewriteRuleTokenStream(adaptor,"token 74");
		RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:283:24: ( (d= '>>' )? CONSTRAINTIDENTIFIER expression ( ',' expression )* ')' ';' -> ^( CONSTRAINTIDENTIFIER ( $d)? ( expression )+ ) )
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:283:26: (d= '>>' )? CONSTRAINTIDENTIFIER expression ( ',' expression )* ')' ';'
			{
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:283:27: (d= '>>' )?
			int alt17=2;
			int LA17_0 = input.LA(1);
			if ( (LA17_0==DISCRETE) ) {
				alt17=1;
			}
			switch (alt17) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:283:27: d= '>>'
					{
					d=(Token)match(input,DISCRETE,FOLLOW_DISCRETE_in_constraintCallStatement1532);  
					stream_DISCRETE.add(d);

					}
					break;

			}

			CONSTRAINTIDENTIFIER63=(Token)match(input,CONSTRAINTIDENTIFIER,FOLLOW_CONSTRAINTIDENTIFIER_in_constraintCallStatement1535);  
			stream_CONSTRAINTIDENTIFIER.add(CONSTRAINTIDENTIFIER63);

			pushFollow(FOLLOW_expression_in_constraintCallStatement1537);
			expression64=expression();
			state._fsp--;

			stream_expression.add(expression64.getTree());
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:283:66: ( ',' expression )*
			loop18:
			while (true) {
				int alt18=2;
				int LA18_0 = input.LA(1);
				if ( (LA18_0==73) ) {
					alt18=1;
				}

				switch (alt18) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:283:67: ',' expression
					{
					char_literal65=(Token)match(input,73,FOLLOW_73_in_constraintCallStatement1540);  
					stream_73.add(char_literal65);

					pushFollow(FOLLOW_expression_in_constraintCallStatement1542);
					expression66=expression();
					state._fsp--;

					stream_expression.add(expression66.getTree());
					}
					break;

				default :
					break loop18;
				}
			}

			char_literal67=(Token)match(input,72,FOLLOW_72_in_constraintCallStatement1546);  
			stream_72.add(char_literal67);

			char_literal68=(Token)match(input,74,FOLLOW_74_in_constraintCallStatement1548);  
			stream_74.add(char_literal68);

			// AST REWRITE
			// elements: d, CONSTRAINTIDENTIFIER, expression
			// token labels: d
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			retval.tree = root_0;
			RewriteRuleTokenStream stream_d=new RewriteRuleTokenStream(adaptor,"token d",d);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 283:92: -> ^( CONSTRAINTIDENTIFIER ( $d)? ( expression )+ )
			{
				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:283:95: ^( CONSTRAINTIDENTIFIER ( $d)? ( expression )+ )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot(stream_CONSTRAINTIDENTIFIER.nextNode(), root_1);
				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:283:119: ( $d)?
				if ( stream_d.hasNext() ) {
					adaptor.addChild(root_1, stream_d.nextNode());
				}
				stream_d.reset();

				if ( !(stream_expression.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_expression.hasNext() ) {
					adaptor.addChild(root_1, stream_expression.nextTree());
				}
				stream_expression.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "constraintCallStatement"


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


	// $ANTLR start "instruction"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:284:1: instruction : ( definitionStatement | forEachStatement | ifStatement | constraintCallStatement | exportStatement );
	public final ANTLRBtrplaceSL2Parser.instruction_return instruction() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.instruction_return retval = new ANTLRBtrplaceSL2Parser.instruction_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope definitionStatement69 =null;
		ParserRuleReturnScope forEachStatement70 =null;
		ParserRuleReturnScope ifStatement71 =null;
		ParserRuleReturnScope constraintCallStatement72 =null;
		ParserRuleReturnScope exportStatement73 =null;


		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:284:12: ( definitionStatement | forEachStatement | ifStatement | constraintCallStatement | exportStatement )
			int alt19=5;
			switch ( input.LA(1) ) {
			case IDENTIFIER:
			case LEFTFQDN:
			case LEFTIDENTIFIER:
			case LEFTVAR:
			case NODE_NAME:
			case VARIABLE:
			case 83:
				{
				alt19=1;
				}
				break;
			case 77:
				{
				alt19=2;
				}
				break;
			case 78:
				{
				alt19=3;
				}
				break;
			case CONSTRAINTIDENTIFIER:
			case DISCRETE:
				{
				alt19=4;
				}
				break;
			case 76:
				{
				alt19=5;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 19, 0, input);
				throw nvae;
			}
			switch (alt19) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:284:14: definitionStatement
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_definitionStatement_in_instruction1568);
					definitionStatement69=definitionStatement();
					state._fsp--;

					adaptor.addChild(root_0, definitionStatement69.getTree());

					}
					break;
				case 2 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:285:4: forEachStatement
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_forEachStatement_in_instruction1575);
					forEachStatement70=forEachStatement();
					state._fsp--;

					adaptor.addChild(root_0, forEachStatement70.getTree());

					}
					break;
				case 3 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:286:4: ifStatement
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_ifStatement_in_instruction1580);
					ifStatement71=ifStatement();
					state._fsp--;

					adaptor.addChild(root_0, ifStatement71.getTree());

					}
					break;
				case 4 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:287:4: constraintCallStatement
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_constraintCallStatement_in_instruction1585);
					constraintCallStatement72=constraintCallStatement();
					state._fsp--;

					adaptor.addChild(root_0, constraintCallStatement72.getTree());

					}
					break;
				case 5 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:288:4: exportStatement
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_exportStatement_in_instruction1590);
					exportStatement73=exportStatement();
					state._fsp--;

					adaptor.addChild(root_0, exportStatement73.getTree());

					}
					break;

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "instruction"


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


	// $ANTLR start "definitionStatement"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:291:1: definitionStatement : ( VARIABLE | set | IDENTIFIER | NODE_NAME ) ( ( EQUALS | PLUS_EQUALS | MINUS_EQUALS | TIMES_EQUALS | DIV_EQUALS | REMAINDER_EQUALS ) ^ expression | TYPE_DEFINITION ^ typeSpec ) ';' !;
	public final ANTLRBtrplaceSL2Parser.definitionStatement_return definitionStatement() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.definitionStatement_return retval = new ANTLRBtrplaceSL2Parser.definitionStatement_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token VARIABLE74=null;
		Token IDENTIFIER76=null;
		Token NODE_NAME77=null;
		Token set78=null;
		Token TYPE_DEFINITION80=null;
		Token char_literal82=null;
		ParserRuleReturnScope set75 =null;
		ParserRuleReturnScope expression79 =null;
		ParserRuleReturnScope typeSpec81 =null;

		Object VARIABLE74_tree=null;
		Object IDENTIFIER76_tree=null;
		Object NODE_NAME77_tree=null;
		Object set78_tree=null;
		Object TYPE_DEFINITION80_tree=null;
		Object char_literal82_tree=null;

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:291:20: ( ( VARIABLE | set | IDENTIFIER | NODE_NAME ) ( ( EQUALS | PLUS_EQUALS | MINUS_EQUALS | TIMES_EQUALS | DIV_EQUALS | REMAINDER_EQUALS ) ^ expression | TYPE_DEFINITION ^ typeSpec ) ';' !)
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:291:22: ( VARIABLE | set | IDENTIFIER | NODE_NAME ) ( ( EQUALS | PLUS_EQUALS | MINUS_EQUALS | TIMES_EQUALS | DIV_EQUALS | REMAINDER_EQUALS ) ^ expression | TYPE_DEFINITION ^ typeSpec ) ';' !
			{
			root_0 = (Object)adaptor.nil();


			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:291:22: ( VARIABLE | set | IDENTIFIER | NODE_NAME )
			int alt20=4;
			switch ( input.LA(1) ) {
			case VARIABLE:
				{
				alt20=1;
				}
				break;
			case LEFTFQDN:
			case LEFTIDENTIFIER:
			case LEFTVAR:
			case 83:
				{
				alt20=2;
				}
				break;
			case IDENTIFIER:
				{
				alt20=3;
				}
				break;
			case NODE_NAME:
				{
				alt20=4;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 20, 0, input);
				throw nvae;
			}
			switch (alt20) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:291:23: VARIABLE
					{
					VARIABLE74=(Token)match(input,VARIABLE,FOLLOW_VARIABLE_in_definitionStatement1605); 
					VARIABLE74_tree = (Object)adaptor.create(VARIABLE74);
					adaptor.addChild(root_0, VARIABLE74_tree);

					}
					break;
				case 2 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:291:34: set
					{
					pushFollow(FOLLOW_set_in_definitionStatement1609);
					set75=set();
					state._fsp--;

					adaptor.addChild(root_0, set75.getTree());

					}
					break;
				case 3 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:291:39: IDENTIFIER
					{
					IDENTIFIER76=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_definitionStatement1612); 
					IDENTIFIER76_tree = (Object)adaptor.create(IDENTIFIER76);
					adaptor.addChild(root_0, IDENTIFIER76_tree);

					}
					break;
				case 4 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:291:52: NODE_NAME
					{
					NODE_NAME77=(Token)match(input,NODE_NAME,FOLLOW_NODE_NAME_in_definitionStatement1616); 
					NODE_NAME77_tree = (Object)adaptor.create(NODE_NAME77);
					adaptor.addChild(root_0, NODE_NAME77_tree);

					}
					break;

			}

			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:292:75: ( ( EQUALS | PLUS_EQUALS | MINUS_EQUALS | TIMES_EQUALS | DIV_EQUALS | REMAINDER_EQUALS ) ^ expression | TYPE_DEFINITION ^ typeSpec )
			int alt21=2;
			int LA21_0 = input.LA(1);
			if ( (LA21_0==DIV_EQUALS||LA21_0==EQUALS||LA21_0==MINUS_EQUALS||LA21_0==PLUS_EQUALS||LA21_0==REMAINDER_EQUALS||LA21_0==TIMES_EQUALS) ) {
				alt21=1;
			}
			else if ( (LA21_0==TYPE_DEFINITION) ) {
				alt21=2;
			}

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

			switch (alt21) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:293:75: ( EQUALS | PLUS_EQUALS | MINUS_EQUALS | TIMES_EQUALS | DIV_EQUALS | REMAINDER_EQUALS ) ^ expression
					{
					set78=input.LT(1);
					set78=input.LT(1);
					if ( input.LA(1)==DIV_EQUALS||input.LA(1)==EQUALS||input.LA(1)==MINUS_EQUALS||input.LA(1)==PLUS_EQUALS||input.LA(1)==REMAINDER_EQUALS||input.LA(1)==TIMES_EQUALS ) {
						input.consume();
						root_0 = (Object)adaptor.becomeRoot((Object)adaptor.create(set78), root_0);
						state.errorRecovery=false;
					}
					else {
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					pushFollow(FOLLOW_expression_in_definitionStatement1636);
					expression79=expression();
					state._fsp--;

					adaptor.addChild(root_0, expression79.getTree());

					}
					break;
				case 2 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:294:2: TYPE_DEFINITION ^ typeSpec
					{
					TYPE_DEFINITION80=(Token)match(input,TYPE_DEFINITION,FOLLOW_TYPE_DEFINITION_in_definitionStatement1639); 
					TYPE_DEFINITION80_tree = (Object)adaptor.create(TYPE_DEFINITION80);
					root_0 = (Object)adaptor.becomeRoot(TYPE_DEFINITION80_tree, root_0);

					pushFollow(FOLLOW_typeSpec_in_definitionStatement1642);
					typeSpec81=typeSpec();
					state._fsp--;

					adaptor.addChild(root_0, typeSpec81.getTree());

					}
					break;

			}

			char_literal82=(Token)match(input,74,FOLLOW_74_in_definitionStatement1646); 
			}

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "definitionStatement"


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


	// $ANTLR start "typeSpec"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:297:1: typeSpec : IDENTIFIER ^ ( '<' ! templateOption ( ',' ! templateOption )* '>' !)? ;
	public final ANTLRBtrplaceSL2Parser.typeSpec_return typeSpec() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.typeSpec_return retval = new ANTLRBtrplaceSL2Parser.typeSpec_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token IDENTIFIER83=null;
		Token char_literal84=null;
		Token char_literal86=null;
		Token char_literal88=null;
		ParserRuleReturnScope templateOption85 =null;
		ParserRuleReturnScope templateOption87 =null;

		Object IDENTIFIER83_tree=null;
		Object char_literal84_tree=null;
		Object char_literal86_tree=null;
		Object char_literal88_tree=null;

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:297:9: ( IDENTIFIER ^ ( '<' ! templateOption ( ',' ! templateOption )* '>' !)? )
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:297:11: IDENTIFIER ^ ( '<' ! templateOption ( ',' ! templateOption )* '>' !)?
			{
			root_0 = (Object)adaptor.nil();


			IDENTIFIER83=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_typeSpec1654); 
			IDENTIFIER83_tree = (Object)adaptor.create(IDENTIFIER83);
			root_0 = (Object)adaptor.becomeRoot(IDENTIFIER83_tree, root_0);

			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:297:23: ( '<' ! templateOption ( ',' ! templateOption )* '>' !)?
			int alt23=2;
			int LA23_0 = input.LA(1);
			if ( (LA23_0==LT) ) {
				alt23=1;
			}
			switch (alt23) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:297:24: '<' ! templateOption ( ',' ! templateOption )* '>' !
					{
					char_literal84=(Token)match(input,LT,FOLLOW_LT_in_typeSpec1658); 
					pushFollow(FOLLOW_templateOption_in_typeSpec1661);
					templateOption85=templateOption();
					state._fsp--;

					adaptor.addChild(root_0, templateOption85.getTree());

					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:297:44: ( ',' ! templateOption )*
					loop22:
					while (true) {
						int alt22=2;
						int LA22_0 = input.LA(1);
						if ( (LA22_0==73) ) {
							alt22=1;
						}

						switch (alt22) {
						case 1 :
							// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:297:45: ',' ! templateOption
							{
							char_literal86=(Token)match(input,73,FOLLOW_73_in_typeSpec1664); 
							pushFollow(FOLLOW_templateOption_in_typeSpec1667);
							templateOption87=templateOption();
							state._fsp--;

							adaptor.addChild(root_0, templateOption87.getTree());

							}
							break;

						default :
							break loop22;
						}
					}

					char_literal88=(Token)match(input,GT,FOLLOW_GT_in_typeSpec1671); 
					}
					break;

			}

			}

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "typeSpec"


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


	// $ANTLR start "templateOption"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:299:1: templateOption : i1= IDENTIFIER ( '=' (i2= number |i3= STRING ) )? -> ^( TEMPLATE_OPTION $i1 ( $i2)? ( $i3)? ) ;
	public final ANTLRBtrplaceSL2Parser.templateOption_return templateOption() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.templateOption_return retval = new ANTLRBtrplaceSL2Parser.templateOption_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token i1=null;
		Token i3=null;
		Token char_literal89=null;
		ParserRuleReturnScope i2 =null;

		Object i1_tree=null;
		Object i3_tree=null;
		Object char_literal89_tree=null;
		RewriteRuleTokenStream stream_EQUALS=new RewriteRuleTokenStream(adaptor,"token EQUALS");
		RewriteRuleTokenStream stream_STRING=new RewriteRuleTokenStream(adaptor,"token STRING");
		RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
		RewriteRuleSubtreeStream stream_number=new RewriteRuleSubtreeStream(adaptor,"rule number");

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:299:15: (i1= IDENTIFIER ( '=' (i2= number |i3= STRING ) )? -> ^( TEMPLATE_OPTION $i1 ( $i2)? ( $i3)? ) )
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:299:17: i1= IDENTIFIER ( '=' (i2= number |i3= STRING ) )?
			{
			i1=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_templateOption1683);  
			stream_IDENTIFIER.add(i1);

			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:299:31: ( '=' (i2= number |i3= STRING ) )?
			int alt25=2;
			int LA25_0 = input.LA(1);
			if ( (LA25_0==EQUALS) ) {
				alt25=1;
			}
			switch (alt25) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:299:32: '=' (i2= number |i3= STRING )
					{
					char_literal89=(Token)match(input,EQUALS,FOLLOW_EQUALS_in_templateOption1686);  
					stream_EQUALS.add(char_literal89);

					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:299:36: (i2= number |i3= STRING )
					int alt24=2;
					int LA24_0 = input.LA(1);
					if ( (LA24_0==DECIMAL||LA24_0==FLOAT||LA24_0==HEXA||LA24_0==OCTAL) ) {
						alt24=1;
					}
					else if ( (LA24_0==STRING) ) {
						alt24=2;
					}

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

					switch (alt24) {
						case 1 :
							// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:299:37: i2= number
							{
							pushFollow(FOLLOW_number_in_templateOption1691);
							i2=number();
							state._fsp--;

							stream_number.add(i2.getTree());
							}
							break;
						case 2 :
							// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:299:47: i3= STRING
							{
							i3=(Token)match(input,STRING,FOLLOW_STRING_in_templateOption1695);  
							stream_STRING.add(i3);

							}
							break;

					}

					}
					break;

			}

			// AST REWRITE
			// elements: i1, i3, i2
			// token labels: i1, i3
			// rule labels: i2, retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			retval.tree = root_0;
			RewriteRuleTokenStream stream_i1=new RewriteRuleTokenStream(adaptor,"token i1",i1);
			RewriteRuleTokenStream stream_i3=new RewriteRuleTokenStream(adaptor,"token i3",i3);
			RewriteRuleSubtreeStream stream_i2=new RewriteRuleSubtreeStream(adaptor,"rule i2",i2!=null?i2.getTree():null);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 299:60: -> ^( TEMPLATE_OPTION $i1 ( $i2)? ( $i3)? )
			{
				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:299:63: ^( TEMPLATE_OPTION $i1 ( $i2)? ( $i3)? )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(TEMPLATE_OPTION, "TEMPLATE_OPTION"), root_1);
				adaptor.addChild(root_1, stream_i1.nextNode());
				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:299:86: ( $i2)?
				if ( stream_i2.hasNext() ) {
					adaptor.addChild(root_1, stream_i2.nextTree());
				}
				stream_i2.reset();

				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:299:91: ( $i3)?
				if ( stream_i3.hasNext() ) {
					adaptor.addChild(root_1, stream_i3.nextNode());
				}
				stream_i3.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "templateOption"


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


	// $ANTLR start "bloc"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:301:1: bloc : ( instruction )* -> ^( BLOCK ( instruction )* ) ;
	public final ANTLRBtrplaceSL2Parser.bloc_return bloc() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.bloc_return retval = new ANTLRBtrplaceSL2Parser.bloc_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope instruction90 =null;

		RewriteRuleSubtreeStream stream_instruction=new RewriteRuleSubtreeStream(adaptor,"rule instruction");

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:301:5: ( ( instruction )* -> ^( BLOCK ( instruction )* ) )
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:301:7: ( instruction )*
			{
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:301:7: ( instruction )*
			loop26:
			while (true) {
				int alt26=2;
				int LA26_0 = input.LA(1);
				if ( (LA26_0==CONSTRAINTIDENTIFIER||LA26_0==DISCRETE||LA26_0==IDENTIFIER||(LA26_0 >= LEFTFQDN && LA26_0 <= LEFTVAR)||LA26_0==NODE_NAME||LA26_0==VARIABLE||(LA26_0 >= 76 && LA26_0 <= 78)||LA26_0==83) ) {
					alt26=1;
				}

				switch (alt26) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:301:7: instruction
					{
					pushFollow(FOLLOW_instruction_in_bloc1722);
					instruction90=instruction();
					state._fsp--;

					stream_instruction.add(instruction90.getTree());
					}
					break;

				default :
					break loop26;
				}
			}

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

			root_0 = (Object)adaptor.nil();
			// 301:20: -> ^( BLOCK ( instruction )* )
			{
				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:301:23: ^( BLOCK ( instruction )* )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(BLOCK, "BLOCK"), root_1);
				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:301:31: ( instruction )*
				while ( stream_instruction.hasNext() ) {
					adaptor.addChild(root_1, stream_instruction.nextTree());
				}
				stream_instruction.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "bloc"


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


	// $ANTLR start "script_decl"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:303:1: script_decl : nameSpaceStatement ( useStatement )* ( instruction )* EOF !;
	public final ANTLRBtrplaceSL2Parser.script_decl_return script_decl() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.script_decl_return retval = new ANTLRBtrplaceSL2Parser.script_decl_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token EOF94=null;
		ParserRuleReturnScope nameSpaceStatement91 =null;
		ParserRuleReturnScope useStatement92 =null;
		ParserRuleReturnScope instruction93 =null;

		Object EOF94_tree=null;

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:303:12: ( nameSpaceStatement ( useStatement )* ( instruction )* EOF !)
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:303:14: nameSpaceStatement ( useStatement )* ( instruction )* EOF !
			{
			root_0 = (Object)adaptor.nil();


			pushFollow(FOLLOW_nameSpaceStatement_in_script_decl1739);
			nameSpaceStatement91=nameSpaceStatement();
			state._fsp--;

			adaptor.addChild(root_0, nameSpaceStatement91.getTree());

			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:303:33: ( useStatement )*
			loop27:
			while (true) {
				int alt27=2;
				int LA27_0 = input.LA(1);
				if ( (LA27_0==79) ) {
					alt27=1;
				}

				switch (alt27) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:303:33: useStatement
					{
					pushFollow(FOLLOW_useStatement_in_script_decl1741);
					useStatement92=useStatement();
					state._fsp--;

					adaptor.addChild(root_0, useStatement92.getTree());

					}
					break;

				default :
					break loop27;
				}
			}

			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:303:47: ( instruction )*
			loop28:
			while (true) {
				int alt28=2;
				int LA28_0 = input.LA(1);
				if ( (LA28_0==CONSTRAINTIDENTIFIER||LA28_0==DISCRETE||LA28_0==IDENTIFIER||(LA28_0 >= LEFTFQDN && LA28_0 <= LEFTVAR)||LA28_0==NODE_NAME||LA28_0==VARIABLE||(LA28_0 >= 76 && LA28_0 <= 78)||LA28_0==83) ) {
					alt28=1;
				}

				switch (alt28) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:303:47: instruction
					{
					pushFollow(FOLLOW_instruction_in_script_decl1744);
					instruction93=instruction();
					state._fsp--;

					adaptor.addChild(root_0, instruction93.getTree());

					}
					break;

				default :
					break loop28;
				}
			}

			EOF94=(Token)match(input,EOF,FOLLOW_EOF_in_script_decl1747); 
			}

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "script_decl"


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


	// $ANTLR start "ifStatement"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:305:1: ifStatement : 'if' expression '{' i1= bloc '}' ( 'else' ( '{' i2= bloc '}' |if2= ifStatement ) )? -> ^( IF expression $i1 ( $i2)? ( $if2)? ) ;
	public final ANTLRBtrplaceSL2Parser.ifStatement_return ifStatement() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.ifStatement_return retval = new ANTLRBtrplaceSL2Parser.ifStatement_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token string_literal95=null;
		Token char_literal97=null;
		Token char_literal98=null;
		Token string_literal99=null;
		Token char_literal100=null;
		Token char_literal101=null;
		ParserRuleReturnScope i1 =null;
		ParserRuleReturnScope i2 =null;
		ParserRuleReturnScope if2 =null;
		ParserRuleReturnScope expression96 =null;

		Object string_literal95_tree=null;
		Object char_literal97_tree=null;
		Object char_literal98_tree=null;
		Object string_literal99_tree=null;
		Object char_literal100_tree=null;
		Object char_literal101_tree=null;
		RewriteRuleTokenStream stream_78=new RewriteRuleTokenStream(adaptor,"token 78");
		RewriteRuleTokenStream stream_83=new RewriteRuleTokenStream(adaptor,"token 83");
		RewriteRuleTokenStream stream_84=new RewriteRuleTokenStream(adaptor,"token 84");
		RewriteRuleTokenStream stream_75=new RewriteRuleTokenStream(adaptor,"token 75");
		RewriteRuleSubtreeStream stream_bloc=new RewriteRuleSubtreeStream(adaptor,"rule bloc");
		RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");
		RewriteRuleSubtreeStream stream_ifStatement=new RewriteRuleSubtreeStream(adaptor,"rule ifStatement");

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:305:12: ( 'if' expression '{' i1= bloc '}' ( 'else' ( '{' i2= bloc '}' |if2= ifStatement ) )? -> ^( IF expression $i1 ( $i2)? ( $if2)? ) )
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:305:14: 'if' expression '{' i1= bloc '}' ( 'else' ( '{' i2= bloc '}' |if2= ifStatement ) )?
			{
			string_literal95=(Token)match(input,78,FOLLOW_78_in_ifStatement1755);  
			stream_78.add(string_literal95);

			pushFollow(FOLLOW_expression_in_ifStatement1757);
			expression96=expression();
			state._fsp--;

			stream_expression.add(expression96.getTree());
			char_literal97=(Token)match(input,83,FOLLOW_83_in_ifStatement1759);  
			stream_83.add(char_literal97);

			pushFollow(FOLLOW_bloc_in_ifStatement1763);
			i1=bloc();
			state._fsp--;

			stream_bloc.add(i1.getTree());
			char_literal98=(Token)match(input,84,FOLLOW_84_in_ifStatement1765);  
			stream_84.add(char_literal98);

			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:306:3: ( 'else' ( '{' i2= bloc '}' |if2= ifStatement ) )?
			int alt30=2;
			int LA30_0 = input.LA(1);
			if ( (LA30_0==75) ) {
				alt30=1;
			}
			switch (alt30) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:306:4: 'else' ( '{' i2= bloc '}' |if2= ifStatement )
					{
					string_literal99=(Token)match(input,75,FOLLOW_75_in_ifStatement1771);  
					stream_75.add(string_literal99);

					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:306:11: ( '{' i2= bloc '}' |if2= ifStatement )
					int alt29=2;
					int LA29_0 = input.LA(1);
					if ( (LA29_0==83) ) {
						alt29=1;
					}
					else if ( (LA29_0==78) ) {
						alt29=2;
					}

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

					switch (alt29) {
						case 1 :
							// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:306:12: '{' i2= bloc '}'
							{
							char_literal100=(Token)match(input,83,FOLLOW_83_in_ifStatement1774);  
							stream_83.add(char_literal100);

							pushFollow(FOLLOW_bloc_in_ifStatement1778);
							i2=bloc();
							state._fsp--;

							stream_bloc.add(i2.getTree());
							char_literal101=(Token)match(input,84,FOLLOW_84_in_ifStatement1780);  
							stream_84.add(char_literal101);

							}
							break;
						case 2 :
							// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:306:29: if2= ifStatement
							{
							pushFollow(FOLLOW_ifStatement_in_ifStatement1785);
							if2=ifStatement();
							state._fsp--;

							stream_ifStatement.add(if2.getTree());
							}
							break;

					}

					}
					break;

			}

			// AST REWRITE
			// elements: i2, i1, if2, expression
			// token labels: 
			// rule labels: if2, i1, i2, retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_if2=new RewriteRuleSubtreeStream(adaptor,"rule if2",if2!=null?if2.getTree():null);
			RewriteRuleSubtreeStream stream_i1=new RewriteRuleSubtreeStream(adaptor,"rule i1",i1!=null?i1.getTree():null);
			RewriteRuleSubtreeStream stream_i2=new RewriteRuleSubtreeStream(adaptor,"rule i2",i2!=null?i2.getTree():null);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 306:48: -> ^( IF expression $i1 ( $i2)? ( $if2)? )
			{
				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:306:50: ^( IF expression $i1 ( $i2)? ( $if2)? )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(IF, "IF"), root_1);
				adaptor.addChild(root_1, stream_expression.nextTree());
				adaptor.addChild(root_1, stream_i1.nextTree());
				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:306:71: ( $i2)?
				if ( stream_i2.hasNext() ) {
					adaptor.addChild(root_1, stream_i2.nextTree());
				}
				stream_i2.reset();

				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:306:76: ( $if2)?
				if ( stream_if2.hasNext() ) {
					adaptor.addChild(root_1, stream_if2.nextTree());
				}
				stream_if2.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "ifStatement"


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


	// $ANTLR start "exportStatement"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:309:1: exportStatement : x= 'export' ( VARIABLE | set ) ( ',' ( VARIABLE | set ) )* 'to' ( '*' | IDENTIFIER ( ',' IDENTIFIER )* ) ';' -> ^( EXPORT[$x] ( VARIABLE )* ( set )* ( '*' )? ( IDENTIFIER )* ) ;
	public final ANTLRBtrplaceSL2Parser.exportStatement_return exportStatement() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.exportStatement_return retval = new ANTLRBtrplaceSL2Parser.exportStatement_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token x=null;
		Token VARIABLE102=null;
		Token char_literal104=null;
		Token VARIABLE105=null;
		Token string_literal107=null;
		Token char_literal108=null;
		Token IDENTIFIER109=null;
		Token char_literal110=null;
		Token IDENTIFIER111=null;
		Token char_literal112=null;
		ParserRuleReturnScope set103 =null;
		ParserRuleReturnScope set106 =null;

		Object x_tree=null;
		Object VARIABLE102_tree=null;
		Object char_literal104_tree=null;
		Object VARIABLE105_tree=null;
		Object string_literal107_tree=null;
		Object char_literal108_tree=null;
		Object IDENTIFIER109_tree=null;
		Object char_literal110_tree=null;
		Object IDENTIFIER111_tree=null;
		Object char_literal112_tree=null;
		RewriteRuleTokenStream stream_TIMES=new RewriteRuleTokenStream(adaptor,"token TIMES");
		RewriteRuleTokenStream stream_VARIABLE=new RewriteRuleTokenStream(adaptor,"token VARIABLE");
		RewriteRuleTokenStream stream_82=new RewriteRuleTokenStream(adaptor,"token 82");
		RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
		RewriteRuleTokenStream stream_73=new RewriteRuleTokenStream(adaptor,"token 73");
		RewriteRuleTokenStream stream_74=new RewriteRuleTokenStream(adaptor,"token 74");
		RewriteRuleTokenStream stream_76=new RewriteRuleTokenStream(adaptor,"token 76");
		RewriteRuleSubtreeStream stream_set=new RewriteRuleSubtreeStream(adaptor,"rule set");

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:309:16: (x= 'export' ( VARIABLE | set ) ( ',' ( VARIABLE | set ) )* 'to' ( '*' | IDENTIFIER ( ',' IDENTIFIER )* ) ';' -> ^( EXPORT[$x] ( VARIABLE )* ( set )* ( '*' )? ( IDENTIFIER )* ) )
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:309:18: x= 'export' ( VARIABLE | set ) ( ',' ( VARIABLE | set ) )* 'to' ( '*' | IDENTIFIER ( ',' IDENTIFIER )* ) ';'
			{
			x=(Token)match(input,76,FOLLOW_76_in_exportStatement1818);  
			stream_76.add(x);

			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:309:29: ( VARIABLE | set )
			int alt31=2;
			int LA31_0 = input.LA(1);
			if ( (LA31_0==VARIABLE) ) {
				alt31=1;
			}
			else if ( ((LA31_0 >= LEFTFQDN && LA31_0 <= LEFTVAR)||LA31_0==83) ) {
				alt31=2;
			}

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

			switch (alt31) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:309:30: VARIABLE
					{
					VARIABLE102=(Token)match(input,VARIABLE,FOLLOW_VARIABLE_in_exportStatement1821);  
					stream_VARIABLE.add(VARIABLE102);

					}
					break;
				case 2 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:309:39: set
					{
					pushFollow(FOLLOW_set_in_exportStatement1823);
					set103=set();
					state._fsp--;

					stream_set.add(set103.getTree());
					}
					break;

			}

			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:309:44: ( ',' ( VARIABLE | set ) )*
			loop33:
			while (true) {
				int alt33=2;
				int LA33_0 = input.LA(1);
				if ( (LA33_0==73) ) {
					alt33=1;
				}

				switch (alt33) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:309:45: ',' ( VARIABLE | set )
					{
					char_literal104=(Token)match(input,73,FOLLOW_73_in_exportStatement1827);  
					stream_73.add(char_literal104);

					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:309:49: ( VARIABLE | set )
					int alt32=2;
					int LA32_0 = input.LA(1);
					if ( (LA32_0==VARIABLE) ) {
						alt32=1;
					}
					else if ( ((LA32_0 >= LEFTFQDN && LA32_0 <= LEFTVAR)||LA32_0==83) ) {
						alt32=2;
					}

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

					switch (alt32) {
						case 1 :
							// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:309:50: VARIABLE
							{
							VARIABLE105=(Token)match(input,VARIABLE,FOLLOW_VARIABLE_in_exportStatement1830);  
							stream_VARIABLE.add(VARIABLE105);

							}
							break;
						case 2 :
							// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:309:59: set
							{
							pushFollow(FOLLOW_set_in_exportStatement1832);
							set106=set();
							state._fsp--;

							stream_set.add(set106.getTree());
							}
							break;

					}

					}
					break;

				default :
					break loop33;
				}
			}

			string_literal107=(Token)match(input,82,FOLLOW_82_in_exportStatement1837);  
			stream_82.add(string_literal107);

			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:309:71: ( '*' | IDENTIFIER ( ',' IDENTIFIER )* )
			int alt35=2;
			int LA35_0 = input.LA(1);
			if ( (LA35_0==TIMES) ) {
				alt35=1;
			}
			else if ( (LA35_0==IDENTIFIER) ) {
				alt35=2;
			}

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

			switch (alt35) {
				case 1 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:309:72: '*'
					{
					char_literal108=(Token)match(input,TIMES,FOLLOW_TIMES_in_exportStatement1840);  
					stream_TIMES.add(char_literal108);

					}
					break;
				case 2 :
					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:309:76: IDENTIFIER ( ',' IDENTIFIER )*
					{
					IDENTIFIER109=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_exportStatement1842);  
					stream_IDENTIFIER.add(IDENTIFIER109);

					// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:309:87: ( ',' IDENTIFIER )*
					loop34:
					while (true) {
						int alt34=2;
						int LA34_0 = input.LA(1);
						if ( (LA34_0==73) ) {
							alt34=1;
						}

						switch (alt34) {
						case 1 :
							// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:309:88: ',' IDENTIFIER
							{
							char_literal110=(Token)match(input,73,FOLLOW_73_in_exportStatement1845);  
							stream_73.add(char_literal110);

							IDENTIFIER111=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_exportStatement1847);  
							stream_IDENTIFIER.add(IDENTIFIER111);

							}
							break;

						default :
							break loop34;
						}
					}

					}
					break;

			}

			char_literal112=(Token)match(input,74,FOLLOW_74_in_exportStatement1852);  
			stream_74.add(char_literal112);

			// AST REWRITE
			// elements: TIMES, set, VARIABLE, IDENTIFIER
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 309:110: -> ^( EXPORT[$x] ( VARIABLE )* ( set )* ( '*' )? ( IDENTIFIER )* )
			{
				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:309:112: ^( EXPORT[$x] ( VARIABLE )* ( set )* ( '*' )? ( IDENTIFIER )* )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(EXPORT, x), root_1);
				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:309:125: ( VARIABLE )*
				while ( stream_VARIABLE.hasNext() ) {
					adaptor.addChild(root_1, stream_VARIABLE.nextNode());
				}
				stream_VARIABLE.reset();

				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:309:135: ( set )*
				while ( stream_set.hasNext() ) {
					adaptor.addChild(root_1, stream_set.nextTree());
				}
				stream_set.reset();

				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:309:140: ( '*' )?
				if ( stream_TIMES.hasNext() ) {
					adaptor.addChild(root_1, stream_TIMES.nextNode());
				}
				stream_TIMES.reset();

				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:309:145: ( IDENTIFIER )*
				while ( stream_IDENTIFIER.hasNext() ) {
					adaptor.addChild(root_1, stream_IDENTIFIER.nextNode());
				}
				stream_IDENTIFIER.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "exportStatement"


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


	// $ANTLR start "nameSpaceStatement"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:311:1: nameSpaceStatement : x= 'namespace' IDENTIFIER ';' -> ^( NAMESPACE[$x] IDENTIFIER ) ;
	public final ANTLRBtrplaceSL2Parser.nameSpaceStatement_return nameSpaceStatement() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.nameSpaceStatement_return retval = new ANTLRBtrplaceSL2Parser.nameSpaceStatement_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token x=null;
		Token IDENTIFIER113=null;
		Token char_literal114=null;

		Object x_tree=null;
		Object IDENTIFIER113_tree=null;
		Object char_literal114_tree=null;
		RewriteRuleTokenStream stream_81=new RewriteRuleTokenStream(adaptor,"token 81");
		RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
		RewriteRuleTokenStream stream_74=new RewriteRuleTokenStream(adaptor,"token 74");

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:311:19: (x= 'namespace' IDENTIFIER ';' -> ^( NAMESPACE[$x] IDENTIFIER ) )
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:311:21: x= 'namespace' IDENTIFIER ';'
			{
			x=(Token)match(input,81,FOLLOW_81_in_nameSpaceStatement1879);  
			stream_81.add(x);

			IDENTIFIER113=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_nameSpaceStatement1881);  
			stream_IDENTIFIER.add(IDENTIFIER113);

			char_literal114=(Token)match(input,74,FOLLOW_74_in_nameSpaceStatement1883);  
			stream_74.add(char_literal114);

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

			root_0 = (Object)adaptor.nil();
			// 311:50: -> ^( NAMESPACE[$x] IDENTIFIER )
			{
				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:311:53: ^( NAMESPACE[$x] IDENTIFIER )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(NAMESPACE, x), root_1);
				adaptor.addChild(root_1, stream_IDENTIFIER.nextNode());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "nameSpaceStatement"


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


	// $ANTLR start "useStatement"
	// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:313:1: useStatement : x= 'import' IDENTIFIER ';' -> ^( USE[$x] IDENTIFIER ) ;
	public final ANTLRBtrplaceSL2Parser.useStatement_return useStatement() throws RecognitionException {
		ANTLRBtrplaceSL2Parser.useStatement_return retval = new ANTLRBtrplaceSL2Parser.useStatement_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token x=null;
		Token IDENTIFIER115=null;
		Token char_literal116=null;

		Object x_tree=null;
		Object IDENTIFIER115_tree=null;
		Object char_literal116_tree=null;
		RewriteRuleTokenStream stream_79=new RewriteRuleTokenStream(adaptor,"token 79");
		RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
		RewriteRuleTokenStream stream_74=new RewriteRuleTokenStream(adaptor,"token 74");

		try {
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:313:13: (x= 'import' IDENTIFIER ';' -> ^( USE[$x] IDENTIFIER ) )
			// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:313:15: x= 'import' IDENTIFIER ';'
			{
			x=(Token)match(input,79,FOLLOW_79_in_useStatement1901);  
			stream_79.add(x);

			IDENTIFIER115=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_useStatement1903);  
			stream_IDENTIFIER.add(IDENTIFIER115);

			char_literal116=(Token)match(input,74,FOLLOW_74_in_useStatement1905);  
			stream_74.add(char_literal116);

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

			root_0 = (Object)adaptor.nil();
			// 313:41: -> ^( USE[$x] IDENTIFIER )
			{
				// org/btrplace/btrpsl/antlr/ANTLRBtrplaceSL2.g:313:44: ^( USE[$x] IDENTIFIER )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(USE, x), root_1);
				adaptor.addChild(root_1, stream_IDENTIFIER.nextNode());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

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

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "useStatement"

	// Delegated rules



	public static final BitSet FOLLOW_70_in_cardinality976 = new BitSet(new long[]{0x400A007222000800L,0x0000000000080090L});
	public static final BitSet FOLLOW_powerable_in_cardinality978 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_explodedSet_in_set1015 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_rangeVar_in_set1019 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_rangeFqdn_in_set1023 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_rangeIdentifier_in_set1027 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_83_in_explodedSet1036 = new BitSet(new long[]{0x400E207222000820L,0x00000000001800D0L});
	public static final BitSet FOLLOW_setContent_in_explodedSet1039 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100200L});
	public static final BitSet FOLLOW_73_in_explodedSet1042 = new BitSet(new long[]{0x400E207222000820L,0x00000000000800D0L});
	public static final BitSet FOLLOW_setContent_in_explodedSet1044 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100200L});
	public static final BitSet FOLLOW_84_in_explodedSet1050 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LEFTVAR_in_rangeVar1098 = new BitSet(new long[]{0x400A007222000800L,0x0000000000080090L});
	public static final BitSet FOLLOW_braceContent_in_rangeVar1102 = new BitSet(new long[]{0x2000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_73_in_rangeVar1105 = new BitSet(new long[]{0x400A007222000800L,0x0000000000080090L});
	public static final BitSet FOLLOW_braceContent_in_rangeVar1109 = new BitSet(new long[]{0x2000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_RIGHT_in_rangeVar1113 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LEFTFQDN_in_rangeFqdn1140 = new BitSet(new long[]{0x400A007222000800L,0x0000000000080090L});
	public static final BitSet FOLLOW_braceContent_in_rangeFqdn1144 = new BitSet(new long[]{0x2000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_73_in_rangeFqdn1147 = new BitSet(new long[]{0x400A007222000800L,0x0000000000080090L});
	public static final BitSet FOLLOW_braceContent_in_rangeFqdn1151 = new BitSet(new long[]{0x2000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_RIGHT_in_rangeFqdn1155 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LEFTIDENTIFIER_in_rangeIdentifier1189 = new BitSet(new long[]{0x400A007222000800L,0x0000000000080090L});
	public static final BitSet FOLLOW_braceContent_in_rangeIdentifier1193 = new BitSet(new long[]{0x2000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_73_in_rangeIdentifier1196 = new BitSet(new long[]{0x400A007222000800L,0x0000000000080090L});
	public static final BitSet FOLLOW_braceContent_in_rangeIdentifier1200 = new BitSet(new long[]{0x2000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_RIGHT_in_rangeIdentifier1204 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_range_in_braceContent1225 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_term_in_range1242 = new BitSet(new long[]{0x0400000000000002L});
	public static final BitSet FOLLOW_RANGE_in_range1245 = new BitSet(new long[]{0x400A007222000800L,0x0000000000080090L});
	public static final BitSet FOLLOW_term_in_range1248 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expression_in_setContent1261 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_BLANK_in_setContent1270 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_71_in_term1283 = new BitSet(new long[]{0x400E207222000800L,0x00000000000800D0L});
	public static final BitSet FOLLOW_expression_in_term1285 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_72_in_term1287 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENTIFIER_in_term1296 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NODE_NAME_in_term1301 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_number_in_term1306 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_VARIABLE_in_term1311 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STRING_in_term1318 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_set_in_term1323 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_term_in_powerable1331 = new BitSet(new long[]{0x0100000000000002L});
	public static final BitSet FOLLOW_POWER_in_powerable1334 = new BitSet(new long[]{0x400A007222000800L,0x0000000000080090L});
	public static final BitSet FOLLOW_term_in_powerable1337 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NOT_in_negation1349 = new BitSet(new long[]{0x400A007222000800L,0x0000000000080090L});
	public static final BitSet FOLLOW_powerable_in_negation1352 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_cardinality_in_negation1357 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_powerable_in_negation1362 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_MINUS_in_unary1368 = new BitSet(new long[]{0x400E007222000800L,0x00000000000800D0L});
	public static final BitSet FOLLOW_negation_in_unary1370 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_negation_in_unary1388 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_unary_in_mult1398 = new BitSet(new long[]{0x0800000000002002L,0x0000000000000001L});
	public static final BitSet FOLLOW_set_in_mult1401 = new BitSet(new long[]{0x400E207222000800L,0x00000000000800D0L});
	public static final BitSet FOLLOW_unary_in_mult1410 = new BitSet(new long[]{0x0800000000002002L,0x0000000000000001L});
	public static final BitSet FOLLOW_mult_in_add1419 = new BitSet(new long[]{0x0040200000000002L});
	public static final BitSet FOLLOW_set_in_add1422 = new BitSet(new long[]{0x400E207222000800L,0x00000000000800D0L});
	public static final BitSet FOLLOW_mult_in_add1429 = new BitSet(new long[]{0x0040200000000002L});
	public static final BitSet FOLLOW_add_in_relation1438 = new BitSet(new long[]{0x0001018018100002L});
	public static final BitSet FOLLOW_set_in_relation1441 = new BitSet(new long[]{0x400E207222000800L,0x00000000000800D0L});
	public static final BitSet FOLLOW_add_in_relation1466 = new BitSet(new long[]{0x0001018018100002L});
	public static final BitSet FOLLOW_relation_in_expression1474 = new BitSet(new long[]{0x0020000000000012L});
	public static final BitSet FOLLOW_set_in_expression1477 = new BitSet(new long[]{0x400E207222000800L,0x00000000000800D0L});
	public static final BitSet FOLLOW_relation_in_expression1486 = new BitSet(new long[]{0x0020000000000012L});
	public static final BitSet FOLLOW_77_in_forEachStatement1498 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_VARIABLE_in_forEachStatement1500 = new BitSet(new long[]{0x0000000000000000L,0x0000000000010000L});
	public static final BitSet FOLLOW_80_in_forEachStatement1502 = new BitSet(new long[]{0x400E207222000800L,0x00000000000800D0L});
	public static final BitSet FOLLOW_expression_in_forEachStatement1504 = new BitSet(new long[]{0x0000000000000000L,0x0000000000080000L});
	public static final BitSet FOLLOW_83_in_forEachStatement1506 = new BitSet(new long[]{0x0002007200001400L,0x0000000000187010L});
	public static final BitSet FOLLOW_bloc_in_forEachStatement1508 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
	public static final BitSet FOLLOW_84_in_forEachStatement1510 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DISCRETE_in_constraintCallStatement1532 = new BitSet(new long[]{0x0000000000000400L});
	public static final BitSet FOLLOW_CONSTRAINTIDENTIFIER_in_constraintCallStatement1535 = new BitSet(new long[]{0x400E207222000800L,0x00000000000800D0L});
	public static final BitSet FOLLOW_expression_in_constraintCallStatement1537 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000300L});
	public static final BitSet FOLLOW_73_in_constraintCallStatement1540 = new BitSet(new long[]{0x400E207222000800L,0x00000000000800D0L});
	public static final BitSet FOLLOW_expression_in_constraintCallStatement1542 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000300L});
	public static final BitSet FOLLOW_72_in_constraintCallStatement1546 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
	public static final BitSet FOLLOW_74_in_constraintCallStatement1548 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_definitionStatement_in_instruction1568 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_forEachStatement_in_instruction1575 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ifStatement_in_instruction1580 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_constraintCallStatement_in_instruction1585 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_exportStatement_in_instruction1590 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_VARIABLE_in_definitionStatement1605 = new BitSet(new long[]{0x1080400000204000L,0x0000000000000006L});
	public static final BitSet FOLLOW_set_in_definitionStatement1609 = new BitSet(new long[]{0x1080400000204000L,0x0000000000000006L});
	public static final BitSet FOLLOW_IDENTIFIER_in_definitionStatement1612 = new BitSet(new long[]{0x1080400000204000L,0x0000000000000006L});
	public static final BitSet FOLLOW_NODE_NAME_in_definitionStatement1616 = new BitSet(new long[]{0x1080400000204000L,0x0000000000000006L});
	public static final BitSet FOLLOW_set_in_definitionStatement1621 = new BitSet(new long[]{0x400E207222000800L,0x00000000000800D0L});
	public static final BitSet FOLLOW_expression_in_definitionStatement1636 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
	public static final BitSet FOLLOW_TYPE_DEFINITION_in_definitionStatement1639 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_typeSpec_in_definitionStatement1642 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
	public static final BitSet FOLLOW_74_in_definitionStatement1646 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENTIFIER_in_typeSpec1654 = new BitSet(new long[]{0x0000010000000002L});
	public static final BitSet FOLLOW_LT_in_typeSpec1658 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_templateOption_in_typeSpec1661 = new BitSet(new long[]{0x0000000010000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_73_in_typeSpec1664 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_templateOption_in_typeSpec1667 = new BitSet(new long[]{0x0000000010000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_GT_in_typeSpec1671 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENTIFIER_in_templateOption1683 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_EQUALS_in_templateOption1686 = new BitSet(new long[]{0x4008000022000800L});
	public static final BitSet FOLLOW_number_in_templateOption1691 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STRING_in_templateOption1695 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_instruction_in_bloc1722 = new BitSet(new long[]{0x0002007200001402L,0x0000000000087010L});
	public static final BitSet FOLLOW_nameSpaceStatement_in_script_decl1739 = new BitSet(new long[]{0x0002007200001400L,0x000000000008F010L});
	public static final BitSet FOLLOW_useStatement_in_script_decl1741 = new BitSet(new long[]{0x0002007200001400L,0x000000000008F010L});
	public static final BitSet FOLLOW_instruction_in_script_decl1744 = new BitSet(new long[]{0x0002007200001400L,0x0000000000087010L});
	public static final BitSet FOLLOW_EOF_in_script_decl1747 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_78_in_ifStatement1755 = new BitSet(new long[]{0x400E207222000800L,0x00000000000800D0L});
	public static final BitSet FOLLOW_expression_in_ifStatement1757 = new BitSet(new long[]{0x0000000000000000L,0x0000000000080000L});
	public static final BitSet FOLLOW_83_in_ifStatement1759 = new BitSet(new long[]{0x0002007200001400L,0x0000000000187010L});
	public static final BitSet FOLLOW_bloc_in_ifStatement1763 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
	public static final BitSet FOLLOW_84_in_ifStatement1765 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000800L});
	public static final BitSet FOLLOW_75_in_ifStatement1771 = new BitSet(new long[]{0x0000000000000000L,0x0000000000084000L});
	public static final BitSet FOLLOW_83_in_ifStatement1774 = new BitSet(new long[]{0x0002007200001400L,0x0000000000187010L});
	public static final BitSet FOLLOW_bloc_in_ifStatement1778 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
	public static final BitSet FOLLOW_84_in_ifStatement1780 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ifStatement_in_ifStatement1785 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_76_in_exportStatement1818 = new BitSet(new long[]{0x0000007000000000L,0x0000000000080010L});
	public static final BitSet FOLLOW_VARIABLE_in_exportStatement1821 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040200L});
	public static final BitSet FOLLOW_set_in_exportStatement1823 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040200L});
	public static final BitSet FOLLOW_73_in_exportStatement1827 = new BitSet(new long[]{0x0000007000000000L,0x0000000000080010L});
	public static final BitSet FOLLOW_VARIABLE_in_exportStatement1830 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040200L});
	public static final BitSet FOLLOW_set_in_exportStatement1832 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040200L});
	public static final BitSet FOLLOW_82_in_exportStatement1837 = new BitSet(new long[]{0x0000000200000000L,0x0000000000000001L});
	public static final BitSet FOLLOW_TIMES_in_exportStatement1840 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
	public static final BitSet FOLLOW_IDENTIFIER_in_exportStatement1842 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000600L});
	public static final BitSet FOLLOW_73_in_exportStatement1845 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_exportStatement1847 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000600L});
	public static final BitSet FOLLOW_74_in_exportStatement1852 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_81_in_nameSpaceStatement1879 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_nameSpaceStatement1881 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
	public static final BitSet FOLLOW_74_in_nameSpaceStatement1883 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_79_in_useStatement1901 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_useStatement1903 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
	public static final BitSet FOLLOW_74_in_useStatement1905 = new BitSet(new long[]{0x0000000000000002L});
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy