/* Generated By:JavaCC: Do not edit this line. AEMparser.java */
package aemiliaParser;

import specificheAEmilia.*;

public class AEMparser implements AEMparserConstants {

	public static void main(String args[]) throws ParseException {
		AEMparser parser;
		if (args.length == 1) {
			System.out.println("AEmilia Parser Version 1.0:  Reading from file " + args[0] + " . . .");
			try {
				parser = new AEMparser(new java.io.FileInputStream(args[0]));
			} catch (java.io.FileNotFoundException e) {
				System.out.println("AEmilia Parser Version 1.0:  File " + args[0] + " not found.");
				return;
			}
		} else {
			System.out.println("AEmilia Parser Version 1.0:  Usage is one of:");
			System.out.println("         java AEMparser < inputfile");
			System.out.println("OR");
			System.out.println("         java AEMparser inputfile");
			return;
		}
		try {
			parser.ArchiType();
			System.out.println("AEmilia Parser Version 1.0:  Ruby program parsed successfully.");
		} catch (ParseException e) {
			e.printStackTrace();
			System.out.println("AEmilia Parser Version 1.0:  Encountered errors during parse.");
		}
	}

	/****************************************************************
	 * 7. Association of attributes with nonterminals with a short description
	 *****************************************************************
	 * ArchiElemTypes() ArchiTopology() BehaveVariations() Interactions()
	 * ActionRate() ActionPrioWeight() UNIinteractions() ANDinteractions()
	 * ORinteractions() ActionTypeList() ArchiElemInstances() ArchiInteractions()
	 * ArchiAttachments() AttachmentList() Attachment() SimpleAttachment()
	 * BehaveHidings() BehaveHidingList() Hiding() SimpleHiding()
	 * BehaveRestrictions() RestrictionList() Restriction() SimpleRestriction()
	 * BehaveRenamings() RenamingList() Renaming() SimpleRenaming()
	 * 
	 * <boolean> IterativeRenaming() // body of an iterative renaming ArchiParList()
	 * // p.e. list of architectural type parameters AETdefList() // list of AET
	 * definitions AETparList() // p.e. list of AET parameters Behavior() // list of
	 * behavior definitions BehavDefList() // p.e. list of behavior definitions
	 * after the first one FormalBehavParList() // p.e. list of formal parameters of
	 * the first behavior BehavParList() // p.e. list of behavior formal parameters
	 * BehavVarList() // p.e. list of behavior local variables FieldDeclList() //
	 * p.e. list of record field declarations BehavAparList() // p.e. list of
	 * behavior actual parameters ActionInputOutput() // p.e. list of action
	 * parameters ActionInputList() // n.e. list of input action parameters
	 * ActionOutputList() // n.e. list of output action parameters AEIdeclList() //
	 * list of AEI declarations AEIdecl() // AEI declaration AEIparList() // p.e.
	 * list of AEI actual parameters AEIparList() // n.e. list of AEI actual
	 * parameters ArchInteractionList() // p.e. list of architectural interactions
	 * ArchInteraction() // architectural interaction
	 * 
	 * <st_bucket2_cell> IterativeAttach() // body of an iterative attachment
	 * declaration ArchiTypeParam() // architectural type parameter AETdef() // AET
	 * definition AETformalPar() // AET formal parameter FirstBehaveDef() //
	 * definition of the first behavior SubsequentBehaveDef() // definition of a
	 * subsequent behavior FirstBehaveFormalPar() // formal parameter of the first
	 * behavior SubsequentBehaveFormalPar() // formal parameter of a subsequent
	 * behavior BehaveLocalVar() // behavior local variable RecordFieldDecl() //
	 * record field SimpleAEIdecl() // simple AEI declaration IterativeAEIdecl() //
	 * body of an iterative AEI declaration SimpleArchiInteraction() // simple
	 * architectural interaction IterativeArchiInteraction() // body of an iterative
	 * architectural interaction IterativeHiding() // body of an iterative hiding
	 * ActionTypeSetHidden() // action type set to be hidden IterativeRestriction()
	 * // body of an iterative restriction ActionTypeSetRestricted() // action type
	 * set to be restricted <expr> ArbitraryDataType() // arbitrary data type <expr>
	 * ParVarDataType() // data type for behavior parameters and variables <expr>
	 * NumDataType() // data type for priorities/rates/weights <term_parse_info>
	 * ProcessTerm() // term excluding behavior invocations <expr_parse_info>
	 * Guard() // boolean condition of a term e.c.i. <action_parse_info> Action() //
	 * action <expr_parse_info> AEIindex() // AEI index <expr_parse_info> Expr() //
	 * expression <expr_parse_info> ExprSequence() // expression list
	 ****************************************************************
	 * 
	 * 
	 * 8. Definition of operator precedence and associativity.
	 ****************************************************************
	 * 
	 * %nonassoc <ASSIGN> %left <AND> <OR> %right "!" %nonassoc "=" <NE> "<" <LE>
	 * ">" <GE> %left "+" "-" %left "*" "/"
	 ****************************************************************
	 * 
	 * 
	 * 9. Definition of the start symbol.
	 ****************************************************************
	 * 
	 * %start ArchiType()
	 * 
	 ****************************************************************/

	/****************************************************************/
	/* 10. Definition of grammar rules. */
	/****************************************************************/
	final public ArchiType ArchiType() throws ParseException {
		Header archiHeader;
		ArchiElemTypes archiElemTypes;
		ArchiTopology archiTopology;
		BehavVariations behavVariations = null;
		archiHeader = ArchiHeader();
		archiElemTypes = ArchiElemTypes();
		archiTopology = ArchiTopology();
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_BEHAV_VARIATIONS:
			behavVariations = BehaveVariations();
			break;
		default:
			jj_la1[0] = jj_gen;
			;
		}
		jj_consume_token(T_END);
		jj_consume_token(0);
		ArchiType architype = new ArchiType();
		architype.setArchiElemTypes(archiElemTypes);
		architype.setArchiTypeHeader(archiHeader);
		architype.setBehavVariations(behavVariations);
		architype.setTopologia(archiTopology);
		return architype;
	}

	final public Header ArchiHeader() throws ParseException {
		Token typeName;
		ParamDeclaration[] parametri;
		Header header;
		jj_consume_token(T_ARCHITECTURAL_TYPE);
		typeName = jj_consume_token(T_ID);
		jj_consume_token(LPAREN);
		parametri = ArchiParList();
		jj_consume_token(RPAREN);
		header = new Header();
		header.setName(typeName.image);
		header.setParameters(parametri);
		return header;
	}

	final public ParamDeclaration[] ArchiParList() throws ParseException {
		ParamDeclaration[] parametriFinali;
		ParamDeclaration first;
		ParamDeclaration[] ris = null;
		java.util.List<ParamDeclaration> list = new java.util.ArrayList<ParamDeclaration>();
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_VOID:
			jj_consume_token(T_VOID);
			ris = new ParamDeclaration[1]; {
			return ris;
		}
		case T_CONST:
			first = ArchiTypeParam();
			list.add(first);
			label_1: while (true) {
				if (jj_2_1(2147483647)) {
					;
				} else {
					break label_1;
				}
				jj_consume_token(COMMA);
				parametriFinali = ArchiParList2();
				for (ParamDeclaration paramDeclaration : parametriFinali) {
					list.add(paramDeclaration);
				}
			}
			ris = new ParamDeclaration[list.size()];
			list.toArray(ris);
			return ris;
		default:
			jj_la1[1] = jj_gen;
			jj_consume_token(-1);
			throw new ParseException();
		}
	}

	final public ParamDeclaration[] ArchiParList2() throws ParseException {
		ParamDeclaration[] parametriFinali;
		ParamDeclaration first;
		ParamDeclaration[] ris = null;
		java.util.List<ParamDeclaration> list = new java.util.ArrayList<ParamDeclaration>();
		first = ArchiTypeParam();
		list.add(first);
		label_2: while (true) {
			if (jj_2_2(2147483647)) {
				;
			} else {
				break label_2;
			}
			jj_consume_token(COMMA);
			parametriFinali = ArchiParList2();
			for (ParamDeclaration paramDeclaration : parametriFinali) {
				list.add(paramDeclaration);
			}
		}
		ris = new ParamDeclaration[list.size()];
		list.toArray(ris);
		return ris;
	}

	final public ParamDeclaration ArchiTypeParam() throws ParseException {
		ConstInit paramDeclaration;
		DataType dataType;
		Token pName;
		Expression expression;
		jj_consume_token(T_CONST);
		dataType = ArbitraryDataType();
		pName = jj_consume_token(T_ID);
		jj_consume_token(ASSIGN);
		expression = E();
		paramDeclaration = new ConstInit();
		paramDeclaration.setName(pName.image);
		paramDeclaration.setType(dataType);
		paramDeclaration.setExpr(expression);
		return paramDeclaration;
	}

	final public ArchiElemTypes ArchiElemTypes() throws ParseException {
		ArchiElemTypes archiElemTypes;
		ElemType[] elemTypes;
		jj_consume_token(T_ARCHI_ELEM_TYPES);
		elemTypes = AETdefList();
		archiElemTypes = new ArchiElemTypes();
		archiElemTypes.setElementTypes(elemTypes);
		return archiElemTypes;
	}

	final public ElemType[] AETdefList() throws ParseException {
		java.util.List<ElemType> list = new java.util.ArrayList<ElemType>();
		ElemType[] ris;
		ElemType elemType;
		label_3: while (true) {
			elemType = AETdef();
			list.add(elemType);
			switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
			case T_ELEM_TYPE:
				;
				break;
			default:
				jj_la1[2] = jj_gen;
				break label_3;
			}
		}
		ris = new ElemType[list.size()];
		list.toArray(ris);
		return ris;
	}

	final public ElemType AETdef() throws ParseException {
		Token tName;
		ParamDeclaration[] paramDeclarations;
		AETbehavior behavior;
		AETinteractions interactions;
		Interactions interazioniInput;
		InputInteractions inputInteractions;
		Interactions interazioniOutput;
		OutputInteractions outputInteractions;
		Header header;
		ElemType ris;
		jj_consume_token(T_ELEM_TYPE);
		tName = jj_consume_token(T_ID);
		jj_consume_token(LPAREN);
		paramDeclarations = AETparList();
		jj_consume_token(RPAREN);
		behavior = Behavior();
		jj_consume_token(T_INPUT_INTERACTIONS);
		interazioniInput = Interactions();
		if (interazioniInput != null) {
			inputInteractions = new InputInteractions();
			inputInteractions.setUni(interazioniInput.getUni());
			inputInteractions.setOr(interazioniInput.getOr());
			inputInteractions.setAnd(interazioniInput.getAnd());
		} else {
			inputInteractions = null;
		}
		jj_consume_token(T_OUTPUT_INTERACTIONS);
		interazioniOutput = Interactions();
		if (interazioniOutput != null) {
			outputInteractions = new OutputInteractions();
			outputInteractions.setUni(interazioniOutput.getUni());
			outputInteractions.setOr(interazioniOutput.getOr());
			outputInteractions.setAnd(interazioniOutput.getAnd());
		} else {
			outputInteractions = null;
		}
		interactions = new AETinteractions();
		interactions.setInIn(inputInteractions);
		interactions.setOuIn(outputInteractions);
		header = new Header();
		header.setName(tName.image);
		header.setParameters(paramDeclarations);
		ris = new ElemType();
		ris.setHeader(header);
		ris.setBehavior(behavior);
		ris.setInteractions(interactions);
		return ris;
	}

	final public ParamDeclaration[] AETparList() throws ParseException {
		ParamDeclaration[] ris;
		java.util.List<ParamDeclaration> list = new java.util.ArrayList<ParamDeclaration>();
		ParamDeclaration first;
		ParamDeclaration[] tail;
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_VOID:
			jj_consume_token(T_VOID);
			ris = new ParamDeclaration[1]; {
			return ris;
		}
		default:
			jj_la1[3] = jj_gen;
			if (jj_2_4(2147483647)) {
				first = AETformalPar();
				list.add(first);
				label_4: while (true) {
					if (jj_2_3(2147483647)) {
						;
					} else {
						break label_4;
					}
					jj_consume_token(COMMA);
					tail = AETparList();
					for (ParamDeclaration param : tail) {
						list.add(param);
					}
				}
				ris = new ParamDeclaration[list.size()];
				list.toArray(ris);
				return ris;
			} else {
				jj_consume_token(-1);
				throw new ParseException();
			}
		}
	}

	final public ParamDeclaration AETformalPar() throws ParseException {
		Const parFormale;
		Token idPar;
		DataType tipoDato;
		jj_consume_token(T_CONST);
		tipoDato = ArbitraryDataType();
		idPar = jj_consume_token(T_ID);
		parFormale = new Const();
		parFormale.setName(idPar.image);
		parFormale.setType(tipoDato);
		return parFormale;
	}

	final public AETbehavior Behavior() throws ParseException {
		AETbehavior ris;
		BehavEquation first;
		BehavEquation[] tail;
		java.util.List<BehavEquation> list = new java.util.ArrayList<BehavEquation>();
		BehavEquation[] tot;
		jj_consume_token(T_BEHAVIOR);
		first = FirstBehaveDef();
		list.add(first);
		label_5: while (true) {
			switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
			case SEMICOLON:
				;
				break;
			default:
				jj_la1[4] = jj_gen;
				break label_5;
			}
			jj_consume_token(SEMICOLON);
			tail = BehavDefList();
			for (BehavEquation behavEquation : tail) {
				list.add(behavEquation);
			}
		}
		tot = new BehavEquation[list.size()];
		list.toArray(tot);
		ris = new AETbehavior();
		ris.setBehaviors(tot);
		return ris;
	}

	final public BehavEquation FirstBehaveDef() throws ParseException {
		Header intestazione;
		ProcessTerm termineProcesso;
		BehavEquation ris;
		Token nome;
		ParamDeclaration[] parInizs;
		ParamDeclaration[] parLocs;
		ParamDeclaration[] tot;
		java.util.List<ParamDeclaration> pars = new java.util.ArrayList<ParamDeclaration>();
		nome = jj_consume_token(T_ID);
		jj_consume_token(LPAREN);
		parInizs = FormalBehavParList();
		for (ParamDeclaration par : parInizs) {
			pars.add(par);
		}
		jj_consume_token(SEMICOLON);
		parLocs = BehavVarList();
		for (ParamDeclaration par : parLocs) {
			pars.add(par);
		}
		jj_consume_token(RPAREN);
		intestazione = new Header();
		intestazione.setName(nome.image);
		tot = new ParamDeclaration[pars.size()];
		pars.toArray(tot);
		intestazione.setParameters(tot);
		jj_consume_token(EQUAL);
		termineProcesso = ProcessTerm();
		ris = new BehavEquation();
		ris.setBehavHeader(intestazione);
		ris.setTermineProcesso(termineProcesso);
		return ris;
	}

	final public ParamDeclaration[] FormalBehavParList() throws ParseException {
		ParamDeclaration[] ris;
		java.util.List<ParamDeclaration> list = new java.util.ArrayList<ParamDeclaration>();
		ParamDeclaration first;
		ParamDeclaration[] tail;
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_VOID:
			jj_consume_token(T_VOID);
			list.add(null);
			break;
		case T_INTEGER:
		case T_REAL:
		case T_BOOLEAN:
		case T_LIST:
		case T_ARRAY:
		case T_RECORD:
			first = FirstBehaveFormalPar();
			list.add(first);
			label_6: while (true) {
				if (jj_2_5(2147483647)) {
					;
				} else {
					break label_6;
				}
				jj_consume_token(COMMA);
				tail = FormalBehavParList();
				for (ParamDeclaration par : tail) {
					list.add(par);
				}
			}
			break;
		default:
			jj_la1[5] = jj_gen;
			jj_consume_token(-1);
			throw new ParseException();
		}
		ris = new ParamDeclaration[list.size()];
		list.toArray(ris);
		return ris;
	}

	final public ParamDeclaration FirstBehaveFormalPar() throws ParseException {
		VarInit ris;
		NormalType tipo;
		Token nome;
		Expression espressione;
		tipo = ParVarDataType();
		nome = jj_consume_token(T_ID);
		jj_consume_token(ASSIGN);
		espressione = E();
		ris = new VarInit();
		ris.setType(tipo);
		ris.setName(nome.image);
		ris.setExpr(espressione);
		return ris;
	}

	final public BehavEquation[] BehavDefList() throws ParseException {
		java.util.List<BehavEquation> list = new java.util.ArrayList<BehavEquation>();
		BehavEquation first;
		BehavEquation[] ris;
		first = SubsequentBehaveDef();
		list.add(first);
		label_7: while (true) {
			if (jj_2_6(2147483647)) {
				;
			} else {
				break label_7;
			}
			jj_consume_token(SEMICOLON);
			first = SubsequentBehaveDef();
			list.add(first);
		}
		ris = new BehavEquation[list.size()];
		list.toArray(ris);
		return ris;
	}

	final public BehavEquation SubsequentBehaveDef() throws ParseException {
		Token nome;
		ParamDeclaration[] variabili;
		ParamDeclaration[] locali;
		ParamDeclaration[] tot;
		ProcessTerm termine;
		BehavEquation ris;
		java.util.List<ParamDeclaration> list = new java.util.ArrayList<ParamDeclaration>();
		Header intestazione;
		nome = jj_consume_token(T_ID);
		jj_consume_token(LPAREN);
		variabili = BehavParList();
		for (ParamDeclaration parametro : variabili) {
			list.add(parametro);
		}
		jj_consume_token(SEMICOLON);
		locali = BehavVarList();
		for (ParamDeclaration parametro : locali) {
			list.add(parametro);
		}
		jj_consume_token(RPAREN);
		jj_consume_token(EQUAL);
		termine = ProcessTerm();
		intestazione = new Header();
		intestazione.setName(nome.image);
		tot = new ParamDeclaration[list.size()];
		list.toArray(tot);
		intestazione.setParameters(tot);
		ris = new BehavEquation();
		ris.setBehavHeader(intestazione);
		ris.setTermineProcesso(termine);
		return ris;
	}

	final public ParamDeclaration[] BehavParList() throws ParseException {
		ParamDeclaration var;
		java.util.List<ParamDeclaration> list = new java.util.ArrayList<ParamDeclaration>();
		ParamDeclaration[] ris;
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_VOID:
			jj_consume_token(T_VOID);
			list.add(null);
			break;
		case T_INTEGER:
		case T_REAL:
		case T_BOOLEAN:
		case T_LIST:
		case T_ARRAY:
		case T_RECORD:
			var = SubsequentBehaveFormalPar();
			list.add(var);
			label_8: while (true) {
				if (jj_2_7(2147483647)) {
					;
				} else {
					break label_8;
				}
				jj_consume_token(COMMA);
				var = SubsequentBehaveFormalPar();
				list.add(var);
			}
			break;
		default:
			jj_la1[6] = jj_gen;
			jj_consume_token(-1);
			throw new ParseException();
		}
		ris = new ParamDeclaration[list.size()];
		list.toArray(ris);
		return ris;
	}

	final public ParamDeclaration SubsequentBehaveFormalPar() throws ParseException {
		VariableDeclaration ris;
		NormalType tipo;
		Token nome;
		tipo = ParVarDataType();
		nome = jj_consume_token(T_ID);
		ris = new VariableDeclaration();
		ris.setName(nome.image);
		ris.setType(tipo);
		return ris;
	}

	final public ParamDeclaration[] BehavVarList() throws ParseException {
		ParamDeclaration[] ris;
		java.util.List<ParamDeclaration> list = new java.util.ArrayList<ParamDeclaration>();
		ParamDeclaration par;
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_VOID:
			jj_consume_token(T_VOID);
			list.add(null);
			break;
		case T_LOCAL:
			par = BehaveLocalVar();
			list.add(par);
			label_9: while (true) {
				switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
				case COMMA:
					;
					break;
				default:
					jj_la1[7] = jj_gen;
					break label_9;
				}
				jj_consume_token(COMMA);
				par = BehaveLocalVar();
				list.add(par);
			}
			break;
		default:
			jj_la1[8] = jj_gen;
			jj_consume_token(-1);
			throw new ParseException();
		}
		ris = new ParamDeclaration[list.size()];
		list.toArray(ris);
		return ris;
	}

	final public ParamDeclaration BehaveLocalVar() throws ParseException {
		Local ris;
		NormalType tipo;
		Token nome;
		jj_consume_token(T_LOCAL);
		tipo = ParVarDataType();
		nome = jj_consume_token(T_ID);
		ris = new Local();
		ris.setName(nome.image);
		ris.setType(tipo);
		return ris;
	}

	final public DataType ArbitraryDataType() throws ParseException {
		DataType ris;
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_INTEGER:
		case T_REAL:
		case T_BOOLEAN:
		case T_LIST:
		case T_ARRAY:
		case T_RECORD:
			ris = ParVarDataType();
			break;
		case T_PRIO:
		case T_RATE:
		case T_WEIGHT:
			ris = NumDataType();
			break;
		default:
			jj_la1[9] = jj_gen;
			jj_consume_token(-1);
			throw new ParseException();
		}
		return ris;
	}

	final public NormalType ParVarDataType() throws ParseException {
		NormalType ris;
		Expression e1;
		Expression e2;
		NormalType nt;
		Expression e;
		VariableDeclaration[] vds;
		if (jj_2_8(2147483647)) {
			jj_consume_token(T_INTEGER);
			jj_consume_token(LPAREN);
			e1 = E();
			jj_consume_token(DOTDOT);
			e2 = E();
			jj_consume_token(RPAREN);
			ris = new IntegerRangeType();
			((IntegerRangeType) ris).setBeginningInt(e1);
			((IntegerRangeType) ris).setEndingInt(e2);
		} else {
			switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
			case T_INTEGER:
				jj_consume_token(T_INTEGER);
				ris = new IntegerType();
				break;
			case T_REAL:
				jj_consume_token(T_REAL);
				ris = new RealType();
				break;
			case T_BOOLEAN:
				jj_consume_token(T_BOOLEAN);
				ris = new BooleanType();
				break;
			case T_LIST:
				jj_consume_token(T_LIST);
				jj_consume_token(LPAREN);
				nt = ParVarDataType();
				jj_consume_token(RPAREN);
				ris = new ListType();
				((ListType) ris).setType(nt);
				break;
			case T_ARRAY:
				jj_consume_token(T_ARRAY);
				jj_consume_token(LPAREN);
				e = E();
				jj_consume_token(COMMA);
				nt = ParVarDataType();
				jj_consume_token(RPAREN);
				ris = new ArrayType();
				((ArrayType) ris).setLength(e);
				((ArrayType) ris).setType(nt);
				break;
			case T_RECORD:
				jj_consume_token(T_RECORD);
				jj_consume_token(LPAREN);
				vds = FieldDeclList();
				jj_consume_token(RPAREN);
				ris = new RecordType();
				((RecordType) ris).setVariableDeclarations(vds);
				break;
			default:
				jj_la1[10] = jj_gen;
				jj_consume_token(-1);
				throw new ParseException();
			}
		}
		return ris;
	}

	final public VariableDeclaration[] FieldDeclList() throws ParseException {
		VariableDeclaration vd;
		java.util.List<VariableDeclaration> list = new java.util.ArrayList<VariableDeclaration>();
		VariableDeclaration[] ris;
		vd = RecordFieldDecl();
		list.add(vd);
		label_10: while (true) {
			switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
			case COMMA:
				;
				break;
			default:
				jj_la1[11] = jj_gen;
				break label_10;
			}
			jj_consume_token(COMMA);
			vd = RecordFieldDecl();
			list.add(vd);
		}
		ris = new VariableDeclaration[list.size()];
		list.toArray(ris);
		return ris;
	}

	final public VariableDeclaration RecordFieldDecl() throws ParseException {
		VariableDeclaration ris;
		NormalType nt;
		Token nome;
		nt = ParVarDataType();
		nome = jj_consume_token(T_ID);
		ris = new VariableDeclaration();
		ris.setName(nome.image);
		ris.setType(nt);
		return ris;
	}

	final public SpecialType NumDataType() throws ParseException {
		SpecialType ris;
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_PRIO:
			jj_consume_token(T_PRIO);
			ris = new PrioType();
			break;
		case T_RATE:
			jj_consume_token(T_RATE);
			ris = new RateType();
			break;
		case T_WEIGHT:
			jj_consume_token(T_WEIGHT);
			ris = new WeightType();
			break;
		default:
			jj_la1[12] = jj_gen;
			jj_consume_token(-1);
			throw new ParseException();
		}
		return ris;
	}

	final public ProcessTerm ProcessTerm() throws ParseException {
		ProcessTerm ris;
		Action azione;
		ProcessTerm pt;
		ProcessTerm[] pts;
		java.util.List<ProcessTerm> list = new java.util.ArrayList<ProcessTerm>();
		Token comportamento;
		Expression[] parAttuali = new Expression[0];
		Expression guardia = new specificheAEmilia.Boolean(true);
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_STOP:
			jj_consume_token(T_STOP);
			ris = new Stop();
			break;
		case LESS:
			azione = Action();
			jj_consume_token(DOT);
			pt = ProcessTerm();
			ris = new ActionProcess();
			((ActionProcess) ris).setAzione(azione);
			((ActionProcess) ris).setProcesso(pt);
			break;
		case T_CHOICE:
			jj_consume_token(T_CHOICE);
			jj_consume_token(LBRACE);
			switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
			case T_COND:
				guardia = Guard();
				break;
			default:
				jj_la1[13] = jj_gen;
				;
			}
			pt = ProcessTerm();
			pt.setCondition(guardia);
			list.add(pt);
			label_11: while (true) {
				jj_consume_token(COMMA);
				switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
				case T_COND:
					guardia = Guard();
					break;
				default:
					jj_la1[14] = jj_gen;
					;
				}
				pt = ProcessTerm();
				pt.setCondition(guardia);
				list.add(pt);
				switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
				case COMMA:
					;
					break;
				default:
					jj_la1[15] = jj_gen;
					break label_11;
				}
			}
			jj_consume_token(RBRACE);
			ris = new ChoiceProcess();
			pts = new ProcessTerm[list.size()];
			list.toArray(pts);
			((ChoiceProcess) ris).setProcesses(pts);
			break;
		case T_ID:
			comportamento = jj_consume_token(T_ID);
			jj_consume_token(LPAREN);
			if (jj_2_9(1)) {
				parAttuali = BehavAparList();
			} else {
				;
			}
			jj_consume_token(RPAREN);
			ris = new BehavProcess();
			((BehavProcess) ris).setName(comportamento.image);
			((BehavProcess) ris).setExprs(parAttuali);
			break;
		default:
			jj_la1[16] = jj_gen;
			jj_consume_token(-1);
			throw new ParseException();
		}
		return ris;
	}

	final public Expression Guard() throws ParseException {
		Expression ris;
		jj_consume_token(T_COND);
		jj_consume_token(LPAREN);
		ris = E();
		jj_consume_token(RPAREN);
		jj_consume_token(IMPL);
		return ris;
	}

	final public Action Action() throws ParseException {
		Action ris;
		ActionType tipo;
		ActionRate tasso;
		jj_consume_token(LESS);
		tipo = ActionType();
		jj_consume_token(COMMA);
		tasso = ActionRate();
		jj_consume_token(GREATER);
		ris = new Action();
		ris.setType(tipo);
		ris.setRate(tasso);
		return ris;
	}

	final public ActionType ActionType() throws ParseException {
		ActionType ris;
		Token name;
		String[] variabili;
		Expression[] outputs;
		if (jj_2_10(2147483647)) {
			name = jj_consume_token(T_ID);
			jj_consume_token(QUESTION);
			jj_consume_token(LPAREN);
			variabili = ActionInputList();
			jj_consume_token(RPAREN);
			ris = new ActionInput();
			((ActionInput) ris).setName(name.image);
			((ActionInput) ris).setInputVariables(variabili);
		} else if (jj_2_11(2147483647)) {
			name = jj_consume_token(T_ID);
			jj_consume_token(EXCLAMATION);
			jj_consume_token(LPAREN);
			outputs = ActionOutputList();
			jj_consume_token(RPAREN);
			ris = new ActionOutput();
			((ActionOutput) ris).setName(name.image);
			((ActionOutput) ris).setOutputExprs(outputs);
		} else {
			switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
			case T_ID:
				name = jj_consume_token(T_ID);
				ris = new ActionType();
				ris.setName(name.image);
				return ris;
			default:
				jj_la1[17] = jj_gen;
				jj_consume_token(-1);
				throw new ParseException();
			}
		}
		throw new Error("Missing return statement in function");
	}

	final public String[] ActionInputList() throws ParseException {
		Token t1;
		String[] strings;
		java.util.List<String> list = new java.util.ArrayList<String>();
		String[] ris;
		if (jj_2_12(2147483647)) {
			t1 = jj_consume_token(T_ID);
			list.add(t1.image);
		} else if (jj_2_13(2147483647)) {
			t1 = jj_consume_token(T_ID);
			list.add(t1.image);
			jj_consume_token(COMMA);
			strings = ActionInputList();
			for (String s1 : strings) {
				list.add(s1);
			}
			ris = new String[list.size()];
			list.toArray(ris);
			return ris;
		} else {
			jj_consume_token(-1);
			throw new ParseException();
		}
		throw new Error("Missing return statement in function");
	}

	final public Expression[] ActionOutputList() throws ParseException {
		Expression[] exprs;
		Expression[] ris;
		Expression e1;
		java.util.List<Expression> list = new java.util.ArrayList<Expression>();
		if (jj_2_14(2)) {
			e1 = E();
			list.add(e1);
		} else if (jj_2_15(2147483647)) {
			e1 = E();
			list.add(e1);
			jj_consume_token(COMMA);
			exprs = ActionOutputList();
			for (Expression expression : exprs) {
				list.add(expression);
			}
			ris = new Expression[list.size()];
			list.toArray(ris);
			return ris;
		} else {
			jj_consume_token(-1);
			throw new ParseException();
		}
		throw new Error("Missing return statement in function");
	}

	final public ActionRate ActionRate() throws ParseException {
		ActionRate ris;
		Expression expression1 = null;
		Expression expression2 = null;
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_EXP:
			jj_consume_token(T_EXP);
			jj_consume_token(LPAREN);
			expression1 = E();
			jj_consume_token(RPAREN);
			ris = new RateExp();
			((RateExp) ris).setExpr(expression1);
			break;
		case T_INF:
			jj_consume_token(T_INF);
			switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
			case LPAREN:
				jj_consume_token(LPAREN);
				expression1 = E();
				jj_consume_token(COMMA);
				expression2 = E();
				jj_consume_token(RPAREN);
				break;
			default:
				jj_la1[18] = jj_gen;
				;
			}
			ris = new RateInf();
			((RateInf) ris).setPrio(expression1);
			((RateInf) ris).setWeight(expression2);
			break;
		case UNDERSCORE:
			jj_consume_token(UNDERSCORE);
			switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
			case LPAREN:
				jj_consume_token(LPAREN);
				expression1 = E();
				jj_consume_token(COMMA);
				expression2 = E();
				jj_consume_token(RPAREN);
				break;
			default:
				jj_la1[19] = jj_gen;
				;
			}
			ris = new Rate_();
			((Rate_) ris).setPrio(expression1);
			((Rate_) ris).setWeight(expression2);
			break;
		default:
			jj_la1[20] = jj_gen;
			jj_consume_token(-1);
			throw new ParseException();
		}
		return ris;
	}

	final public Expression[] BehavAparList() throws ParseException {
		Expression e1;
		java.util.List<Expression> list = new java.util.ArrayList<Expression>();
		Expression[] ris;
		e1 = E();
		list.add(e1);
		label_12: while (true) {
			switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
			case COMMA:
				;
				break;
			default:
				jj_la1[21] = jj_gen;
				break label_12;
			}
			jj_consume_token(COMMA);
			e1 = E();
			list.add(e1);
		}
		ris = new Expression[list.size()];
		list.toArray(ris);
		return ris;
	}

	final public Interactions Interactions() throws ParseException {
		Interactions interactions;
		UNIinteractions uniinteractions = null;
		ANDinteractions andinteractions = null;
		ORinteractions orinteractions = null;
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_VOID:
			jj_consume_token(T_VOID);
			return null;
		// default:
		// jj_la1[22] = jj_gen;
		// if (jj_2_16(2147483647)) {
		// orinteractions = ORinteractions();
		// } else if (jj_2_17(2147483647)) {
		// uniinteractions = UNIinteractions();
		// } else if (jj_2_18(2147483647)) {
		// andinteractions = ANDinteractions();
		// } else if (jj_2_19(2147483647)) {
		// andinteractions = ANDinteractions();
		// orinteractions = ORinteractions();
		// } else if (jj_2_20(2147483647)) {
		// uniinteractions = UNIinteractions();
		// orinteractions = ORinteractions();
		// } else if (jj_2_21(2147483647)) {
		// uniinteractions = UNIinteractions();
		// andinteractions = ANDinteractions();
		// } else if (jj_2_22(2147483647)) {
		// uniinteractions = UNIinteractions();
		// andinteractions = ANDinteractions();
		// orinteractions = ORinteractions();
		// } else {
		// jj_consume_token(-1);
		// throw new ParseException();
		// }
		default:
			jj_la1[22] = jj_gen;
			if (jj_2_22(2147483647)) {
				uniinteractions = UNIinteractions();
				andinteractions = ANDinteractions();
				orinteractions = ORinteractions();
			} else if (jj_2_21(2147483647)) {
				uniinteractions = UNIinteractions();
				andinteractions = ANDinteractions();
			} else if (jj_2_20(2147483647)) {
				uniinteractions = UNIinteractions();
				orinteractions = ORinteractions();
			} else if (jj_2_19(2147483647)) {
				andinteractions = ANDinteractions();
				orinteractions = ORinteractions();
			} else if (jj_2_16(2147483647)) {
				orinteractions = ORinteractions();
			} else if (jj_2_17(2147483647)) {
				uniinteractions = UNIinteractions();
			} else if (jj_2_18(2147483647)) {
				andinteractions = ANDinteractions();
			} else {
				jj_consume_token(-1);
				throw new ParseException();
			}
		}
		interactions = new Interactions();
		interactions.setUni(uniinteractions);
		interactions.setAnd(andinteractions);
		interactions.setOr(orinteractions);
		return interactions;
	}

	final public UNIinteractions UNIinteractions() throws ParseException {
		UNIinteractions uniinteractions;
		String[] azioni = new String[0];
		jj_consume_token(T_UNI);
		azioni = ActionTypeList();
		uniinteractions = new UNIinteractions();
		uniinteractions.setActions(azioni);
		return uniinteractions;
	}

	final public ANDinteractions ANDinteractions() throws ParseException {
		ANDinteractions andinteractions;
		String[] azioni = new String[0];
		jj_consume_token(T_AND);
		azioni = ActionTypeList();
		andinteractions = new ANDinteractions();
		andinteractions.setActions(azioni);
		return andinteractions;
	}

	final public ORinteractions ORinteractions() throws ParseException {
		ORinteractions orinteractions;
		String[] azioni = new String[0];
		jj_consume_token(T_OR);
		azioni = ActionTypeList();
		orinteractions = new ORinteractions();
		orinteractions.setActions(azioni);
		return orinteractions;
	}

	final public String[] ActionTypeList() throws ParseException {
		Token tAction;
		java.util.List<String> list = new java.util.ArrayList<String>();
		String[] azioniFinali;
		String[] ris;
		tAction = jj_consume_token(T_ID);
		list.add(tAction.image);
		label_13: while (true) {
			if (jj_2_23(2147483647)) {
				;
			} else {
				break label_13;
			}
			jj_consume_token(SEMICOLON);
			azioniFinali = ActionTypeList();
			for (String azione : azioniFinali) {
				list.add(azione);
			}
		}
		ris = new String[list.size()];
		list.toArray(ris);
		return ris;
	}

	final public ArchiTopology ArchiTopology() throws ParseException {
		ArchiTopology ris;
		ArchiElemInstances aeis;
		ArchiInteractions ais;
		ArchiAttachments aas;
		jj_consume_token(T_ARCHI_TOPOLOGY);
		aeis = ArchiElemInstances();
		ais = ArchiInteractions();
		aas = ArchiAttachments();
		ris = new ArchiTopology();
		ris.setAEIs(aeis);
		ris.setArchiInteractions(ais);
		ris.setAttachments(aas);
		return ris;
	}

	final public ArchiElemInstances ArchiElemInstances() throws ParseException {
		AEIdecl[] aEIdeclSeq;
		ArchiElemInstances ris;
		jj_consume_token(T_ARCHI_ELEM_INSTANCES);
		aEIdeclSeq = AEIdeclList();
		ris = new ArchiElemInstances();
		ris.setAEIdeclSeq(aEIdeclSeq);
		return ris;
	}

	final public AEIdecl[] AEIdeclList() throws ParseException {
		AEIdecl aeid;
		java.util.List<AEIdecl> list = new java.util.ArrayList<AEIdecl>();
		AEIdecl[] ris;
		aeid = AEIdecl();
		list.add(aeid);
		label_14: while (true) {
			if (jj_2_24(2147483647)) {
				;
			} else {
				break label_14;
			}
			jj_consume_token(SEMICOLON);
			aeid = AEIdecl();
			list.add(aeid);
		}
		ris = new AEIdecl[list.size()];
		list.toArray(ris);
		return ris;
	}

	final public AEIdecl AEIdecl() throws ParseException {
		AEIdecl ris;
		Token indice1;
		Expression e1;
		Expression e2;
		AEIdecl iaeid;
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_ID:
			ris = SimpleAEIdecl();
			break;
		case T_FOR_ALL:
			jj_consume_token(T_FOR_ALL);
			indice1 = jj_consume_token(T_ID);
			jj_consume_token(T_IN);
			e1 = E();
			jj_consume_token(DOTDOT);
			e2 = E();
			iaeid = IterativeAEIdecl();
			ris = new AEIdeclInd();
			((AEIdeclInd) ris).setIndex(indice1.image);
			((AEIdeclInd) ris).setBeginningExpr(e1);
			((AEIdeclInd) ris).setEndingExpr(e2);
			((AEIdeclInd) ris).setAeIident(iaeid.getAeIident());
			((AEIdeclInd) ris).setAET(iaeid.getAET());
			((AEIdeclInd) ris).setActualParams(iaeid.getActualParams());
			break;
		default:
			jj_la1[23] = jj_gen;
			jj_consume_token(-1);
			throw new ParseException();
		}
		return ris;
	}

	final public AEIdecl SimpleAEIdecl() throws ParseException {
		AEIdecl ris;
		AEIident aeiIdent;
		Token t2;
		Expression[] parsAct = new Expression[0];
		aeiIdent = AEIident();
		jj_consume_token(COLON);
		t2 = jj_consume_token(T_ID);
		jj_consume_token(LPAREN);
		if (jj_2_25(1)) {
			parsAct = AEIparList();
		} else {
			;
		}
		jj_consume_token(RPAREN);
		ris = new AEIdecl();
		ris.setAeIident(aeiIdent);
		ris.setAET(t2.image);
		ris.setActualParams(parsAct);
		return ris;
	}

	final public AEIdecl IterativeAEIdecl() throws ParseException {
		AEIdecl ris;
		AEIident aeiIdent;
		Token t2;
		Expression[] parsAct = new Expression[0];
		aeiIdent = AEIident();
		jj_consume_token(COLON);
		t2 = jj_consume_token(T_ID);
		jj_consume_token(LPAREN);
		if (jj_2_26(1)) {
			parsAct = AEIparList();
		} else {
			;
		}
		jj_consume_token(RPAREN);
		ris = new AEIdecl();
		ris.setAeIident(aeiIdent);
		ris.setAET(t2.image);
		ris.setActualParams(parsAct);
		return ris;
	}

	final public AEIident AEIident() throws ParseException {
		AEIident ris;
		Expression e = null;
		Token name;
		name = jj_consume_token(T_ID);
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case LBRACKET:
			jj_consume_token(LBRACKET);
			e = E();
			jj_consume_token(RBRACKET);
			break;
		default:
			jj_la1[24] = jj_gen;
			;
		}
		ris = new AEIident(name.image, e);
		return ris;
	}

	final public Expression[] AEIparList() throws ParseException {
		Expression[] ris;
		java.util.List<Expression> list = new java.util.ArrayList<Expression>();
		Expression e;
		e = E();
		list.add(e);
		label_15: while (true) {
			if (jj_2_27(2147483647)) {
				;
			} else {
				break label_15;
			}
			jj_consume_token(COMMA);
			e = E();
			list.add(e);
		}
		ris = new Expression[list.size()];
		list.toArray(ris);
		return ris;
	}

	final public ArchiInteractions ArchiInteractions() throws ParseException {
		ArchiInteractions ris;
		InteractionDecl[] interactions;
		jj_consume_token(T_ARCHI_INTERACTIONS);
		interactions = ArchInteractionList();
		ris = new ArchiInteractions();
		ris.setInteractions(interactions);
		return ris;
	}

	final public InteractionDecl[] ArchInteractionList() throws ParseException {
		InteractionDecl[] ris;
		InteractionDecl interactionDecl;
		java.util.List<InteractionDecl> list = new java.util.ArrayList<InteractionDecl>();
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_VOID:
			jj_consume_token(T_VOID);
			return null;
		case T_FOR_ALL:
		case T_ID:
			interactionDecl = ArchInteraction();
			list.add(interactionDecl);
			label_16: while (true) {
				switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
				case SEMICOLON:
					;
					break;
				default:
					jj_la1[25] = jj_gen;
					break label_16;
				}
				jj_consume_token(SEMICOLON);
				interactionDecl = ArchInteraction();
				list.add(interactionDecl);
			}
			ris = new InteractionDecl[list.size()];
			list.toArray(ris);
			return ris;
		default:
			jj_la1[26] = jj_gen;
			jj_consume_token(-1);
			throw new ParseException();
		}
	}

	final public InteractionDecl ArchInteraction() throws ParseException {
		InteractionDecl ris;
		Token index;
		Expression beginningExpr;
		Expression endingExpr;
		InteractionDecl id;
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_ID:
			ris = SimpleArchiInteraction();
			return ris;
		case T_FOR_ALL:
			jj_consume_token(T_FOR_ALL);
			index = jj_consume_token(T_ID);
			jj_consume_token(T_IN);
			beginningExpr = E();
			jj_consume_token(DOTDOT);
			endingExpr = E();
			id = IterativeArchiInteraction();
			ris = new InteractionDeclInd();
			((InteractionDeclInd) ris).setIndex(index.image);
			((InteractionDeclInd) ris).setExprInizio(beginningExpr);
			((InteractionDeclInd) ris).setExprFine(endingExpr);
			((InteractionDeclInd) ris).setAei(id.getAei());
			((InteractionDeclInd) ris).setInteraction(id.getInteraction());
			return ris;
		default:
			jj_la1[27] = jj_gen;
			jj_consume_token(-1);
			throw new ParseException();
		}
	}

	final public InteractionDecl SimpleArchiInteraction() throws ParseException {
		InteractionDecl ris;
		AEIident aeiIdent;
		Token interaction;
		aeiIdent = AEIident();
		jj_consume_token(DOT);
		interaction = jj_consume_token(T_ID);
		ris = new InteractionDecl();
		ris.setAei(aeiIdent);
		ris.setInteraction(interaction.image);
		return ris;
	}

	final public InteractionDecl IterativeArchiInteraction() throws ParseException {
		InteractionDecl ris;
		AEIident aeiIdent;
		Token interaction;
		aeiIdent = AEIident();
		jj_consume_token(DOT);
		interaction = jj_consume_token(T_ID);
		ris = new InteractionDecl();
		ris.setAei(aeiIdent);
		ris.setInteraction(interaction.image);
		return ris;
	}

	final public ArchiAttachments ArchiAttachments() throws ParseException {
		ArchiAttachments ris;
		AttacDecl[] attachments;
		jj_consume_token(T_ARCHI_ATTACHMENTS);
		attachments = AttachmentList();
		ris = new ArchiAttachments();
		ris.setAttachments(attachments);
		return ris;
	}

	final public AttacDecl[] AttachmentList() throws ParseException {
		AttacDecl[] ris;
		java.util.List<AttacDecl> list = new java.util.ArrayList<AttacDecl>();
		AttacDecl attacDecl;
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_VOID:
			jj_consume_token(T_VOID);
			return null;
		case T_FROM:
		case T_FOR_ALL:
			attacDecl = Attachment();
			list.add(attacDecl);
			label_17: while (true) {
				switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
				case SEMICOLON:
					;
					break;
				default:
					jj_la1[28] = jj_gen;
					break label_17;
				}
				jj_consume_token(SEMICOLON);
				attacDecl = Attachment();
				list.add(attacDecl);
			}
			ris = new AttacDecl[list.size()];
			list.toArray(ris);
			return ris;
		default:
			jj_la1[29] = jj_gen;
			jj_consume_token(-1);
			throw new ParseException();
		}
	}

	final public AttacDecl Attachment() throws ParseException {
		AttacDecl ris;
		Token index1;
		Expression beginningExpr1;
		Expression endingExpr1;
		Token index2 = null;
		Expression beginningExpr2 = null;
		Expression endingExpr2 = null;
		AttacDecl ad;
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_FROM:
			ris = SimpleAttachment();
			return ris;
		case T_FOR_ALL:
			jj_consume_token(T_FOR_ALL);
			index1 = jj_consume_token(T_ID);
			jj_consume_token(T_IN);
			beginningExpr1 = E();
			jj_consume_token(DOTDOT);
			endingExpr1 = E();
			switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
			case T_AND:
				jj_consume_token(T_AND);
				jj_consume_token(T_FOR_ALL);
				index2 = jj_consume_token(T_ID);
				jj_consume_token(T_IN);
				beginningExpr2 = E();
				jj_consume_token(DOTDOT);
				endingExpr2 = E();
				break;
			default:
				jj_la1[30] = jj_gen;
				;
			}
			ad = SimpleAttachment();
			ris = new AttacDeclInd();
			((AttacDeclInd) ris).setIndex1(index1.image);
			((AttacDeclInd) ris).setBeginningExpr1(beginningExpr1);
			((AttacDeclInd) ris).setEndingExpr1(endingExpr1);
			if (index2 != null)
				((AttacDeclInd) ris).setIndex2(index2.image);
			((AttacDeclInd) ris).setBeginningExpr2(beginningExpr2);
			((AttacDeclInd) ris).setEndingExpr2(endingExpr2);
			((AttacDeclInd) ris).setOutputAei(ad.getOutputAei());
			((AttacDeclInd) ris).setInputInteraction(ad.getInputInteraction());
			((AttacDeclInd) ris).setInputAei(ad.getInputAei());
			((AttacDeclInd) ris).setOutputInteraction(ad.getOutputInteraction());
			return ris;
		default:
			jj_la1[31] = jj_gen;
			jj_consume_token(-1);
			throw new ParseException();
		}
	}

	final public AttacDecl SimpleAttachment() throws ParseException {
		AttacDecl ris;
		AEIident aeiIdentOutput;
		Token outputInteraction;
		AEIident aeiIdentInput;
		Token inputInteraction;
		jj_consume_token(T_FROM);
		aeiIdentOutput = AEIident();
		jj_consume_token(DOT);
		outputInteraction = jj_consume_token(T_ID);
		jj_consume_token(T_TO);
		aeiIdentInput = AEIident();
		jj_consume_token(DOT);
		inputInteraction = jj_consume_token(T_ID);
		ris = new AttacDecl();
		ris.setOutputAei(aeiIdentOutput);
		ris.setOutputInteraction(outputInteraction.image);
		ris.setInputAei(aeiIdentInput);
		ris.setInputInteraction(inputInteraction.image);
		return ris;
	}

	final public BehavVariations BehaveVariations() throws ParseException {
		BehavVariations ris;
		BehavHidings behavHidings = null;
		BehavRestrictions behavRestrictions = null;
		BehavRenamings behavRenamings = null;
		jj_consume_token(T_BEHAV_VARIATIONS);
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_BEHAV_HIDINGS:
			behavHidings = BehaveHidings();
			break;
		default:
			jj_la1[32] = jj_gen;
			;
		}
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_BEHAV_RESTRICTIONS:
			behavRestrictions = BehaveRestrictions();
			break;
		default:
			jj_la1[33] = jj_gen;
			;
		}
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_BEHAV_RENAMINGS:
			behavRenamings = BehaveRenamings();
			break;
		default:
			jj_la1[34] = jj_gen;
			;
		}
		ris = new BehavVariations();
		ris.setBehavHidings(behavHidings);
		ris.setBehavRestrictions(behavRestrictions);
		ris.setBehavRenamings(behavRenamings);
		return ris;
	}

	final public BehavHidings BehaveHidings() throws ParseException {
		BehavHidings ris;
		BehavHidingDecl[] behavHidingDecls;
		jj_consume_token(T_BEHAV_HIDINGS);
		behavHidingDecls = BehaveHidingList();
		ris = new BehavHidings();
		ris.setBehavHidingDecls(behavHidingDecls);
		return ris;
	}

	final public BehavHidingDecl[] BehaveHidingList() throws ParseException {
		BehavHidingDecl[] ris;
		BehavHidingDecl behavHidingDecl;
		java.util.List<BehavHidingDecl> list = new java.util.ArrayList<BehavHidingDecl>();
		behavHidingDecl = Hiding();
		list.add(behavHidingDecl);
		label_18: while (true) {
			switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
			case SEMICOLON:
				;
				break;
			default:
				jj_la1[35] = jj_gen;
				break label_18;
			}
			jj_consume_token(SEMICOLON);
			behavHidingDecl = Hiding();
			list.add(behavHidingDecl);
		}
		ris = new BehavHidingDecl[list.size()];
		list.toArray(ris);
		return ris;
	}

	final public BehavHidingDecl Hiding() throws ParseException {
		BehavHidingDecl ris;
		Token index;
		Expression beginningExpr;
		Expression endingExpr;
		Hide hide;
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_HIDE:
			ris = SimpleHiding();
			return ris;
		case T_FOR_ALL:
			jj_consume_token(T_FOR_ALL);
			index = jj_consume_token(T_ID);
			jj_consume_token(T_IN);
			beginningExpr = E();
			jj_consume_token(DOTDOT);
			endingExpr = E();
			hide = IterativeHiding();
			ris = new HideInd();
			((HideInd) ris).setIndex(index.image);
			((HideInd) ris).setBeginningExpr(beginningExpr);
			((HideInd) ris).setEndingExpr(endingExpr);
			((HideInd) ris).setAei(hide.getAei());
			((HideInd) ris).setActionTypeSetH(hide.getActionTypeSetH());
			return ris;
		default:
			jj_la1[36] = jj_gen;
			jj_consume_token(-1);
			throw new ParseException();
		}
	}

	final public BehavHidingDecl SimpleHiding() throws ParseException {
		BehavHidingDecl ris;
		AEIident aeIident;
		ActionTypeSetH actionTypeSetH;
		if (jj_2_28(2147483647)) {
			jj_consume_token(T_HIDE);
			aeIident = AEIident();
			jj_consume_token(DOT);
			actionTypeSetH = ActionTypeSetHidden();
			ris = new Hide();
			((Hide) ris).setAei(aeIident);
			((Hide) ris).setActionTypeSetH(actionTypeSetH);
			return ris;
		} else if (jj_2_29(2147483647)) {
			jj_consume_token(T_HIDE);
			jj_consume_token(T_INTERNALS);
			ris = new HideInternals();
			return ris;
		} else if (jj_2_30(2147483647)) {
			jj_consume_token(T_HIDE);
			jj_consume_token(T_INTERACTIONS);
			ris = new HideInteractions();
			return ris;
		} else if (jj_2_31(2147483647)) {
			jj_consume_token(T_HIDE);
			jj_consume_token(T_ALL);
			ris = new HideAll();
			return ris;
		} else {
			jj_consume_token(-1);
			throw new ParseException();
		}
	}

	final public Hide IterativeHiding() throws ParseException {
		Hide ris;
		AEIident aeIident;
		ActionTypeSetH actionTypeSetH;
		jj_consume_token(T_HIDE);
		aeIident = AEIident();
		jj_consume_token(DOT);
		actionTypeSetH = ActionTypeSetHidden();
		ris = new Hide();
		ris.setAei(aeIident);
		ris.setActionTypeSetH(actionTypeSetH);
		return ris;
	}

	final public ActionTypeSetH ActionTypeSetHidden() throws ParseException {
		ActionTypeSetH ris;
		Token actionType;
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_ID:
			actionType = jj_consume_token(T_ID);
			ris = new ActionTypeH();
			((ActionTypeH) ris).setActionType(actionType.image);
			return ris;
		case T_INTERNALS:
			jj_consume_token(T_INTERNALS);
			ris = new HInternals();
			return ris;
		case T_INTERACTIONS:
			jj_consume_token(T_INTERACTIONS);
			ris = new HInteractions();
			return ris;
		case T_ALL:
			jj_consume_token(T_ALL);
			ris = new HAll();
			return ris;
		default:
			jj_la1[37] = jj_gen;
			jj_consume_token(-1);
			throw new ParseException();
		}
	}

	final public BehavRestrictions BehaveRestrictions() throws ParseException {
		BehavRestrictions ris;
		BehavRestrictionDecl[] behavRestrictionDecls;
		jj_consume_token(T_BEHAV_RESTRICTIONS);
		behavRestrictionDecls = RestrictionList();
		ris = new BehavRestrictions();
		ris.setBehavRestrictionDecls(behavRestrictionDecls);
		return ris;
	}

	final public BehavRestrictionDecl[] RestrictionList() throws ParseException {
		BehavRestrictionDecl[] ris;
		BehavRestrictionDecl behavRestrictionDecl;
		java.util.List<BehavRestrictionDecl> list = new java.util.ArrayList<BehavRestrictionDecl>();
		behavRestrictionDecl = Restriction();
		list.add(behavRestrictionDecl);
		label_19: while (true) {
			switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
			case SEMICOLON:
				;
				break;
			default:
				jj_la1[38] = jj_gen;
				break label_19;
			}
			jj_consume_token(SEMICOLON);
			Restriction();
			list.add(behavRestrictionDecl);
		}
		ris = new BehavRestrictionDecl[list.size()];
		list.toArray(ris);
		return ris;
	}

	final public BehavRestrictionDecl Restriction() throws ParseException {
		BehavRestrictionDecl ris;
		Token index;
		Expression beginningExpr;
		Expression endingExpr;
		Restrict restrict;
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_RESTRICT:
			ris = SimpleRestriction();
			return ris;
		case T_FOR_ALL:
			jj_consume_token(T_FOR_ALL);
			index = jj_consume_token(T_ID);
			jj_consume_token(T_IN);
			beginningExpr = E();
			jj_consume_token(DOTDOT);
			endingExpr = E();
			restrict = IterativeRestriction();
			ris = new RestrictInd();
			((RestrictInd) ris).setIndex(index.image);
			((RestrictInd) ris).setBeginningExpr(beginningExpr);
			((RestrictInd) ris).setEndingExpr(endingExpr);
			((RestrictInd) ris).setAei(restrict.getAei());
			((RestrictInd) ris).setActionTypeSetR(restrict.getActionTypeSetR());
			return ris;
		default:
			jj_la1[39] = jj_gen;
			jj_consume_token(-1);
			throw new ParseException();
		}
	}

	final public BehavRestrictionDecl SimpleRestriction() throws ParseException {
		BehavRestrictionDecl ris;
		AEIident aeiIdent;
		Token aei;
		Expression selector;
		ActionTypeSetR actionTypeSetR;
		if (jj_2_32(2147483647)) {
			jj_consume_token(T_RESTRICT);
			aeiIdent = AEIident();
			jj_consume_token(DOT);
			actionTypeSetR = ActionTypeSetRestricted();
			ris = new Restrict();
			((Restrict) ris).setActionTypeSetR(actionTypeSetR);
			((Restrict) ris).setAei(aeiIdent);
			return ris;
		} else if (jj_2_33(2147483647)) {
			jj_consume_token(T_RESTRICT);
			jj_consume_token(T_OBS_INTERNALS);
			ris = new RestrictInternals();
			return ris;
		} else if (jj_2_34(2147483647)) {
			jj_consume_token(T_RESTRICT);
			jj_consume_token(T_OBS_INTERACTIONS);
			ris = new RestrictInteractions();
			return ris;
		} else if (jj_2_35(2147483647)) {
			jj_consume_token(T_RESTRICT);
			jj_consume_token(T_ALL_OBSERVABLES);
			ris = new RestrictAll();
			return ris;
		} else {
			jj_consume_token(-1);
			throw new ParseException();
		}
	}

	final public Restrict IterativeRestriction() throws ParseException {
		Restrict ris;
		AEIident aeiIdent;
		Token aei;
		Expression selector;
		ActionTypeSetR actionTypeSetR;
		jj_consume_token(T_RESTRICT);
		aeiIdent = AEIident();
		jj_consume_token(DOT);
		actionTypeSetR = ActionTypeSetRestricted();
		ris = new Restrict();
		ris.setAei(aeiIdent);
		ris.setActionTypeSetR(actionTypeSetR);
		return ris;
	}

	final public ActionTypeSetR ActionTypeSetRestricted() throws ParseException {
		ActionTypeSetR ris;
		Token actionType;
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_ID:
			actionType = jj_consume_token(T_ID);
			ris = new ActionTypeR();
			((ActionTypeR) ris).setActionType(actionType.image);
			return ris;
		case T_OBS_INTERNALS:
			jj_consume_token(T_OBS_INTERNALS);
			ris = new RInternals();
			return ris;
		case T_OBS_INTERACTIONS:
			jj_consume_token(T_OBS_INTERACTIONS);
			ris = new RInteractions();
			return ris;
		case T_ALL_OBSERVABLES:
			jj_consume_token(T_ALL_OBSERVABLES);
			ris = new RAll();
			return ris;
		default:
			jj_la1[40] = jj_gen;
			jj_consume_token(-1);
			throw new ParseException();
		}
	}

	final public BehavRenamings BehaveRenamings() throws ParseException {
		BehavRenamings ris;
		BehavRenamingDecl[] behavRenamingDecls;
		jj_consume_token(T_BEHAV_RENAMINGS);
		behavRenamingDecls = RenamingList();
		ris = new BehavRenamings();
		ris.setBehavRenamingDecls(behavRenamingDecls);
		return ris;
	}

	final public BehavRenamingDecl[] RenamingList() throws ParseException {
		BehavRenamingDecl[] ris;
		java.util.List<BehavRenamingDecl> list = new java.util.ArrayList<BehavRenamingDecl>();
		BehavRenamingDecl behavRenamingDecl;
		behavRenamingDecl = Renaming();
		list.add(behavRenamingDecl);
		label_20: while (true) {
			switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
			case SEMICOLON:
				;
				break;
			default:
				jj_la1[41] = jj_gen;
				break label_20;
			}
			jj_consume_token(SEMICOLON);
			behavRenamingDecl = Renaming();
			list.add(behavRenamingDecl);
		}
		ris = new BehavRenamingDecl[list.size()];
		list.toArray(ris);
		return ris;
	}

	final public BehavRenamingDecl Renaming() throws ParseException {
		BehavRenamingDecl ris;
		Token index;
		Expression beginningExpr;
		Expression endingExpr;
		BehavRenamingDecl brd;
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_RENAME:
			ris = SimpleRenaming();
			return ris;
		case T_FOR_ALL:
			jj_consume_token(T_FOR_ALL);
			index = jj_consume_token(T_ID);
			jj_consume_token(T_IN);
			beginningExpr = E();
			jj_consume_token(DOTDOT);
			endingExpr = E();
			brd = IterativeRenaming();
			ris = new BehavRenamingDeclInd();
			((BehavRenamingDeclInd) ris).setBeginningExpr(beginningExpr);
			((BehavRenamingDeclInd) ris).setEndingExpr(endingExpr);
			((BehavRenamingDeclInd) ris).setIndex(index.image);
			((BehavRenamingDeclInd) ris).setAei(brd.getAei());
			((BehavRenamingDeclInd) ris).setOriginalActionType(brd.getOriginalActionType());
			((BehavRenamingDeclInd) ris).setOriginalSelector(brd.getOriginalSelector());
			((BehavRenamingDeclInd) ris).setRenamingActionType(brd.getRenamingActionType());
			((BehavRenamingDeclInd) ris).setRenamingSelector(brd.getRenamingSelector());
			return ris;
		default:
			jj_la1[42] = jj_gen;
			jj_consume_token(-1);
			throw new ParseException();
		}
	}

	final public BehavRenamingDecl SimpleRenaming() throws ParseException {
		BehavRenamingDecl ris;
		Token aei;
		Expression originalSelector;
		Token originalActionType;
		Token renamingActionType;
		Expression renamingSelector;
		jj_consume_token(T_RENAME);
		aei = jj_consume_token(T_ID);
		originalSelector = AEIindex();
		jj_consume_token(DOT);
		originalActionType = jj_consume_token(T_ID);
		jj_consume_token(T_AS);
		renamingActionType = jj_consume_token(T_ID);
		renamingSelector = AEIindex();
		ris = new BehavRenamingDecl();
		ris.setAei(aei.image);
		ris.setOriginalActionType(originalActionType.image);
		ris.setOriginalSelector(originalSelector);
		ris.setRenamingActionType(renamingActionType.image);
		ris.setRenamingSelector(renamingSelector);
		return ris;
	}

	final public BehavRenamingDecl IterativeRenaming() throws ParseException {
		BehavRenamingDecl ris;
		Token aei;
		Expression originalSelector;
		Token originalActionType;
		Token renamingActionType;
		Expression renamingSelector;
		jj_consume_token(T_RENAME);
		aei = jj_consume_token(T_ID);
		originalSelector = AEIindex();
		jj_consume_token(DOT);
		originalActionType = jj_consume_token(T_ID);
		jj_consume_token(T_AS);
		renamingActionType = jj_consume_token(T_ID);
		renamingSelector = AEIindex();
		ris = new BehavRenamingDecl();
		ris.setAei(aei.image);
		ris.setOriginalActionType(originalActionType.image);
		ris.setOriginalSelector(originalSelector);
		ris.setRenamingActionType(renamingActionType.image);
		ris.setRenamingSelector(renamingSelector);
		return ris;
	}

	final public Expression AEIindex() throws ParseException {
		Expression ris;
		jj_consume_token(LBRACKET);
		ris = E();
		jj_consume_token(RBRACKET);
		return ris;
	}

	/*
	 * Expression syntax follows.
	 */
	final public IdentExpr IdentExpr() throws ParseException {
		IdentExpr ris;
		Token t;
		t = jj_consume_token(T_ID);
		ris = new IdentExpr(t.image);
		return ris;
	}

	final public Expression Erecord() throws ParseException {
		Expression ris;
		java.util.List<Expression> list = new java.util.ArrayList<Expression>();
		Expression expression;
		IdentExpr identExpr;
		Token t1;
		Token t2;
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_RECORD_CONS:
			jj_consume_token(T_RECORD_CONS);
			jj_consume_token(LPAREN);
			expression = E();
			list.add(expression);
			label_21: while (true) {
				switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
				case COMMA:
					;
					break;
				default:
					jj_la1[43] = jj_gen;
					break label_21;
				}
				jj_consume_token(COMMA);
				expression = E();
				list.add(expression);
			}
			jj_consume_token(RPAREN);
			Expression[] expressions = new Expression[list.size()];
			for (int i = 0; i < list.size(); i++) {
				Expression exp1 = list.get(i);
				expressions[i] = exp1;
			}
			RecordCons recordCons = new RecordCons(expressions);
			ris = recordCons;
			return ris;
		case T_PUT:
			jj_consume_token(T_PUT);
			jj_consume_token(LPAREN);
			t1 = jj_consume_token(T_ID);
			jj_consume_token(COMMA);
			expression = E();
			jj_consume_token(COMMA);
			identExpr = IdentExpr();
			jj_consume_token(RPAREN);
			Put put = new Put(t1.image, expression, identExpr);
			ris = put;
			return ris;
		default:
			jj_la1[44] = jj_gen;
			jj_consume_token(-1);
			throw new ParseException();
		}
	}

	final public Expression Earr() throws ParseException {
		java.util.List<Expression> list = new java.util.ArrayList<Expression>();
		Expression expression;
		Expression expression2;
		IdentExpr identExpr;
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_ARRAY_CONS:
			jj_consume_token(T_ARRAY_CONS);
			jj_consume_token(LPAREN);
			expression = E();
			list.add(expression);
			label_22: while (true) {
				switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
				case COMMA:
					;
					break;
				default:
					jj_la1[45] = jj_gen;
					break label_22;
				}
				jj_consume_token(COMMA);
				expression = E();
				list.add(expression);
			}
			jj_consume_token(RPAREN);
			Expression[] expressions = new Expression[list.size()];
			for (int i = 0; i < list.size(); i++) {
				Expression exp1 = list.get(i);
				expressions[i] = exp1;
			}
			ArrayCons arrayCons = new ArrayCons(expressions);
			return arrayCons;
		case T_WRITE:
			jj_consume_token(T_WRITE);
			jj_consume_token(LPAREN);
			expression = E();
			jj_consume_token(COMMA);
			expression2 = E();
			jj_consume_token(COMMA);
			identExpr = IdentExpr();
			jj_consume_token(RPAREN);
			Write write = new Write(expression, expression2, identExpr);
			return write;
		default:
			jj_la1[46] = jj_gen;
			jj_consume_token(-1);
			throw new ParseException();
		}
	}

	final public Expression El() throws ParseException {
		Expression expression;
		java.util.List<Expression> list = new java.util.ArrayList<Expression>();
		Token t1;
		IdentExpr identExpr;
		Token t2;
		IdentExpr identExpr2;
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_LIST_CONS:
			jj_consume_token(T_LIST_CONS);
			jj_consume_token(LPAREN);
			if (jj_2_36(1)) {
				expression = E();
				list.add(expression);
				label_23: while (true) {
					switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
					case COMMA:
						;
						break;
					default:
						jj_la1[47] = jj_gen;
						break label_23;
					}
					jj_consume_token(COMMA);
					expression = E();
					list.add(expression);
				}
			} else {
				;
			}
			jj_consume_token(RPAREN);
			Expression[] expressions = new Expression[list.size()];
			for (int i = 0; i < list.size(); i++) {
				Expression exp1 = list.get(i);
				expressions[i] = exp1;
			}
			ListCons listCons = new ListCons(expressions);
			return listCons;
		case T_TAIL:
			jj_consume_token(T_TAIL);
			jj_consume_token(LPAREN);
			identExpr = IdentExpr();
			jj_consume_token(RPAREN);
			Tail tail = new Tail(identExpr);
			return tail;
		case T_CONCAT:
			jj_consume_token(T_CONCAT);
			jj_consume_token(LPAREN);
			identExpr = IdentExpr();
			jj_consume_token(COMMA);
			identExpr2 = IdentExpr();
			jj_consume_token(RPAREN);
			Concat concat = new Concat(identExpr, identExpr2);
			return concat;
		case T_INSERT:
			jj_consume_token(T_INSERT);
			jj_consume_token(LPAREN);
			expression = E();
			jj_consume_token(COMMA);
			identExpr = IdentExpr();
			jj_consume_token(RPAREN);
			Insert insert = new Insert(expression, identExpr);
			return insert;
		case T_REMOVE:
			jj_consume_token(T_REMOVE);
			jj_consume_token(LPAREN);
			expression = E();
			jj_consume_token(COMMA);
			identExpr = IdentExpr();
			jj_consume_token(RPAREN);
			Remove remove = new Remove(expression, identExpr);
			return remove;
		default:
			jj_la1[48] = jj_gen;
			jj_consume_token(-1);
			throw new ParseException();
		}
	}

	final public Expression Eatf() throws ParseException {
		Expression ris;
		Token t1;
		IdentExpr identExpr;
		if (jj_2_37(2147483647)) {
			jj_consume_token(LPAREN);
			ris = E();
			jj_consume_token(RPAREN);
			return ris;
		} else {
			switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
			case T_ID:
				ris = IdentExpr();
				return ris;
			case T_NUMBER:
				t1 = jj_consume_token(T_NUMBER);
				try {
					java.lang.Long number = java.lang.Long.parseLong(t1.image);
					specificheAEmilia.Integer integer = new specificheAEmilia.Integer(number.intValue());
					return integer;
				} catch (NumberFormatException e1) {
					try {
						java.lang.Double double1 = java.lang.Double.parseDouble(t1.image);
						Real real = new Real(double1);
						return real;
					} catch (NumberFormatException e2) {
						return null;
					}
				}
			default:
				jj_la1[49] = jj_gen;
				if (jj_2_38(2147483647)) {
					jj_consume_token(T_LENGTH);
					jj_consume_token(LPAREN);
					identExpr = IdentExpr();
					jj_consume_token(RPAREN);
					Length length = new Length(identExpr);
					return length;
				} else {
					jj_consume_token(-1);
					throw new ParseException();
				}
			}
		}
	}

	final public Expression Eat() throws ParseException {
		Expression e1;
		Expression e2;
		java.util.List<Expression> list = new java.util.ArrayList<Expression>();
		e1 = Eatf();
		list.add(e1);
		label_24: while (true) {
			switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
			case MULTIPLICATION:
			case DIVISION:
				;
				break;
			default:
				jj_la1[50] = jj_gen;
				break label_24;
			}
			if (jj_2_39(2147483647)) {
				jj_consume_token(MULTIPLICATION);
				e2 = Eatf();
				Expression exp1 = list.get(list.size() - 1);
				Moltiplicazione moltiplicazione = new Moltiplicazione(exp1, e2);
				list.add(moltiplicazione);
			} else if (jj_2_40(2147483647)) {
				jj_consume_token(DIVISION);
				e2 = Eatf();
				Expression exp2 = list.get(list.size() - 1);
				Divisione divisione = new Divisione(exp2, e2);
				list.add(divisione);
			} else {
				jj_consume_token(-1);
				throw new ParseException();
			}
		}
		Expression exp3 = list.get(list.size() - 1);
		return exp3;
	}

	final public Expression Ea() throws ParseException {
		Expression e1;
		Expression e2;
		java.util.List<Expression> list = new java.util.ArrayList<Expression>();
		e1 = Eat();
		list.add(e1);
		label_25: while (true) {
			switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
			case ADDITION:
			case SUBTRACTION:
				;
				break;
			default:
				jj_la1[51] = jj_gen;
				break label_25;
			}
			if (jj_2_41(2147483647)) {
				jj_consume_token(ADDITION);
				e2 = Eat();
				Expression exp1 = list.get(list.size() - 1);
				Somma somma = new Somma(exp1, e2);
				list.add(somma);
			} else if (jj_2_42(2147483647)) {
				jj_consume_token(SUBTRACTION);
				e2 = Eat();
				Expression exp2 = list.get(list.size() - 1);
				Sottrazione sottrazione = new Sottrazione(exp2, e2);
				list.add(sottrazione);
			} else {
				jj_consume_token(-1);
				throw new ParseException();
			}
		}
		Expression exp3 = list.get(list.size() - 1);
		return exp3;
	}

	final public Expression Ebt() throws ParseException {
		Expression e1;
		Expression e2;
		Token t1;
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case T_TRUE:
			t1 = jj_consume_token(T_TRUE);
			specificheAEmilia.Boolean b1 = new specificheAEmilia.Boolean(true);
			return b1;
		case T_FALSE:
			t1 = jj_consume_token(T_FALSE);
			specificheAEmilia.Boolean b2 = new specificheAEmilia.Boolean(false);
			return b2;
		default:
			jj_la1[52] = jj_gen;
			if (jj_2_43(2147483647)) {
				e1 = Ea();
				jj_consume_token(LESS);
				e2 = Ea();
				Minore minore = new Minore(e1, e2);
				{
					if (true)
						return minore;
				}
			} else if (jj_2_44(2147483647)) {
				e1 = Ea();
				jj_consume_token(LE);
				e2 = Ea();
				MinoreUguale minoreUguale = new MinoreUguale(e1, e2);
				return minoreUguale;
			} else if (jj_2_45(2147483647)) {
				e1 = Ea();
				jj_consume_token(GREATER);
				e2 = Ea();
				Maggiore maggiore = new Maggiore(e1, e2);
				return maggiore;
			} else if (jj_2_46(2147483647)) {
				e1 = Ea();
				jj_consume_token(GE);
				e2 = Ea();
				MaggioreUguale maggioreUguale = new MaggioreUguale(e1, e2);
				return maggioreUguale;
			} else if (jj_2_47(2147483647)) {
				e1 = Ea();
				jj_consume_token(EQUAL);
				e2 = Ea();
				Equal equal = new Equal(e1, e2);
				return equal;
			} else if (jj_2_48(2147483647)) {
				e1 = Ea();
				jj_consume_token(NE);
				e2 = Ea();
				Different different = new Different(e1, e2);
				return different;
			} else if (jj_2_49(2147483647)) {
				jj_consume_token(LPAREN);
				e1 = Eb();
				jj_consume_token(RPAREN);
				return e1;
			} else if (jj_2_50(2147483647)) {
				jj_consume_token(EXCLAMATION);
				e1 = Ebt();
				return e1;
			} else {
				jj_consume_token(-1);
				throw new ParseException();
			}
		}
		throw new Error("Missing return statement in function");
	}

	final public Expression Eb() throws ParseException {
		Expression e1;
		Expression e2;
		java.util.List<Expression> list = new java.util.ArrayList<Expression>();
		e1 = Ebt();
		list.add(e1);
		label_26: while (true) {
			switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
			case AND:
			case OR:
				;
				break;
			default:
				jj_la1[53] = jj_gen;
				break label_26;
			}
			if (jj_2_51(2147483647)) {
				jj_consume_token(AND);
				e2 = Ebt();
				Expression exp1 = list.get(list.size() - 1);
				And and = new And(exp1, e2);
				list.add(and);
			} else if (jj_2_52(2147483647)) {
				jj_consume_token(OR);
				e2 = Ebt();
				Expression exp2 = list.get(list.size() - 1);
				Or or = new Or(exp2, e2);
				list.add(or);
			} else {
				jj_consume_token(-1);
				throw new ParseException();
			}
		}
		Expression exp3 = list.get(list.size() - 1);
		return exp3;
	}

	final public Expression E() throws ParseException {
		Expression ris;
		Expression expression;
		IdentExpr identExpr;
		Token t1;
		Token t2;
		if (jj_2_53(2147483647) && (getToken(2).kind != LESS && getToken(2).kind != LE && getToken(2).kind != GREATER
				&& getToken(2).kind != GE && getToken(2).kind != EQUAL && getToken(2).kind != NE)) {
			ris = Ea();
			return ris;
		} else if (jj_2_54(2147483647)) {
			ris = Eb();
			return ris;
		} else if (jj_2_55(2147483647)) {
			ris = El();
			return ris;
		} else if (jj_2_56(2147483647)) {
			ris = Earr();
			return ris;
		} else if (jj_2_57(2147483647)) {
			ris = Erecord();
			return ris;
		} else if (jj_2_58(2147483647)) {
			jj_consume_token(T_FIRST);
			jj_consume_token(LPAREN);
			identExpr = IdentExpr();
			jj_consume_token(RPAREN);
			ris = new First(identExpr);
			return ris;
		} else if (jj_2_59(2147483647)) {
			jj_consume_token(T_READ);
			jj_consume_token(LPAREN);
			expression = E();
			jj_consume_token(COMMA);
			identExpr = IdentExpr();
			jj_consume_token(RPAREN);
			ris = new Read(expression, identExpr);
			return ris;
		} else if (jj_2_60(2147483647)) {
			jj_consume_token(T_GET);
			jj_consume_token(LPAREN);
			t1 = jj_consume_token(T_ID);
			jj_consume_token(COMMA);
			identExpr = IdentExpr();
			jj_consume_token(RPAREN);
			ris = new Get(t1.image, identExpr);
			return ris;
		} else {
			jj_consume_token(-1);
			throw new ParseException();
		}
	}

	private boolean jj_2_1(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_1();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(0, xla);
		}
	}

	private boolean jj_2_2(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_2();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(1, xla);
		}
	}

	private boolean jj_2_3(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_3();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(2, xla);
		}
	}

	private boolean jj_2_4(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_4();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(3, xla);
		}
	}

	private boolean jj_2_5(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_5();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(4, xla);
		}
	}

	private boolean jj_2_6(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_6();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(5, xla);
		}
	}

	private boolean jj_2_7(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_7();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(6, xla);
		}
	}

	private boolean jj_2_8(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_8();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(7, xla);
		}
	}

	private boolean jj_2_9(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_9();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(8, xla);
		}
	}

	private boolean jj_2_10(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_10();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(9, xla);
		}
	}

	private boolean jj_2_11(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_11();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(10, xla);
		}
	}

	private boolean jj_2_12(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_12();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(11, xla);
		}
	}

	private boolean jj_2_13(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_13();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(12, xla);
		}
	}

	private boolean jj_2_14(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_14();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(13, xla);
		}
	}

	private boolean jj_2_15(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_15();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(14, xla);
		}
	}

	private boolean jj_2_16(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_16();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(15, xla);
		}
	}

	private boolean jj_2_17(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_17();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(16, xla);
		}
	}

	private boolean jj_2_18(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_18();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(17, xla);
		}
	}

	private boolean jj_2_19(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_19();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(18, xla);
		}
	}

	private boolean jj_2_20(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_20();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(19, xla);
		}
	}

	private boolean jj_2_21(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_21();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(20, xla);
		}
	}

	private boolean jj_2_22(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_22();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(21, xla);
		}
	}

	private boolean jj_2_23(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_23();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(22, xla);
		}
	}

	private boolean jj_2_24(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_24();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(23, xla);
		}
	}

	private boolean jj_2_25(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_25();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(24, xla);
		}
	}

	private boolean jj_2_26(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_26();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(25, xla);
		}
	}

	private boolean jj_2_27(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_27();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(26, xla);
		}
	}

	private boolean jj_2_28(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_28();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(27, xla);
		}
	}

	private boolean jj_2_29(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_29();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(28, xla);
		}
	}

	private boolean jj_2_30(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_30();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(29, xla);
		}
	}

	private boolean jj_2_31(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_31();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(30, xla);
		}
	}

	private boolean jj_2_32(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_32();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(31, xla);
		}
	}

	private boolean jj_2_33(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_33();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(32, xla);
		}
	}

	private boolean jj_2_34(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_34();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(33, xla);
		}
	}

	private boolean jj_2_35(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_35();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(34, xla);
		}
	}

	private boolean jj_2_36(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_36();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(35, xla);
		}
	}

	private boolean jj_2_37(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_37();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(36, xla);
		}
	}

	private boolean jj_2_38(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_38();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(37, xla);
		}
	}

	private boolean jj_2_39(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_39();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(38, xla);
		}
	}

	private boolean jj_2_40(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_40();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(39, xla);
		}
	}

	private boolean jj_2_41(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_41();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(40, xla);
		}
	}

	private boolean jj_2_42(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_42();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(41, xla);
		}
	}

	private boolean jj_2_43(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_43();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(42, xla);
		}
	}

	private boolean jj_2_44(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_44();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(43, xla);
		}
	}

	private boolean jj_2_45(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_45();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(44, xla);
		}
	}

	private boolean jj_2_46(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_46();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(45, xla);
		}
	}

	private boolean jj_2_47(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_47();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(46, xla);
		}
	}

	private boolean jj_2_48(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_48();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(47, xla);
		}
	}

	private boolean jj_2_49(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_49();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(48, xla);
		}
	}

	private boolean jj_2_50(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_50();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(49, xla);
		}
	}

	private boolean jj_2_51(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_51();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(50, xla);
		}
	}

	private boolean jj_2_52(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_52();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(51, xla);
		}
	}

	private boolean jj_2_53(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_53();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(52, xla);
		}
	}

	private boolean jj_2_54(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_54();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(53, xla);
		}
	}

	private boolean jj_2_55(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_55();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(54, xla);
		}
	}

	private boolean jj_2_56(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_56();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(55, xla);
		}
	}

	private boolean jj_2_57(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_57();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(56, xla);
		}
	}

	private boolean jj_2_58(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_58();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(57, xla);
		}
	}

	private boolean jj_2_59(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_59();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(58, xla);
		}
	}

	private boolean jj_2_60(int xla) {
		jj_la = xla;
		jj_lastpos = jj_scanpos = token;
		try {
			return !jj_3_60();
		} catch (LookaheadSuccess ls) {
			return true;
		} finally {
			jj_save(59, xla);
		}
	}

	private boolean jj_3_50() {
		if (jj_scan_token(EXCLAMATION))
			return true;
		if (jj_3R_51())
			return true;
		return false;
	}

	private boolean jj_3R_124() {
		if (jj_scan_token(T_STOP))
			return true;
		return false;
	}

	private boolean jj_3R_64() {
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_124()) {
			jj_scanpos = xsp;
			if (jj_3R_125()) {
				jj_scanpos = xsp;
				if (jj_3R_126()) {
					jj_scanpos = xsp;
					if (jj_3R_127())
						return true;
				}
			}
		}
		return false;
	}

	private boolean jj_3_49() {
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_50())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3R_105() {
		if (jj_scan_token(EXCLAMATION))
			return true;
		if (jj_3R_51())
			return true;
		return false;
	}

	private boolean jj_3_48() {
		if (jj_3R_49())
			return true;
		if (jj_scan_token(NE))
			return true;
		if (jj_3R_49())
			return true;
		return false;
	}

	private boolean jj_3R_104() {
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_50())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3_47() {
		if (jj_3R_49())
			return true;
		if (jj_scan_token(EQUAL))
			return true;
		if (jj_3R_49())
			return true;
		return false;
	}

	private boolean jj_3R_156() {
		if (jj_scan_token(T_WEIGHT))
			return true;
		return false;
	}

	private boolean jj_3R_103() {
		if (jj_3R_49())
			return true;
		if (jj_scan_token(NE))
			return true;
		if (jj_3R_49())
			return true;
		return false;
	}

	private boolean jj_3R_155() {
		if (jj_scan_token(T_RATE))
			return true;
		return false;
	}

	private boolean jj_3_46() {
		if (jj_3R_49())
			return true;
		if (jj_scan_token(GE))
			return true;
		if (jj_3R_49())
			return true;
		return false;
	}

	private boolean jj_3_23() {
		if (jj_scan_token(SEMICOLON))
			return true;
		if (jj_3R_40())
			return true;
		return false;
	}

	private boolean jj_3R_102() {
		if (jj_3R_49())
			return true;
		if (jj_scan_token(EQUAL))
			return true;
		if (jj_3R_49())
			return true;
		return false;
	}

	private boolean jj_3_45() {
		if (jj_3R_49())
			return true;
		if (jj_scan_token(GREATER))
			return true;
		if (jj_3R_49())
			return true;
		return false;
	}

	private boolean jj_3R_154() {
		if (jj_scan_token(T_PRIO))
			return true;
		return false;
	}

	private boolean jj_3R_101() {
		if (jj_3R_49())
			return true;
		if (jj_scan_token(GE))
			return true;
		if (jj_3R_49())
			return true;
		return false;
	}

	private boolean jj_3R_145() {
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_154()) {
			jj_scanpos = xsp;
			if (jj_3R_155()) {
				jj_scanpos = xsp;
				if (jj_3R_156())
					return true;
			}
		}
		return false;
	}

	private boolean jj_3R_77() {
		if (jj_scan_token(SEMICOLON))
			return true;
		if (jj_3R_40())
			return true;
		return false;
	}

	private boolean jj_3_44() {
		if (jj_3R_49())
			return true;
		if (jj_scan_token(LE))
			return true;
		if (jj_3R_49())
			return true;
		return false;
	}

	private boolean jj_3R_100() {
		if (jj_3R_49())
			return true;
		if (jj_scan_token(GREATER))
			return true;
		if (jj_3R_49())
			return true;
		return false;
	}

	private boolean jj_3R_40() {
		if (jj_scan_token(T_ID))
			return true;
		Token xsp;
		while (true) {
			xsp = jj_scanpos;
			if (jj_3R_77()) {
				jj_scanpos = xsp;
				break;
			}
		}
		return false;
	}

	private boolean jj_3_43() {
		if (jj_3R_49())
			return true;
		if (jj_scan_token(LESS))
			return true;
		if (jj_3R_49())
			return true;
		return false;
	}

	private boolean jj_3R_99() {
		if (jj_3R_49())
			return true;
		if (jj_scan_token(LE))
			return true;
		if (jj_3R_49())
			return true;
		return false;
	}

	private boolean jj_3R_161() {
		if (jj_3R_65())
			return true;
		if (jj_scan_token(T_ID))
			return true;
		return false;
	}

	private boolean jj_3R_98() {
		if (jj_3R_49())
			return true;
		if (jj_scan_token(LESS))
			return true;
		if (jj_3R_49())
			return true;
		return false;
	}

	private boolean jj_3R_162() {
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_161())
			return true;
		return false;
	}

	private boolean jj_3R_37() {
		if (jj_scan_token(T_OR))
			return true;
		if (jj_3R_40())
			return true;
		return false;
	}

	private boolean jj_3R_97() {
		if (jj_scan_token(T_FALSE))
			return true;
		return false;
	}

	private boolean jj_3R_88() {
		if (jj_scan_token(T_ALL_OBSERVABLES))
			return true;
		return false;
	}

	private boolean jj_3R_51() {
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_96()) {
			jj_scanpos = xsp;
			if (jj_3R_97()) {
				jj_scanpos = xsp;
				if (jj_3R_98()) {
					jj_scanpos = xsp;
					if (jj_3R_99()) {
						jj_scanpos = xsp;
						if (jj_3R_100()) {
							jj_scanpos = xsp;
							if (jj_3R_101()) {
								jj_scanpos = xsp;
								if (jj_3R_102()) {
									jj_scanpos = xsp;
									if (jj_3R_103()) {
										jj_scanpos = xsp;
										if (jj_3R_104()) {
											jj_scanpos = xsp;
											if (jj_3R_105())
												return true;
										}
									}
								}
							}
						}
					}
				}
			}
		}
		return false;
	}

	private boolean jj_3R_96() {
		if (jj_scan_token(T_TRUE))
			return true;
		return false;
	}

	private boolean jj_3R_29() {
		if (jj_scan_token(T_CONST))
			return true;
		if (jj_3R_59())
			return true;
		if (jj_scan_token(T_ID))
			return true;
		return false;
	}

	private boolean jj_3R_87() {
		if (jj_scan_token(T_OBS_INTERACTIONS))
			return true;
		return false;
	}

	private boolean jj_3R_152() {
		if (jj_3R_161())
			return true;
		Token xsp;
		while (true) {
			xsp = jj_scanpos;
			if (jj_3R_162()) {
				jj_scanpos = xsp;
				break;
			}
		}
		return false;
	}

	private boolean jj_3R_39() {
		if (jj_scan_token(T_AND))
			return true;
		if (jj_3R_40())
			return true;
		return false;
	}

	private boolean jj_3R_86() {
		if (jj_scan_token(T_OBS_INTERNALS))
			return true;
		return false;
	}

	private boolean jj_3_42() {
		if (jj_scan_token(SUBTRACTION))
			return true;
		if (jj_3R_48())
			return true;
		return false;
	}

	private boolean jj_3_3() {
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_28())
			return true;
		return false;
	}

	private boolean jj_3R_134() {
		if (jj_scan_token(T_RECORD))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_152())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3_4() {
		if (jj_3R_29())
			return true;
		return false;
	}

	private boolean jj_3_41() {
		if (jj_scan_token(ADDITION))
			return true;
		if (jj_3R_48())
			return true;
		return false;
	}

	private boolean jj_3R_140() {
		if (jj_scan_token(SUBTRACTION))
			return true;
		if (jj_3R_48())
			return true;
		return false;
	}

	private boolean jj_3R_45() {
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_85()) {
			jj_scanpos = xsp;
			if (jj_3R_86()) {
				jj_scanpos = xsp;
				if (jj_3R_87()) {
					jj_scanpos = xsp;
					if (jj_3R_88())
						return true;
				}
			}
		}
		return false;
	}

	private boolean jj_3R_85() {
		if (jj_scan_token(T_ID))
			return true;
		return false;
	}

	private boolean jj_3R_133() {
		if (jj_scan_token(T_ARRAY))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_33())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_65())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3R_115() {
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_28())
			return true;
		return false;
	}

	/**
	 * @return false whether the UNI keyword has been found
	 */
	private boolean jj_3R_38() {
		if (jj_scan_token(T_UNI))
			return true;
		if (jj_3R_40())
			return true;
		return false;
	}

	private boolean jj_3R_132() {
		if (jj_scan_token(T_LIST))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_65())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3R_58() {
		if (jj_3R_29())
			return true;
		Token xsp;
		while (true) {
			xsp = jj_scanpos;
			if (jj_3R_115()) {
				jj_scanpos = xsp;
				break;
			}
		}
		return false;
	}

	private boolean jj_3R_139() {
		if (jj_scan_token(ADDITION))
			return true;
		if (jj_3R_48())
			return true;
		return false;
	}

	private boolean jj_3R_94() {
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_139()) {
			jj_scanpos = xsp;
			if (jj_3R_140())
				return true;
		}
		return false;
	}

	private boolean jj_3R_131() {
		if (jj_scan_token(T_BOOLEAN))
			return true;
		return false;
	}

	private boolean jj_3R_28() {
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_57()) {
			jj_scanpos = xsp;
			if (jj_3R_58())
				return true;
		}
		return false;
	}

	private boolean jj_3R_57() {
		if (jj_scan_token(T_VOID))
			return true;
		return false;
	}

	private boolean jj_3_22() {
		if (jj_3R_38())
			return true;
		if (jj_3R_39())
			return true;
		if (jj_3R_37())
			return true;
		return false;
	}

	private boolean jj_3R_49() {
		if (jj_3R_48())
			return true;
		Token xsp;
		while (true) {
			xsp = jj_scanpos;
			if (jj_3R_94()) {
				jj_scanpos = xsp;
				break;
			}
		}
		return false;
	}

	private boolean jj_3R_130() {
		if (jj_scan_token(T_REAL))
			return true;
		return false;
	}

	private boolean jj_3_21() {
		if (jj_3R_38())
			return true;
		if (jj_3R_39())
			return true;
		return false;
	}

	private boolean jj_3R_129() {
		if (jj_scan_token(T_INTEGER))
			return true;
		return false;
	}

	private boolean jj_3_20() {
		if (jj_3R_38())
			return true;
		if (jj_3R_37())
			return true;
		return false;
	}

	private boolean jj_3_19() {
		if (jj_3R_39())
			return true;
		if (jj_3R_37())
			return true;
		return false;
	}

	private boolean jj_3_40() {
		if (jj_scan_token(DIVISION))
			return true;
		if (jj_3R_47())
			return true;
		return false;
	}

	private boolean jj_3_35() {
		if (jj_scan_token(T_RESTRICT))
			return true;
		if (jj_scan_token(T_ALL_OBSERVABLES))
			return true;
		return false;
	}

	private boolean jj_3_8() {
		if (jj_scan_token(T_INTEGER))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_33())
			return true;
		if (jj_scan_token(DOTDOT))
			return true;
		if (jj_3R_33())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3_18() {
		if (jj_3R_39())
			return true;
		return false;
	}

	private boolean jj_3_17() {
		if (jj_3R_38())
			return true;
		return false;
	}

	private boolean jj_3_39() {
		if (jj_scan_token(MULTIPLICATION))
			return true;
		if (jj_3R_47())
			return true;
		return false;
	}

	private boolean jj_3_34() {
		if (jj_scan_token(T_RESTRICT))
			return true;
		if (jj_scan_token(T_OBS_INTERACTIONS))
			return true;
		return false;
	}

	private boolean jj_3_16() {
		if (jj_3R_37())
			return true;
		return false;
	}

	private boolean jj_3R_138() {
		if (jj_scan_token(DIVISION))
			return true;
		if (jj_3R_47())
			return true;
		return false;
	}

	private boolean jj_3R_128() {
		if (jj_scan_token(T_INTEGER))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_33())
			return true;
		if (jj_scan_token(DOTDOT))
			return true;
		if (jj_3R_33())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3R_65() {
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_128()) {
			jj_scanpos = xsp;
			if (jj_3R_129()) {
				jj_scanpos = xsp;
				if (jj_3R_130()) {
					jj_scanpos = xsp;
					if (jj_3R_131()) {
						jj_scanpos = xsp;
						if (jj_3R_132()) {
							jj_scanpos = xsp;
							if (jj_3R_133()) {
								jj_scanpos = xsp;
								if (jj_3R_134())
									return true;
							}
						}
					}
				}
			}
		}
		return false;
	}

	private boolean jj_3_33() {
		if (jj_scan_token(T_RESTRICT))
			return true;
		if (jj_scan_token(T_OBS_INTERNALS))
			return true;
		return false;
	}

	private boolean jj_3R_137() {
		if (jj_scan_token(MULTIPLICATION))
			return true;
		if (jj_3R_47())
			return true;
		return false;
	}

	private boolean jj_3R_93() {
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_137()) {
			jj_scanpos = xsp;
			if (jj_3R_138())
				return true;
		}
		return false;
	}

	private boolean jj_3R_117() {
		if (jj_3R_145())
			return true;
		return false;
	}

	private boolean jj_3R_48() {
		if (jj_3R_47())
			return true;
		Token xsp;
		while (true) {
			xsp = jj_scanpos;
			if (jj_3R_93()) {
				jj_scanpos = xsp;
				break;
			}
		}
		return false;
	}

	private boolean jj_3R_116() {
		if (jj_3R_65())
			return true;
		return false;
	}

	private boolean jj_3_32() {
		if (jj_scan_token(T_RESTRICT))
			return true;
		if (jj_3R_43())
			return true;
		if (jj_scan_token(DOT))
			return true;
		if (jj_3R_45())
			return true;
		return false;
	}

	private boolean jj_3_38() {
		if (jj_scan_token(T_LENGTH))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_46())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3R_59() {
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_116()) {
			jj_scanpos = xsp;
			if (jj_3R_117())
				return true;
		}
		return false;
	}

	private boolean jj_3R_92() {
		if (jj_scan_token(T_LENGTH))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_46())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3R_169() {
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_33())
			return true;
		return false;
	}

	private boolean jj_3R_147() {
		if (jj_scan_token(T_LOCAL))
			return true;
		if (jj_3R_65())
			return true;
		if (jj_scan_token(T_ID))
			return true;
		return false;
	}

	private boolean jj_3R_153() {
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_33())
			return true;
		return false;
	}

	private boolean jj_3R_34() {
		if (jj_3R_33())
			return true;
		Token xsp;
		while (true) {
			xsp = jj_scanpos;
			if (jj_3R_169()) {
				jj_scanpos = xsp;
				break;
			}
		}
		return false;
	}

	private boolean jj_3R_91() {
		if (jj_scan_token(T_NUMBER))
			return true;
		return false;
	}

	private boolean jj_3_37() {
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_33())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3R_172() {
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_33())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_33())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3R_123() {
		if (jj_3R_147())
			return true;
		Token xsp;
		while (true) {
			xsp = jj_scanpos;
			if (jj_3R_148()) {
				jj_scanpos = xsp;
				break;
			}
		}
		return false;
	}

	private boolean jj_3R_90() {
		if (jj_3R_46())
			return true;
		return false;
	}

	private boolean jj_3R_148() {
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_147())
			return true;
		return false;
	}

	private boolean jj_3R_47() {
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_89()) {
			jj_scanpos = xsp;
			if (jj_3R_90()) {
				jj_scanpos = xsp;
				if (jj_3R_91()) {
					jj_scanpos = xsp;
					if (jj_3R_92())
						return true;
				}
			}
		}
		return false;
	}

	private boolean jj_3R_89() {
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_33())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3R_171() {
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_33())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_33())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3R_122() {
		if (jj_scan_token(T_VOID))
			return true;
		return false;
	}

	private boolean jj_3R_168() {
		if (jj_scan_token(UNDERSCORE))
			return true;
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_172())
			jj_scanpos = xsp;
		return false;
	}

	private boolean jj_3R_63() {
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_122()) {
			jj_scanpos = xsp;
			if (jj_3R_123())
				return true;
		}
		return false;
	}

	private boolean jj_3R_143() {
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_33())
			return true;
		return false;
	}

	private boolean jj_3R_167() {
		if (jj_scan_token(T_INF))
			return true;
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_171())
			jj_scanpos = xsp;
		return false;
	}

	private boolean jj_3R_110() {
		if (jj_scan_token(T_REMOVE))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_33())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_46())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3_36() {
		if (jj_3R_33())
			return true;
		Token xsp;
		while (true) {
			xsp = jj_scanpos;
			if (jj_3R_153()) {
				jj_scanpos = xsp;
				break;
			}
		}
		return false;
	}

	private boolean jj_3R_109() {
		if (jj_scan_token(T_INSERT))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_33())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_46())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3R_32() {
		if (jj_3R_65())
			return true;
		if (jj_scan_token(T_ID))
			return true;
		return false;
	}

	private boolean jj_3R_108() {
		if (jj_scan_token(T_CONCAT))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_46())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_46())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3R_166() {
		if (jj_scan_token(T_EXP))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_33())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3R_158() {
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_166()) {
			jj_scanpos = xsp;
			if (jj_3R_167()) {
				jj_scanpos = xsp;
				if (jj_3R_168())
					return true;
			}
		}
		return false;
	}

	private boolean jj_3_7() {
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_32())
			return true;
		return false;
	}

	private boolean jj_3R_107() {
		if (jj_scan_token(T_TAIL))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_46())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3R_55() {
		if (jj_scan_token(T_CONST))
			return true;
		if (jj_3R_59())
			return true;
		if (jj_scan_token(T_ID))
			return true;
		if (jj_scan_token(ASSIGN))
			return true;
		if (jj_3R_33())
			return true;
		return false;
	}

	private boolean jj_3R_144() {
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_33())
			return true;
		return false;
	}

	private boolean jj_3R_84() {
		if (jj_scan_token(T_ALL))
			return true;
		return false;
	}

	private boolean jj_3R_146() {
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_32())
			return true;
		return false;
	}

	private boolean jj_3R_52() {
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_106()) {
			jj_scanpos = xsp;
			if (jj_3R_107()) {
				jj_scanpos = xsp;
				if (jj_3R_108()) {
					jj_scanpos = xsp;
					if (jj_3R_109()) {
						jj_scanpos = xsp;
						if (jj_3R_110())
							return true;
					}
				}
			}
		}
		return false;
	}

	private boolean jj_3R_106() {
		if (jj_scan_token(T_LIST_CONS))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3_36())
			jj_scanpos = xsp;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3_15() {
		if (jj_3R_33())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_36())
			return true;
		return false;
	}

	private boolean jj_3_27() {
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_33())
			return true;
		return false;
	}

	private boolean jj_3R_83() {
		if (jj_scan_token(T_INTERACTIONS))
			return true;
		return false;
	}

	private boolean jj_3R_121() {
		if (jj_3R_32())
			return true;
		Token xsp;
		while (true) {
			xsp = jj_scanpos;
			if (jj_3R_146()) {
				jj_scanpos = xsp;
				break;
			}
		}
		return false;
	}

	private boolean jj_3_2() {
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_27())
			return true;
		return false;
	}

	private boolean jj_3R_82() {
		if (jj_scan_token(T_INTERNALS))
			return true;
		return false;
	}

	private boolean jj_3R_120() {
		if (jj_scan_token(T_VOID))
			return true;
		return false;
	}

	private boolean jj_3R_62() {
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_120()) {
			jj_scanpos = xsp;
			if (jj_3R_121())
				return true;
		}
		return false;
	}

	private boolean jj_3R_76() {
		if (jj_3R_33())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_36())
			return true;
		return false;
	}

	private boolean jj_3R_170() {
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_33())
			return true;
		return false;
	}

	private boolean jj_3R_56() {
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_27())
			return true;
		return false;
	}

	private boolean jj_3R_36() {
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3_14()) {
			jj_scanpos = xsp;
			if (jj_3R_76())
				return true;
		}
		return false;
	}

	private boolean jj_3_14() {
		if (jj_3R_33())
			return true;
		return false;
	}

	private boolean jj_3R_112() {
		if (jj_scan_token(T_WRITE))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_33())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_33())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_46())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3R_27() {
		if (jj_3R_55())
			return true;
		Token xsp;
		while (true) {
			xsp = jj_scanpos;
			if (jj_3R_56()) {
				jj_scanpos = xsp;
				break;
			}
		}
		return false;
	}

	private boolean jj_3R_42() {
		if (jj_3R_33())
			return true;
		Token xsp;
		while (true) {
			xsp = jj_scanpos;
			if (jj_3R_170()) {
				jj_scanpos = xsp;
				break;
			}
		}
		return false;
	}

	private boolean jj_3R_44() {
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_81()) {
			jj_scanpos = xsp;
			if (jj_3R_82()) {
				jj_scanpos = xsp;
				if (jj_3R_83()) {
					jj_scanpos = xsp;
					if (jj_3R_84())
						return true;
				}
			}
		}
		return false;
	}

	private boolean jj_3R_81() {
		if (jj_scan_token(T_ID))
			return true;
		return false;
	}

	private boolean jj_3R_111() {
		if (jj_scan_token(T_ARRAY_CONS))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_33())
			return true;
		Token xsp;
		while (true) {
			xsp = jj_scanpos;
			if (jj_3R_143()) {
				jj_scanpos = xsp;
				break;
			}
		}
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3_1() {
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_27())
			return true;
		return false;
	}

	private boolean jj_3R_53() {
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_111()) {
			jj_scanpos = xsp;
			if (jj_3R_112())
				return true;
		}
		return false;
	}

	private boolean jj_3R_80() {
		if (jj_scan_token(LBRACKET))
			return true;
		if (jj_3R_33())
			return true;
		if (jj_scan_token(RBRACKET))
			return true;
		return false;
	}

	private boolean jj_3R_43() {
		if (jj_scan_token(T_ID))
			return true;
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_80())
			jj_scanpos = xsp;
		return false;
	}

	private boolean jj_3_13() {
		if (jj_scan_token(T_ID))
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_35())
			return true;
		return false;
	}

	private boolean jj_3_12() {
		if (jj_scan_token(T_ID))
			return true;
		return false;
	}

	private boolean jj_3_26() {
		if (jj_3R_42())
			return true;
		return false;
	}

	private boolean jj_3R_75() {
		if (jj_scan_token(T_ID))
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_35())
			return true;
		return false;
	}

	private boolean jj_3_31() {
		if (jj_scan_token(T_HIDE))
			return true;
		if (jj_scan_token(T_ALL))
			return true;
		return false;
	}

	private boolean jj_3R_114() {
		if (jj_scan_token(T_PUT))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_scan_token(T_ID))
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_33())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_46())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3R_31() {
		if (jj_scan_token(T_ID))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_62())
			return true;
		if (jj_scan_token(SEMICOLON))
			return true;
		if (jj_3R_63())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		if (jj_scan_token(EQUAL))
			return true;
		if (jj_3R_64())
			return true;
		return false;
	}

	private boolean jj_3R_35() {
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_74()) {
			jj_scanpos = xsp;
			if (jj_3R_75())
				return true;
		}
		return false;
	}

	private boolean jj_3R_74() {
		if (jj_scan_token(T_ID))
			return true;
		return false;
	}

	private boolean jj_3_30() {
		if (jj_scan_token(T_HIDE))
			return true;
		if (jj_scan_token(T_INTERACTIONS))
			return true;
		return false;
	}

	private boolean jj_3R_136() {
		if (jj_3R_43())
			return true;
		if (jj_scan_token(COLON))
			return true;
		if (jj_scan_token(T_ID))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3_26())
			jj_scanpos = xsp;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3_60() {
		if (jj_scan_token(T_GET))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_scan_token(T_ID))
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_46())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3R_113() {
		if (jj_scan_token(T_RECORD_CONS))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_33())
			return true;
		Token xsp;
		while (true) {
			xsp = jj_scanpos;
			if (jj_3R_144()) {
				jj_scanpos = xsp;
				break;
			}
		}
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3_29() {
		if (jj_scan_token(T_HIDE))
			return true;
		if (jj_scan_token(T_INTERNALS))
			return true;
		return false;
	}

	private boolean jj_3R_54() {
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_113()) {
			jj_scanpos = xsp;
			if (jj_3R_114())
				return true;
		}
		return false;
	}

	private boolean jj_3_59() {
		if (jj_scan_token(T_READ))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_33())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_46())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3_6() {
		if (jj_scan_token(SEMICOLON))
			return true;
		if (jj_3R_31())
			return true;
		return false;
	}

	private boolean jj_3R_73() {
		if (jj_scan_token(T_GET))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_scan_token(T_ID))
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_46())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3_11() {
		if (jj_scan_token(T_ID))
			return true;
		if (jj_scan_token(EXCLAMATION))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_36())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3_58() {
		if (jj_scan_token(T_FIRST))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_46())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3R_165() {
		if (jj_scan_token(T_ID))
			return true;
		return false;
	}

	private boolean jj_3_28() {
		if (jj_scan_token(T_HIDE))
			return true;
		if (jj_3R_43())
			return true;
		if (jj_scan_token(DOT))
			return true;
		if (jj_3R_44())
			return true;
		return false;
	}

	private boolean jj_3R_72() {
		if (jj_scan_token(T_READ))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_33())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_46())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3_25() {
		if (jj_3R_42())
			return true;
		return false;
	}

	private boolean jj_3_57() {
		if (jj_3R_54())
			return true;
		return false;
	}

	private boolean jj_3_10() {
		if (jj_scan_token(T_ID))
			return true;
		if (jj_scan_token(QUESTION))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_35())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3R_46() {
		if (jj_scan_token(T_ID))
			return true;
		return false;
	}

	private boolean jj_3R_164() {
		if (jj_scan_token(T_ID))
			return true;
		if (jj_scan_token(EXCLAMATION))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_36())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3R_135() {
		if (jj_3R_43())
			return true;
		if (jj_scan_token(COLON))
			return true;
		if (jj_scan_token(T_ID))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3_25())
			jj_scanpos = xsp;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3R_71() {
		if (jj_scan_token(T_FIRST))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_46())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3_56() {
		if (jj_3R_53())
			return true;
		return false;
	}

	private boolean jj_3R_70() {
		if (jj_3R_54())
			return true;
		return false;
	}

	private boolean jj_3R_163() {
		if (jj_scan_token(T_ID))
			return true;
		if (jj_scan_token(QUESTION))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_35())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3R_157() {
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_163()) {
			jj_scanpos = xsp;
			if (jj_3R_164()) {
				jj_scanpos = xsp;
				if (jj_3R_165())
					return true;
			}
		}
		return false;
	}

	private boolean jj_3_55() {
		if (jj_3R_52())
			return true;
		return false;
	}

	private boolean jj_3R_69() {
		if (jj_3R_53())
			return true;
		return false;
	}

	private boolean jj_3_54() {
		if (jj_3R_50())
			return true;
		return false;
	}

	private boolean jj_3_9() {
		if (jj_3R_34())
			return true;
		return false;
	}

	private boolean jj_3R_68() {
		if (jj_3R_52())
			return true;
		return false;
	}

	private boolean jj_3R_118() {
		if (jj_3R_65())
			return true;
		if (jj_scan_token(T_ID))
			return true;
		if (jj_scan_token(ASSIGN))
			return true;
		if (jj_3R_33())
			return true;
		return false;
	}

	private boolean jj_3R_149() {
		if (jj_scan_token(LESS))
			return true;
		if (jj_3R_157())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_158())
			return true;
		if (jj_scan_token(GREATER))
			return true;
		return false;
	}

	private boolean jj_3R_67() {
		if (jj_3R_50())
			return true;
		return false;
	}

	private boolean jj_3_53() {
		if (jj_3R_49())
			return true;
		return false;
	}

	private boolean jj_3R_79() {
		if (jj_scan_token(T_FOR_ALL))
			return true;
		if (jj_scan_token(T_ID))
			return true;
		if (jj_scan_token(T_IN))
			return true;
		if (jj_3R_33())
			return true;
		if (jj_scan_token(DOTDOT))
			return true;
		if (jj_3R_33())
			return true;
		if (jj_3R_136())
			return true;
		return false;
	}

	private boolean jj_3R_78() {
		if (jj_3R_135())
			return true;
		return false;
	}

	private boolean jj_3R_41() {
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_78()) {
			jj_scanpos = xsp;
			if (jj_3R_79())
				return true;
		}
		return false;
	}

	private boolean jj_3_5() {
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_30())
			return true;
		return false;
	}

	private boolean jj_3R_33() {
		Token xsp;
		xsp = jj_scanpos;
		jj_lookingAhead = true;
		jj_semLA = getToken(2).kind != LESS && getToken(2).kind != LE && getToken(2).kind != GREATER
				&& getToken(2).kind != GE && getToken(2).kind != EQUAL && getToken(2).kind != NE;
		jj_lookingAhead = false;
		if (!jj_semLA || jj_3R_66()) {
			jj_scanpos = xsp;
			if (jj_3R_67()) {
				jj_scanpos = xsp;
				if (jj_3R_68()) {
					jj_scanpos = xsp;
					if (jj_3R_69()) {
						jj_scanpos = xsp;
						if (jj_3R_70()) {
							jj_scanpos = xsp;
							if (jj_3R_71()) {
								jj_scanpos = xsp;
								if (jj_3R_72()) {
									jj_scanpos = xsp;
									if (jj_3R_73())
										return true;
								}
							}
						}
					}
				}
			}
		}
		return false;
	}

	private boolean jj_3R_66() {
		if (jj_3R_49())
			return true;
		return false;
	}

	private boolean jj_3R_159() {
		if (jj_scan_token(T_COND))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		if (jj_3R_33())
			return true;
		if (jj_scan_token(RPAREN))
			return true;
		if (jj_scan_token(IMPL))
			return true;
		return false;
	}

	private boolean jj_3_24() {
		if (jj_scan_token(SEMICOLON))
			return true;
		if (jj_3R_41())
			return true;
		return false;
	}

	private boolean jj_3R_150() {
		if (jj_3R_159())
			return true;
		return false;
	}

	private boolean jj_3R_61() {
		if (jj_3R_118())
			return true;
		Token xsp;
		while (true) {
			xsp = jj_scanpos;
			if (jj_3R_119()) {
				jj_scanpos = xsp;
				break;
			}
		}
		return false;
	}

	private boolean jj_3R_119() {
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_30())
			return true;
		return false;
	}

	private boolean jj_3R_160() {
		if (jj_3R_159())
			return true;
		return false;
	}

	private boolean jj_3_52() {
		if (jj_scan_token(OR))
			return true;
		if (jj_3R_51())
			return true;
		return false;
	}

	private boolean jj_3R_127() {
		if (jj_scan_token(T_ID))
			return true;
		if (jj_scan_token(LPAREN))
			return true;
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3_9())
			jj_scanpos = xsp;
		if (jj_scan_token(RPAREN))
			return true;
		return false;
	}

	private boolean jj_3R_151() {
		if (jj_scan_token(COMMA))
			return true;
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_160())
			jj_scanpos = xsp;
		if (jj_3R_64())
			return true;
		return false;
	}

	private boolean jj_3R_60() {
		if (jj_scan_token(T_VOID))
			return true;
		return false;
	}

	private boolean jj_3R_30() {
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_60()) {
			jj_scanpos = xsp;
			if (jj_3R_61())
				return true;
		}
		return false;
	}

	private boolean jj_3_51() {
		if (jj_scan_token(AND))
			return true;
		if (jj_3R_51())
			return true;
		return false;
	}

	private boolean jj_3R_142() {
		if (jj_scan_token(OR))
			return true;
		if (jj_3R_51())
			return true;
		return false;
	}

	private boolean jj_3R_126() {
		if (jj_scan_token(T_CHOICE))
			return true;
		if (jj_scan_token(LBRACE))
			return true;
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_150())
			jj_scanpos = xsp;
		if (jj_3R_64())
			return true;
		if (jj_3R_151())
			return true;
		while (true) {
			xsp = jj_scanpos;
			if (jj_3R_151()) {
				jj_scanpos = xsp;
				break;
			}
		}
		if (jj_scan_token(RBRACE))
			return true;
		return false;
	}

	private boolean jj_3R_141() {
		if (jj_scan_token(AND))
			return true;
		if (jj_3R_51())
			return true;
		return false;
	}

	private boolean jj_3R_95() {
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_141()) {
			jj_scanpos = xsp;
			if (jj_3R_142())
				return true;
		}
		return false;
	}

	private boolean jj_3R_125() {
		if (jj_3R_149())
			return true;
		if (jj_scan_token(DOT))
			return true;
		if (jj_3R_64())
			return true;
		return false;
	}

	private boolean jj_3R_50() {
		if (jj_3R_51())
			return true;
		Token xsp;
		while (true) {
			xsp = jj_scanpos;
			if (jj_3R_95()) {
				jj_scanpos = xsp;
				break;
			}
		}
		return false;
	}

	/** Generated Token Manager. */
	public AEMparserTokenManager token_source;
	JavaCharStream jj_input_stream;
	/** Current token. */
	public Token token;
	/** Next token. */
	public Token jj_nt;
	private int jj_ntk;
	private Token jj_scanpos, jj_lastpos;
	private int jj_la;
	/** Whether we are looking ahead. */
	private boolean jj_lookingAhead = false;
	private boolean jj_semLA;
	private int jj_gen;
	final private int[] jj_la1 = new int[54];
	static private int[] jj_la1_0;
	static private int[] jj_la1_1;
	static private int[] jj_la1_2;
	static private int[] jj_la1_3;
	static private int[] jj_la1_4;
	static {
		jj_la1_init_0();
		jj_la1_init_1();
		jj_la1_init_2();
		jj_la1_init_3();
		jj_la1_init_4();
	}

	private static void jj_la1_init_0() {
		jj_la1_0 = new int[] { 0x0, 0x0, 0x80000000, 0x0, 0x2000, 0x0, 0x0, 0x4000, 0x0, 0x0, 0x0, 0x4000, 0x0, 0x0,
				0x0, 0x4000, 0x200000, 0x0, 0x80, 0x80, 0x80000, 0x4000, 0x0, 0x0, 0x800, 0x2000, 0x0, 0x0, 0x2000, 0x0,
				0x0, 0x0, 0x0, 0x0, 0x0, 0x2000, 0x0, 0x0, 0x2000, 0x0, 0x0, 0x2000, 0x0, 0x4000, 0x0, 0x4000, 0x0,
				0x4000, 0x0, 0x0, 0x6000000, 0x18000000, 0x0, 0x0, };
	}

	private static void jj_la1_init_1() {
		jj_la1_1 = new int[] { 0x1000, 0x20000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40000000, 0x0, 0x0, 0x0, 0x0, 0x0,
				0x0, 0x0, 0x80000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4000000, 0x0, 0x0, 0x4000000, 0x4000000, 0x0,
				0x4000400, 0x10, 0x4000400, 0x2000, 0x40000, 0x800000, 0x0, 0x4004000, 0x38000, 0x0, 0x4080000,
				0x700000, 0x0, 0x5000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, };
	}

	private static void jj_la1_init_2() {
		jj_la1_2 = new int[] { 0x0, 0x10, 0x0, 0x10, 0x0, 0x310, 0x310, 0x0, 0x10, 0x3e0, 0x300, 0x0, 0xe0, 0x8, 0x8,
				0x0, 0x4, 0x0, 0x0, 0x0, 0x3, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
				0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, };
	}

	private static void jj_la1_init_3() {
		jj_la1_3 = new int[] { 0x0, 0x0, 0x0, 0x0, 0x0, 0x440480, 0x440480, 0x0, 0x0, 0x440480, 0x440480, 0x0, 0x0, 0x0,
				0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
				0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2800000, 0x0, 0x280000, 0x0, 0x1e800, 0x0, 0x0, 0x0,
				0x300, 0xc0000000, };
	}

	private static void jj_la1_init_4() {
		jj_la1_4 = new int[] { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x400,
				0x400, 0x0, 0x0, 0x0, 0x0, 0x0, 0x400, 0x0, 0x0, 0x400, 0x400, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
				0x0, 0x400, 0x0, 0x0, 0x400, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x402, 0x0, 0x0, 0x0, 0x0, };
	}

	final private JJCalls[] jj_2_rtns = new JJCalls[60];
	private boolean jj_rescan = false;
	private int jj_gc = 0;

	/** Constructor with InputStream. */
	public AEMparser(java.io.InputStream stream) {
		this(stream, null);
	}

	/** Constructor with InputStream and supplied encoding */
	public AEMparser(java.io.InputStream stream, String encoding) {
		try {
			jj_input_stream = new JavaCharStream(stream, encoding, 1, 1);
		} catch (java.io.UnsupportedEncodingException e) {
			throw new RuntimeException(e);
		}
		token_source = new AEMparserTokenManager(jj_input_stream);
		token = new Token();
		jj_ntk = -1;
		jj_gen = 0;
		for (int i = 0; i < 54; i++)
			jj_la1[i] = -1;
		for (int i = 0; i < jj_2_rtns.length; i++)
			jj_2_rtns[i] = new JJCalls();
	}

	/** Reinitialise. */
	public void ReInit(java.io.InputStream stream) {
		ReInit(stream, null);
	}

	/** Reinitialise. */
	public void ReInit(java.io.InputStream stream, String encoding) {
		try {
			jj_input_stream.ReInit(stream, encoding, 1, 1);
		} catch (java.io.UnsupportedEncodingException e) {
			throw new RuntimeException(e);
		}
		token_source.ReInit(jj_input_stream);
		token = new Token();
		jj_ntk = -1;
		jj_gen = 0;
		for (int i = 0; i < 54; i++)
			jj_la1[i] = -1;
		for (int i = 0; i < jj_2_rtns.length; i++)
			jj_2_rtns[i] = new JJCalls();
	}

	/** Constructor. */
	public AEMparser(java.io.Reader stream) {
		jj_input_stream = new JavaCharStream(stream, 1, 1);
		token_source = new AEMparserTokenManager(jj_input_stream);
		token = new Token();
		jj_ntk = -1;
		jj_gen = 0;
		for (int i = 0; i < 54; i++)
			jj_la1[i] = -1;
		for (int i = 0; i < jj_2_rtns.length; i++)
			jj_2_rtns[i] = new JJCalls();
	}

	/** Reinitialise. */
	public void ReInit(java.io.Reader stream) {
		jj_input_stream.ReInit(stream, 1, 1);
		token_source.ReInit(jj_input_stream);
		token = new Token();
		jj_ntk = -1;
		jj_gen = 0;
		for (int i = 0; i < 54; i++)
			jj_la1[i] = -1;
		for (int i = 0; i < jj_2_rtns.length; i++)
			jj_2_rtns[i] = new JJCalls();
	}

	/** Constructor with generated Token Manager. */
	public AEMparser(AEMparserTokenManager tm) {
		token_source = tm;
		token = new Token();
		jj_ntk = -1;
		jj_gen = 0;
		for (int i = 0; i < 54; i++)
			jj_la1[i] = -1;
		for (int i = 0; i < jj_2_rtns.length; i++)
			jj_2_rtns[i] = new JJCalls();
	}

	/** Reinitialise. */
	public void ReInit(AEMparserTokenManager tm) {
		token_source = tm;
		token = new Token();
		jj_ntk = -1;
		jj_gen = 0;
		for (int i = 0; i < 54; i++)
			jj_la1[i] = -1;
		for (int i = 0; i < jj_2_rtns.length; i++)
			jj_2_rtns[i] = new JJCalls();
	}

	private Token jj_consume_token(int kind) throws ParseException {
		Token oldToken;
		if ((oldToken = token).next != null)
			token = token.next;
		else
			token = token.next = token_source.getNextToken();
		jj_ntk = -1;
		if (token.kind == kind) {
			jj_gen++;
			if (++jj_gc > 100) {
				jj_gc = 0;
				for (int i = 0; i < jj_2_rtns.length; i++) {
					JJCalls c = jj_2_rtns[i];
					while (c != null) {
						if (c.gen < jj_gen)
							c.first = null;
						c = c.next;
					}
				}
			}
			return token;
		}
		token = oldToken;
		jj_kind = kind;
		throw generateParseException();
	}

	static private final class LookaheadSuccess extends java.lang.Error {
	}

	final private LookaheadSuccess jj_ls = new LookaheadSuccess();

	/**
	 * 
	 * @param kind
	 *            represents the keyword
	 * @return false whether kind has been found
	 */
	private boolean jj_scan_token(int kind) {
		if (jj_scanpos == jj_lastpos) {
			jj_la--;
			if (jj_scanpos.next == null) {
				jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
			} else {
				jj_lastpos = jj_scanpos = jj_scanpos.next;
			}
		} else {
			jj_scanpos = jj_scanpos.next;
		}
		if (jj_rescan) {
			int i = 0;
			Token tok = token;
			while (tok != null && tok != jj_scanpos) {
				i++;
				tok = tok.next;
			}
			if (tok != null)
				jj_add_error_token(kind, i);
		}
		if (jj_scanpos.kind != kind)
			return true;
		if (jj_la == 0 && jj_scanpos == jj_lastpos)
			throw jj_ls;
		return false;
	}

	/** Get the next Token. */
	final public Token getNextToken() {
		if (token.next != null)
			token = token.next;
		else
			token = token.next = token_source.getNextToken();
		jj_ntk = -1;
		jj_gen++;
		return token;
	}

	/** Get the specific Token. */
	final public Token getToken(int index) {
		Token t = jj_lookingAhead ? jj_scanpos : token;
		for (int i = 0; i < index; i++) {
			if (t.next != null)
				t = t.next;
			else
				t = t.next = token_source.getNextToken();
		}
		return t;
	}

	private int jj_ntk() {
		if ((jj_nt = token.next) == null)
			return (jj_ntk = (token.next = token_source.getNextToken()).kind);
		else
			return (jj_ntk = jj_nt.kind);
	}

	private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>();
	private int[] jj_expentry;
	private int jj_kind = -1;
	private int[] jj_lasttokens = new int[100];
	private int jj_endpos;

	private void jj_add_error_token(int kind, int pos) {
		if (pos >= 100)
			return;
		if (pos == jj_endpos + 1) {
			jj_lasttokens[jj_endpos++] = kind;
		} else if (jj_endpos != 0) {
			jj_expentry = new int[jj_endpos];
			for (int i = 0; i < jj_endpos; i++) {
				jj_expentry[i] = jj_lasttokens[i];
			}
			jj_entries_loop: for (java.util.Iterator<?> it = jj_expentries.iterator(); it.hasNext();) {
				int[] oldentry = (int[]) (it.next());
				if (oldentry.length == jj_expentry.length) {
					for (int i = 0; i < jj_expentry.length; i++) {
						if (oldentry[i] != jj_expentry[i]) {
							continue jj_entries_loop;
						}
					}
					jj_expentries.add(jj_expentry);
					break jj_entries_loop;
				}
			}
			if (pos != 0)
				jj_lasttokens[(jj_endpos = pos) - 1] = kind;
		}
	}

	/** Generate ParseException. */
	public ParseException generateParseException() {
		jj_expentries.clear();
		boolean[] la1tokens = new boolean[141];
		if (jj_kind >= 0) {
			la1tokens[jj_kind] = true;
			jj_kind = -1;
		}
		for (int i = 0; i < 54; i++) {
			if (jj_la1[i] == jj_gen) {
				for (int j = 0; j < 32; j++) {
					if ((jj_la1_0[i] & (1 << j)) != 0) {
						la1tokens[j] = true;
					}
					if ((jj_la1_1[i] & (1 << j)) != 0) {
						la1tokens[32 + j] = true;
					}
					if ((jj_la1_2[i] & (1 << j)) != 0) {
						la1tokens[64 + j] = true;
					}
					if ((jj_la1_3[i] & (1 << j)) != 0) {
						la1tokens[96 + j] = true;
					}
					if ((jj_la1_4[i] & (1 << j)) != 0) {
						la1tokens[128 + j] = true;
					}
				}
			}
		}
		for (int i = 0; i < 141; i++) {
			if (la1tokens[i]) {
				jj_expentry = new int[1];
				jj_expentry[0] = i;
				jj_expentries.add(jj_expentry);
			}
		}
		jj_endpos = 0;
		jj_rescan_token();
		jj_add_error_token(0, 0);
		int[][] exptokseq = new int[jj_expentries.size()][];
		for (int i = 0; i < jj_expentries.size(); i++) {
			exptokseq[i] = jj_expentries.get(i);
		}
		return new ParseException(token, exptokseq, tokenImage);
	}

	/** Enable tracing. */
	final public void enable_tracing() {
	}

	/** Disable tracing. */
	final public void disable_tracing() {
	}

	private void jj_rescan_token() {
		jj_rescan = true;
		for (int i = 0; i < 60; i++) {
			try {
				JJCalls p = jj_2_rtns[i];
				do {
					if (p.gen > jj_gen) {
						jj_la = p.arg;
						jj_lastpos = jj_scanpos = p.first;
						switch (i) {
						case 0:
							jj_3_1();
							break;
						case 1:
							jj_3_2();
							break;
						case 2:
							jj_3_3();
							break;
						case 3:
							jj_3_4();
							break;
						case 4:
							jj_3_5();
							break;
						case 5:
							jj_3_6();
							break;
						case 6:
							jj_3_7();
							break;
						case 7:
							jj_3_8();
							break;
						case 8:
							jj_3_9();
							break;
						case 9:
							jj_3_10();
							break;
						case 10:
							jj_3_11();
							break;
						case 11:
							jj_3_12();
							break;
						case 12:
							jj_3_13();
							break;
						case 13:
							jj_3_14();
							break;
						case 14:
							jj_3_15();
							break;
						case 15:
							jj_3_16();
							break;
						case 16:
							jj_3_17();
							break;
						case 17:
							jj_3_18();
							break;
						case 18:
							jj_3_19();
							break;
						case 19:
							jj_3_20();
							break;
						case 20:
							jj_3_21();
							break;
						case 21:
							jj_3_22();
							break;
						case 22:
							jj_3_23();
							break;
						case 23:
							jj_3_24();
							break;
						case 24:
							jj_3_25();
							break;
						case 25:
							jj_3_26();
							break;
						case 26:
							jj_3_27();
							break;
						case 27:
							jj_3_28();
							break;
						case 28:
							jj_3_29();
							break;
						case 29:
							jj_3_30();
							break;
						case 30:
							jj_3_31();
							break;
						case 31:
							jj_3_32();
							break;
						case 32:
							jj_3_33();
							break;
						case 33:
							jj_3_34();
							break;
						case 34:
							jj_3_35();
							break;
						case 35:
							jj_3_36();
							break;
						case 36:
							jj_3_37();
							break;
						case 37:
							jj_3_38();
							break;
						case 38:
							jj_3_39();
							break;
						case 39:
							jj_3_40();
							break;
						case 40:
							jj_3_41();
							break;
						case 41:
							jj_3_42();
							break;
						case 42:
							jj_3_43();
							break;
						case 43:
							jj_3_44();
							break;
						case 44:
							jj_3_45();
							break;
						case 45:
							jj_3_46();
							break;
						case 46:
							jj_3_47();
							break;
						case 47:
							jj_3_48();
							break;
						case 48:
							jj_3_49();
							break;
						case 49:
							jj_3_50();
							break;
						case 50:
							jj_3_51();
							break;
						case 51:
							jj_3_52();
							break;
						case 52:
							jj_3_53();
							break;
						case 53:
							jj_3_54();
							break;
						case 54:
							jj_3_55();
							break;
						case 55:
							jj_3_56();
							break;
						case 56:
							jj_3_57();
							break;
						case 57:
							jj_3_58();
							break;
						case 58:
							jj_3_59();
							break;
						case 59:
							jj_3_60();
							break;
						}
					}
					p = p.next;
				} while (p != null);
			} catch (LookaheadSuccess ls) {
			}
		}
		jj_rescan = false;
	}

	private void jj_save(int index, int xla) {
		JJCalls p = jj_2_rtns[index];
		while (p.gen > jj_gen) {
			if (p.next == null) {
				p = p.next = new JJCalls();
				break;
			}
			p = p.next;
		}
		p.gen = jj_gen + xla - jj_la;
		p.first = token;
		p.arg = xla;
	}

	static final class JJCalls {
		int gen;
		Token first;
		int arg;
		JJCalls next;
	}

}
