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

net.sourceforge.osexpress.parser.ExpressParser Maven / Gradle / Ivy

// $ANTLR : "express.g" -> "ExpressParser.java"$

package net.sourceforge.osexpress.parser;

/******************************************************************************
 * Copyright (C) 2009-2016  BIMserver.org
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 * 
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see {@literal}.
 *****************************************************************************/

import java.util.Hashtable;

import antlr.ASTFactory;
import antlr.ASTPair;
import antlr.MismatchedTokenException;
import antlr.NoViableAltException;
import antlr.ParserSharedInputState;
import antlr.RecognitionException;
import antlr.Token;
import antlr.TokenBuffer;
import antlr.TokenStream;
import antlr.TokenStreamException;
import antlr.collections.AST;
import antlr.collections.impl.ASTArray;
import antlr.collections.impl.BitSet;

/**
 * The Express grammar written as ANTLR productions. Peter Denno,
 * [email protected] Stephane Lardet, [email protected]
 * 
 * Development of this software was funded by the United States Government, and
 * is not subject to copyright.
 * 
 * DISCLAIMER: Recipients of this software assume all responsibility associated
 * with its operation, modification, maintenance, and subsequent
 * re-distribution.
 */
public class ExpressParser extends antlr.LLkParser {

	public Scope rootScope;
	public Scope currentScope;
	private Scope lastCreatedScope;

	/*
	 * We keep track of scopes defined by schemas. It is useful when multiple
	 * schemas are parsed, to deal with external elements
	 */
	private Hashtable schemas;

	public boolean isFirst = true; /* is the first pass running ? */

	public void newScope() {
		if (isFirst)
			newScope1();
		else
			retrievePreviousScope();
	}

	/**
	 * creates a new Scope when entering a rule defining a scope in the grammar.
	 */
	public void newScope1() {
		Scope ns = new Scope(currentScope);
		currentScope = ns;
		lastCreatedScope.setNext(ns);
		lastCreatedScope = ns;
	}

	/**
	 * retrieve the scope created in the first pass when entering the same rule.
	 * See comments in the lexer's IDENT rule definition
	 */
	public void retrievePreviousScope() {
		currentScope = lastCreatedScope.next;
		lastCreatedScope = currentScope;
	}

	/**
	 * Go to the parent scope. Used when exiting a scope
	 */
	public void upScope() {
		currentScope = currentScope.parent;
	}

	/**
	 * we record schema scopes so as to retrieve external elements when parsing
	 * multiple schemas
	 * 
	 * @param id
	 */
	private void newSchemaScope(String id) {
		newScope();
		if (isFirst)
			schemas.put(id, currentScope);
	}

	/**
	 * entity case: additional information is recorded to build the entity
	 * inheritance tree
	 * 
	 * @param id
	 */
	private void newEntityScope(String id) {
		newScope();
		if (isFirst) {
			currentScope.setEntity();
			currentScope.parent.addEntityScope(id, currentScope);
		}
	}

	/**
	 * record an id in the current scope
	 * 
	 * @param id
	 * @param type
	 */
	private void addId(String id, ExpressParserTokenTypes type) {
		currentScope.addId(id, type);
	}

	/**
	 * add superentity in the current entity scope
	 * 
	 * @param name
	 */
	private void addSuper(String name) {
		currentScope.addSuperEntity(name);
	}

	public void setRootScope(Scope rs) {
		rootScope = rs;
		currentScope = rootScope;
		lastCreatedScope = rootScope;
		isFirst = false;
	}

	/**
	 * add an element referenced or used from another schema
	 * 
	 * @param ei
	 */
	public void addExternal(ExternalId ei) {
		currentScope.addExternal(ei);
	}

	/**
	 * when all elements of another schema are referenced
	 * 
	 * @param schema
	 */
	public void addAllReferenceExternals(String schema) {
		currentScope.addAllReferenceExternals(schema);
	}

	/**
	 * when all elements of another schema are used
	 * 
	 * @param schema
	 */
	public void addAllUseExternals(String schema) {
		currentScope.addAllUseExternals(schema);
	}

	/**
	 * after the first pass, adds external ids to schema scopes
	 */
	public void processExternals() {
		for (Scope scope : schemas.values()) {
			scope.processExternals(schemas);
		}
	}

	protected void match(ExpressParserTokenTypes tokenType) throws MismatchedTokenException, TokenStreamException {
		super.match(tokenType.getIndex());
	}

	protected boolean LA1Equals(ExpressParserTokenTypes tokenType) throws TokenStreamException {
		return LA(1) == tokenType.getIndex();
	}

	protected ExpressParser(TokenBuffer tokenBuf, int k) {
		super(tokenBuf, k);
		tokenNames = _tokenNames;
		buildTokenTypeASTClassMap();
		astFactory = new ASTFactory(getTokenTypeToASTClassMap());
	}

	public ExpressParser(TokenBuffer tokenBuf) {
		this(tokenBuf, 1);
	}

	protected ExpressParser(TokenStream lexer, int k) {
		super(lexer, k);
		tokenNames = _tokenNames;
		buildTokenTypeASTClassMap();
		astFactory = new ASTFactory(getTokenTypeToASTClassMap());
	}

	public ExpressParser(TokenStream lexer) {
		this(lexer, 1);
	}

	public ExpressParser(ParserSharedInputState state) {
		super(state, 1);
		tokenNames = _tokenNames;
		buildTokenTypeASTClassMap();
		astFactory = new ASTFactory(getTokenTypeToASTClassMap());
	}

	protected AST parseAST(ASTPair currentAST, ExpressParserTokenTypes tokenType) {
		// FIXME not sure if this function name is necessarily descriptive of
		// what's happening
		AST AST = (AST) currentAST.root;
		AST = makeAST(tokenType, AST);
		currentAST.root = AST;
		currentAST.child = getChild(AST);
		currentAST.advanceChildToEnd();
		AST = (AST) currentAST.root;
		return AST;
	}

	protected AST makeAST(ExpressParserTokenTypes tokenType, AST root) {
		return (AST) astFactory.make((new ASTArray(2)).add(astFactory.create(tokenType.getIndex(), tokenType.name())).add(root));
	}

	protected AST getChild(AST root) {
		return root != null && root.getFirstChild() != null ? root.getFirstChild() : root;
	}

	public final void actual_parameter_list() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST actual_parameter_list_AST = null;

		try {
			match(ExpressParserTokenTypes.LPAREN);
			parameter();
			astFactory.addASTChild(currentAST, returnAST);
			{
				_loop35506: do {
					if (LA1Equals(ExpressParserTokenTypes.COMMA)) {
						match(ExpressParserTokenTypes.COMMA);
						parameter();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35506;
					}

				} while (true);
			}
			match(ExpressParserTokenTypes.RPAREN);
			actual_parameter_list_AST = parseAST(currentAST, ExpressParserTokenTypes.ACTUAL_PARAMETER_LIST);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_0);
		}
		returnAST = actual_parameter_list_AST;
	}

	public final void parameter() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST parameter_AST = null;

		try {
			expression();
			astFactory.addASTChild(currentAST, returnAST);
			parameter_AST = parseAST(currentAST, ExpressParserTokenTypes.PARAMETER);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_1);
		}
		returnAST = parameter_AST;
	}

	public final void add_like_op() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST add_like_op_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case PLUS: {
				AST tmp4_AST = null;
				tmp4_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp4_AST);
				match(ExpressParserTokenTypes.PLUS);
				add_like_op_AST = parseAST(currentAST, ExpressParserTokenTypes.ADD_LIKE_OP);
				break;
			}
			case MINUS: {
				AST tmp5_AST = null;
				tmp5_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp5_AST);
				match(ExpressParserTokenTypes.MINUS);
				add_like_op_AST = parseAST(currentAST, ExpressParserTokenTypes.ADD_LIKE_OP);
				break;
			}
			case LITERAL_or: {
				AST tmp6_AST = null;
				tmp6_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp6_AST);
				match(ExpressParserTokenTypes.LITERAL_or);
				add_like_op_AST = parseAST(currentAST, ExpressParserTokenTypes.ADD_LIKE_OP);
				break;
			}
			case LITERAL_xor: {
				AST tmp7_AST = null;
				tmp7_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp7_AST);
				match(ExpressParserTokenTypes.LITERAL_xor);
				add_like_op_AST = parseAST(currentAST, ExpressParserTokenTypes.ADD_LIKE_OP);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_2);
		}
		returnAST = add_like_op_AST;
	}

	public final void aggregate_initializer() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST aggregate_initializer_AST = null;

		try {
			match(ExpressParserTokenTypes.LBRACK);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case CONSTANT_IDENT:
				case ENTITY_IDENT:
				case FUNCTION_IDENT:
				case PARAMETER_IDENT:
				case TYPE_IDENT:
				case VARIABLE_IDENT:
				case ENUMERATION_IDENT:
				case ATTRIBUTE_IDENT:
				case ENTITY_ATTR_IDENT:
				case TYPE_ATTR_IDENT:
				case ENTITY_VAR_IDENT:
				case TYPE_VAR_IDENT:
				case ENTITY_PARAM_IDENT:
				case TYPE_PARAM_IDENT:
				case LPAREN:
				case PLUS:
				case MINUS:
				case LBRACK:
				case IDENT:
				case LITERAL_const_e:
				case LITERAL_pi:
				case LITERAL_self:
				case QUESTION:
				case STAR:
				case LITERAL_abs:
				case LITERAL_acos:
				case LITERAL_asin:
				case LITERAL_atan:
				case LITERAL_blength:
				case LITERAL_cos:
				case LITERAL_exists:
				case LITERAL_exp:
				case LITERAL_format:
				case LITERAL_hibound:
				case LITERAL_hiindex:
				case LITERAL_length:
				case LITERAL_lobound:
				case LITERAL_loindex:
				case LITERAL_log:
				case LOG2:
				case LOG10:
				case LITERAL_nvl:
				case LITERAL_odd:
				case LITERAL_rolesof:
				case LITERAL_sin:
				case LITERAL_sizeof:
				case LITERAL_sqrt:
				case LITERAL_tan:
				case LITERAL_typeof:
				case LITERAL_usedin:
				case LITERAL_value:
				case LITERAL_value_in:
				case LITERAL_value_unique:
				case LCURLY:
				case INT:
				case STRING:
				case LITERAL_false:
				case LITERAL_true:
				case LITERAL_unknown:
				case LITERAL_query:
				case LITERAL_not: {
					element();
					astFactory.addASTChild(currentAST, returnAST);
					{
						_loop35511: do {
							if (LA1Equals(ExpressParserTokenTypes.COMMA)) {
								match(ExpressParserTokenTypes.COMMA);
								element();
								astFactory.addASTChild(currentAST, returnAST);
							} else {
								break _loop35511;
							}

						} while (true);
					}
					break;
				}
				case RBRACK: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			match(ExpressParserTokenTypes.RBRACK);
			aggregate_initializer_AST = parseAST(currentAST, ExpressParserTokenTypes.AGGREGATE_INITIALIZER);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_3);
		}
		returnAST = aggregate_initializer_AST;
	}

	public final void element() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST element_AST = null;

		try {
			expression();
			astFactory.addASTChild(currentAST, returnAST);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case COLON: {
					match(ExpressParserTokenTypes.COLON);
					repetition();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case COMMA:
				case RBRACK: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			element_AST = parseAST(currentAST, ExpressParserTokenTypes.ELEMENT);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_4);
		}
		returnAST = element_AST;
	}

	public final void aggregate_source() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST aggregate_source_AST = null;

		try {
			simple_expression();
			astFactory.addASTChild(currentAST, returnAST);
			aggregate_source_AST = parseAST(currentAST, ExpressParserTokenTypes.AGGREGATE_SOURCE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_5);
		}
		returnAST = aggregate_source_AST;
	}

	public final void simple_expression() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST simple_expression_AST = null;

		try {
			term();
			astFactory.addASTChild(currentAST, returnAST);
			{
				_loop35828: do {
					if (((LA(1) >= ExpressParserTokenTypes.PLUS.getIndex() && LA(1) <= ExpressParserTokenTypes.LITERAL_xor.getIndex()))) {
						add_like_op();
						astFactory.addASTChild(currentAST, returnAST);
						term();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35828;
					}

				} while (true);
			}
			simple_expression_AST = parseAST(currentAST, ExpressParserTokenTypes.SIMPLE_EXPRESSION);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_6);
		}
		returnAST = simple_expression_AST;
	}

	public final void aggregate_type() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST aggregate_type_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_aggregate);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case COLON: {
					match(ExpressParserTokenTypes.COLON);
					type_label();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case LITERAL_of: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			match(ExpressParserTokenTypes.LITERAL_of);
			parameter_type();
			astFactory.addASTChild(currentAST, returnAST);
			aggregate_type_AST = parseAST(currentAST, ExpressParserTokenTypes.AGGREGATE_TYPE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_7);
		}
		returnAST = aggregate_type_AST;
	}

	public final void type_label() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST type_label_AST = null;

		try {
			AST tmp15_AST = null;
			tmp15_AST = astFactory.create(LT(1));
			astFactory.addASTChild(currentAST, tmp15_AST);
			match(ExpressParserTokenTypes.IDENT);
			type_label_AST = parseAST(currentAST, ExpressParserTokenTypes.TYPE_LABEL);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_8);
		}
		returnAST = type_label_AST;
	}

	public final void parameter_type() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST parameter_type_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case LITERAL_aggregate:
			case LITERAL_array:
			case LITERAL_bag:
			case LITERAL_set:
			case LITERAL_list:
			case LITERAL_generic:
			case LITERAL_generic_entity: {
				generalized_types();
				astFactory.addASTChild(currentAST, returnAST);
				parameter_type_AST = parseAST(currentAST, ExpressParserTokenTypes.PARAMETER_TYPE);
				break;
			}
			case ENTITY_IDENT:
			case TYPE_IDENT:
			case ENTITY_ATTR_IDENT:
			case TYPE_ATTR_IDENT:
			case ENTITY_VAR_IDENT:
			case TYPE_VAR_IDENT:
			case ENTITY_PARAM_IDENT:
			case TYPE_PARAM_IDENT:
			case IDENT: {
				named_types();
				astFactory.addASTChild(currentAST, returnAST);
				parameter_type_AST = parseAST(currentAST, ExpressParserTokenTypes.PARAMETER_TYPE);
				break;
			}
			case LITERAL_binary:
			case LITERAL_boolean:
			case LITERAL_integer:
			case LITERAL_logical:
			case LITERAL_number:
			case LITERAL_real:
			case LITERAL_string: {
				simple_types();
				astFactory.addASTChild(currentAST, returnAST);
				parameter_type_AST = parseAST(currentAST, ExpressParserTokenTypes.PARAMETER_TYPE);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_7);
		}
		returnAST = parameter_type_AST;
	}

	public final void aggregation_types() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST aggregation_types_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case LITERAL_array: {
				array_type();
				astFactory.addASTChild(currentAST, returnAST);
				aggregation_types_AST = parseAST(currentAST, ExpressParserTokenTypes.AGGREGATION_TYPES);
				break;
			}
			case LITERAL_bag: {
				bag_type();
				astFactory.addASTChild(currentAST, returnAST);
				aggregation_types_AST = parseAST(currentAST, ExpressParserTokenTypes.AGGREGATION_TYPES);
				break;
			}
			case LITERAL_list: {
				list_type();
				astFactory.addASTChild(currentAST, returnAST);
				aggregation_types_AST = parseAST(currentAST, ExpressParserTokenTypes.AGGREGATION_TYPES);
				break;
			}
			case LITERAL_set: {
				set_type();
				astFactory.addASTChild(currentAST, returnAST);
				aggregation_types_AST = parseAST(currentAST, ExpressParserTokenTypes.AGGREGATION_TYPES);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_9);
		}
		returnAST = aggregation_types_AST;
	}

	public final void array_type() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST array_type_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_array);
			bound_spec();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.LITERAL_of);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_optional: {
					match(ExpressParserTokenTypes.LITERAL_optional);
					break;
				}
				case ENTITY_IDENT:
				case TYPE_IDENT:
				case ENTITY_ATTR_IDENT:
				case TYPE_ATTR_IDENT:
				case ENTITY_VAR_IDENT:
				case TYPE_VAR_IDENT:
				case ENTITY_PARAM_IDENT:
				case TYPE_PARAM_IDENT:
				case LITERAL_aggregate:
				case IDENT:
				case LITERAL_array:
				case LITERAL_unique:
				case LITERAL_bag:
				case LITERAL_binary:
				case LITERAL_boolean:
				case LITERAL_set:
				case LITERAL_list:
				case LITERAL_generic:
				case LITERAL_generic_entity:
				case LITERAL_integer:
				case LITERAL_logical:
				case LITERAL_number:
				case LITERAL_real:
				case LITERAL_string: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_unique: {
					match(ExpressParserTokenTypes.LITERAL_unique);
					break;
				}
				case ENTITY_IDENT:
				case TYPE_IDENT:
				case ENTITY_ATTR_IDENT:
				case TYPE_ATTR_IDENT:
				case ENTITY_VAR_IDENT:
				case TYPE_VAR_IDENT:
				case ENTITY_PARAM_IDENT:
				case TYPE_PARAM_IDENT:
				case LITERAL_aggregate:
				case IDENT:
				case LITERAL_array:
				case LITERAL_bag:
				case LITERAL_binary:
				case LITERAL_boolean:
				case LITERAL_set:
				case LITERAL_list:
				case LITERAL_generic:
				case LITERAL_generic_entity:
				case LITERAL_integer:
				case LITERAL_logical:
				case LITERAL_number:
				case LITERAL_real:
				case LITERAL_string: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			base_type();
			astFactory.addASTChild(currentAST, returnAST);
			array_type_AST = parseAST(currentAST, ExpressParserTokenTypes.ARRAY_TYPE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_9);
		}
		returnAST = array_type_AST;
	}

	public final void bag_type() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST bag_type_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_bag);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LBRACK: {
					bound_spec();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case LITERAL_of: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			match(ExpressParserTokenTypes.LITERAL_of);
			base_type();
			astFactory.addASTChild(currentAST, returnAST);
			bag_type_AST = parseAST(currentAST, ExpressParserTokenTypes.BAG_TYPE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_9);
		}
		returnAST = bag_type_AST;
	}

	public final void list_type() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST list_type_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_list);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LBRACK: {
					bound_spec();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case LITERAL_of: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			match(ExpressParserTokenTypes.LITERAL_of);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_unique: {
					AST tmp24_AST = null;
					tmp24_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp24_AST);
					match(ExpressParserTokenTypes.LITERAL_unique);
					break;
				}
				case ENTITY_IDENT:
				case TYPE_IDENT:
				case ENTITY_ATTR_IDENT:
				case TYPE_ATTR_IDENT:
				case ENTITY_VAR_IDENT:
				case TYPE_VAR_IDENT:
				case ENTITY_PARAM_IDENT:
				case TYPE_PARAM_IDENT:
				case LITERAL_aggregate:
				case IDENT:
				case LITERAL_array:
				case LITERAL_bag:
				case LITERAL_binary:
				case LITERAL_boolean:
				case LITERAL_set:
				case LITERAL_list:
				case LITERAL_generic:
				case LITERAL_generic_entity:
				case LITERAL_integer:
				case LITERAL_logical:
				case LITERAL_number:
				case LITERAL_real:
				case LITERAL_string: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			base_type();
			astFactory.addASTChild(currentAST, returnAST);
			list_type_AST = parseAST(currentAST, ExpressParserTokenTypes.LIST_TYPE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_9);
		}
		returnAST = list_type_AST;
	}

	public final void set_type() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST set_type_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_set);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LBRACK: {
					bound_spec();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case LITERAL_of: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			match(ExpressParserTokenTypes.LITERAL_of);
			base_type();
			astFactory.addASTChild(currentAST, returnAST);
			set_type_AST = parseAST(currentAST, ExpressParserTokenTypes.SET_TYPE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_9);
		}
		returnAST = set_type_AST;
	}

	public final void algorithm_head() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST algorithm_head_AST = null;

		try {
			{
				_loop35518: do {
					if ((_tokenSet_10.member(LA(1)))) {
						declaration();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35518;
					}

				} while (true);
			}
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_constant: {
					constant_decl();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case PROCEDURE_IDENT:
				case PARAMETER_IDENT:
				case VARIABLE_IDENT:
				case ENTITY_VAR_IDENT:
				case TYPE_VAR_IDENT:
				case ENTITY_PARAM_IDENT:
				case TYPE_PARAM_IDENT:
				case LITERAL_alias:
				case IDENT:
				case SEMI:
				case LITERAL_insert:
				case LITERAL_remove:
				case LITERAL_case:
				case LITERAL_begin:
				case LITERAL_escape:
				case LITERAL_if:
				case LITERAL_local:
				case LITERAL_end_procedure:
				case LITERAL_repeat:
				case LITERAL_return:
				case LITERAL_skip:
				case LITERAL_where: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_local: {
					local_decl();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case PROCEDURE_IDENT:
				case PARAMETER_IDENT:
				case VARIABLE_IDENT:
				case ENTITY_VAR_IDENT:
				case TYPE_VAR_IDENT:
				case ENTITY_PARAM_IDENT:
				case TYPE_PARAM_IDENT:
				case LITERAL_alias:
				case IDENT:
				case SEMI:
				case LITERAL_insert:
				case LITERAL_remove:
				case LITERAL_case:
				case LITERAL_begin:
				case LITERAL_escape:
				case LITERAL_if:
				case LITERAL_end_procedure:
				case LITERAL_repeat:
				case LITERAL_return:
				case LITERAL_skip:
				case LITERAL_where: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			algorithm_head_AST = parseAST(currentAST, ExpressParserTokenTypes.ALGORITHM_HEAD);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_11);
		}
		returnAST = algorithm_head_AST;
	}

	public final void declaration() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST declaration_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case LITERAL_entity: {
				entity_decl();
				astFactory.addASTChild(currentAST, returnAST);
				declaration_AST = parseAST(currentAST, ExpressParserTokenTypes.DECLARATION);
				break;
			}
			case LITERAL_subtype_constraint: {
				subtype_constraint_decl();
				astFactory.addASTChild(currentAST, returnAST);
				declaration_AST = parseAST(currentAST, ExpressParserTokenTypes.DECLARATION);
				break;
			}
			case LITERAL_function: {
				function_decl();
				astFactory.addASTChild(currentAST, returnAST);
				declaration_AST = parseAST(currentAST, ExpressParserTokenTypes.DECLARATION);
				break;
			}
			case LITERAL_procedure: {
				procedure_decl();
				astFactory.addASTChild(currentAST, returnAST);
				declaration_AST = parseAST(currentAST, ExpressParserTokenTypes.DECLARATION);
				break;
			}
			case LITERAL_type: {
				type_decl();
				astFactory.addASTChild(currentAST, returnAST);
				declaration_AST = parseAST(currentAST, ExpressParserTokenTypes.DECLARATION);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_12);
		}
		returnAST = declaration_AST;
	}

	public final void constant_decl() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST constant_decl_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_constant);
			constant_body();
			astFactory.addASTChild(currentAST, returnAST);
			{
				_loop35564: do {
					if (LA1Equals(ExpressParserTokenTypes.CONSTANT_IDENT) || LA1Equals(ExpressParserTokenTypes.IDENT)) {
						constant_body();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35564;
					}

				} while (true);
			}
			match(ExpressParserTokenTypes.LITERAL_end_constant);
			match(ExpressParserTokenTypes.SEMI);
			constant_decl_AST = parseAST(currentAST, ExpressParserTokenTypes.CONSTANT_DECL);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_13);
		}
		returnAST = constant_decl_AST;
	}

	public final void local_decl() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST local_decl_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_local);
			local_variable();
			astFactory.addASTChild(currentAST, returnAST);
			{
				_loop35721: do {
					if ((_tokenSet_14.member(LA(1)))) {
						local_variable();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35721;
					}

				} while (true);
			}
			match(ExpressParserTokenTypes.LITERAL_end_local);
			match(ExpressParserTokenTypes.SEMI);
			local_decl_AST = parseAST(currentAST, ExpressParserTokenTypes.LOCAL_DECL);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_11);
		}
		returnAST = local_decl_AST;
	}

	public final void alias_stmt() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST alias_stmt_AST = null;

		try {
			if (((LA1Equals(ExpressParserTokenTypes.LITERAL_alias))) && (isFirst)) {
				newScope1();
				AST tmp33_AST = null;
				tmp33_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp33_AST);
				match(ExpressParserTokenTypes.LITERAL_alias);
				variable_id();
				astFactory.addASTChild(currentAST, returnAST);
				AST tmp34_AST = null;
				tmp34_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp34_AST);
				match(ExpressParserTokenTypes.LITERAL_for);
				AST tmp35_AST = null;
				tmp35_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp35_AST);
				match(ExpressParserTokenTypes.IDENT);
				{
					_loop35523: do {
						if (LA1Equals(ExpressParserTokenTypes.LBRACK) || LA1Equals(ExpressParserTokenTypes.DOT) || LA1Equals(ExpressParserTokenTypes.BACKSLASH)) {
							qualifier();
							astFactory.addASTChild(currentAST, returnAST);
						} else {
							break _loop35523;
						}

					} while (true);
				}
				AST tmp36_AST = null;
				tmp36_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp36_AST);
				match(ExpressParserTokenTypes.SEMI);
				stmt();
				astFactory.addASTChild(currentAST, returnAST);
				{
					_loop35525: do {
						if ((_tokenSet_15.member(LA(1)))) {
							stmt();
							astFactory.addASTChild(currentAST, returnAST);
						} else {
							break _loop35525;
						}

					} while (true);
				}
				AST tmp37_AST = null;
				tmp37_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp37_AST);
				match(ExpressParserTokenTypes.LITERAL_end_alias);
				upScope();
				AST tmp38_AST = null;
				tmp38_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp38_AST);
				match(ExpressParserTokenTypes.SEMI);
				alias_stmt_AST = (AST) currentAST.root;
			} else if ((LA1Equals(ExpressParserTokenTypes.LITERAL_alias))) {
				match(ExpressParserTokenTypes.LITERAL_alias);
				variable_id();
				astFactory.addASTChild(currentAST, returnAST);
				match(ExpressParserTokenTypes.LITERAL_for);
				general_ref();
				astFactory.addASTChild(currentAST, returnAST);
				{
					_loop35527: do {
						if ((LA1Equals(ExpressParserTokenTypes.LBRACK) || LA1Equals(ExpressParserTokenTypes.DOT) || LA1Equals(ExpressParserTokenTypes.BACKSLASH))) {
							qualifier();
							astFactory.addASTChild(currentAST, returnAST);
						} else {
							break _loop35527;
						}

					} while (true);
				}
				match(ExpressParserTokenTypes.SEMI);
				stmt();
				astFactory.addASTChild(currentAST, returnAST);
				{
					_loop35529: do {
						if ((_tokenSet_15.member(LA(1)))) {
							stmt();
							astFactory.addASTChild(currentAST, returnAST);
						} else {
							break _loop35529;
						}

					} while (true);
				}
				match(ExpressParserTokenTypes.LITERAL_end_alias);
				upScope();
				match(ExpressParserTokenTypes.SEMI);
				alias_stmt_AST = parseAST(currentAST, ExpressParserTokenTypes.ALIAS_STMT);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_16);
		}
		returnAST = alias_stmt_AST;
	}

	public final void variable_id() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST variable_id_AST = null;
		Token id = null;
		AST id_AST = null;
		Token nid = null;
		AST nid_AST = null;
		Token nid2 = null;
		AST nid2_AST = null;
		Token nid3 = null;
		AST nid3_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case VARIABLE_IDENT: {
				nid = LT(1);
				nid_AST = astFactory.create(nid);
				astFactory.addASTChild(currentAST, nid_AST);
				match(ExpressParserTokenTypes.VARIABLE_IDENT);
				nid_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				variable_id_AST = parseAST(currentAST, ExpressParserTokenTypes.VARIABLE_ID);
				break;
			}
			case ENTITY_VAR_IDENT: {
				nid2 = LT(1);
				nid2_AST = astFactory.create(nid2);
				astFactory.addASTChild(currentAST, nid2_AST);
				match(ExpressParserTokenTypes.ENTITY_VAR_IDENT);
				nid2_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				variable_id_AST = parseAST(currentAST, ExpressParserTokenTypes.VARIABLE_ID);
				break;
			}
			case TYPE_VAR_IDENT: {
				nid3 = LT(1);
				nid3_AST = astFactory.create(nid3);
				astFactory.addASTChild(currentAST, nid3_AST);
				match(ExpressParserTokenTypes.TYPE_VAR_IDENT);
				nid3_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				variable_id_AST = parseAST(currentAST, ExpressParserTokenTypes.VARIABLE_ID);
				break;
			}
			default:
				if (((LA1Equals(ExpressParserTokenTypes.IDENT))) && (isFirst)) {
					id = LT(1);
					id_AST = astFactory.create(id);
					astFactory.addASTChild(currentAST, id_AST);
					match(ExpressParserTokenTypes.IDENT);
					addId(id.getText(), ExpressParserTokenTypes.VARIABLE_IDENT);
					variable_id_AST = (AST) currentAST.root;
				} else {
					throw new NoViableAltException(LT(1), getFilename());
				}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_17);
		}
		returnAST = variable_id_AST;
	}

	public final void qualifier() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST qualifier_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case DOT: {
				attribute_qualifier();
				astFactory.addASTChild(currentAST, returnAST);
				qualifier_AST = parseAST(currentAST, ExpressParserTokenTypes.QUALIFIER);
				break;
			}
			case BACKSLASH: {
				group_qualifier();
				astFactory.addASTChild(currentAST, returnAST);
				qualifier_AST = parseAST(currentAST, ExpressParserTokenTypes.QUALIFIER);
				break;
			}
			case LBRACK: {
				index_qualifier();
				astFactory.addASTChild(currentAST, returnAST);
				qualifier_AST = parseAST(currentAST, ExpressParserTokenTypes.QUALIFIER);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_18);
		}
		returnAST = qualifier_AST;
	}

	public final void stmt() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST stmt_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case LITERAL_alias: {
				alias_stmt();
				astFactory.addASTChild(currentAST, returnAST);
				stmt_AST = parseAST(currentAST, ExpressParserTokenTypes.STMT);
				break;
			}
			case PARAMETER_IDENT:
			case VARIABLE_IDENT:
			case ENTITY_VAR_IDENT:
			case TYPE_VAR_IDENT:
			case ENTITY_PARAM_IDENT:
			case TYPE_PARAM_IDENT: {
				assignment_stmt();
				astFactory.addASTChild(currentAST, returnAST);
				stmt_AST = parseAST(currentAST, ExpressParserTokenTypes.STMT);
				break;
			}
			case LITERAL_case: {
				case_stmt();
				astFactory.addASTChild(currentAST, returnAST);
				stmt_AST = parseAST(currentAST, ExpressParserTokenTypes.STMT);
				break;
			}
			case LITERAL_begin: {
				compound_stmt();
				astFactory.addASTChild(currentAST, returnAST);
				stmt_AST = parseAST(currentAST, ExpressParserTokenTypes.STMT);
				break;
			}
			case LITERAL_escape: {
				escape_stmt();
				astFactory.addASTChild(currentAST, returnAST);
				stmt_AST = parseAST(currentAST, ExpressParserTokenTypes.STMT);
				break;
			}
			case LITERAL_if: {
				if_stmt();
				astFactory.addASTChild(currentAST, returnAST);
				stmt_AST = parseAST(currentAST, ExpressParserTokenTypes.STMT);
				break;
			}
			case SEMI: {
				null_stmt();
				astFactory.addASTChild(currentAST, returnAST);
				stmt_AST = parseAST(currentAST, ExpressParserTokenTypes.STMT);
				break;
			}
			case PROCEDURE_IDENT:
			case LITERAL_insert:
			case LITERAL_remove: {
				procedure_call_stmt();
				astFactory.addASTChild(currentAST, returnAST);
				stmt_AST = parseAST(currentAST, ExpressParserTokenTypes.STMT);
				break;
			}
			case LITERAL_repeat: {
				repeat_stmt();
				astFactory.addASTChild(currentAST, returnAST);
				stmt_AST = parseAST(currentAST, ExpressParserTokenTypes.STMT);
				break;
			}
			case LITERAL_return: {
				return_stmt();
				astFactory.addASTChild(currentAST, returnAST);
				stmt_AST = parseAST(currentAST, ExpressParserTokenTypes.STMT);
				break;
			}
			case LITERAL_skip: {
				skip_stmt();
				astFactory.addASTChild(currentAST, returnAST);
				stmt_AST = parseAST(currentAST, ExpressParserTokenTypes.STMT);
				break;
			}
			default:
				if (((LA1Equals(ExpressParserTokenTypes.IDENT))) && (isFirst)) {
					AST tmp44_AST = null;
					tmp44_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp44_AST);
					match(ExpressParserTokenTypes.IDENT);
					{
						switch (ExpressParserTokenTypes.getToken(LA(1))) {
						case LBRACK:
						case COLEQ:
						case DOT:
						case BACKSLASH: {
							{
								_loop35851: do {
									if ((LA1Equals(ExpressParserTokenTypes.LBRACK) || LA1Equals(ExpressParserTokenTypes.DOT) || LA1Equals(ExpressParserTokenTypes.BACKSLASH))) {
										qualifier();
										astFactory.addASTChild(currentAST, returnAST);
									} else {
										break _loop35851;
									}

								} while (true);
							}
							AST tmp45_AST = null;
							tmp45_AST = astFactory.create(LT(1));
							astFactory.addASTChild(currentAST, tmp45_AST);
							match(ExpressParserTokenTypes.COLEQ);
							expression();
							astFactory.addASTChild(currentAST, returnAST);
							break;
						}
						case LPAREN:
						case SEMI: {
							{
								switch (ExpressParserTokenTypes.getToken(LA(1))) {
								case LPAREN: {
									actual_parameter_list();
									astFactory.addASTChild(currentAST, returnAST);
									break;
								}
								case SEMI: {
									break;
								}
								default: {
									throw new NoViableAltException(LT(1), getFilename());
								}
								}
							}
							break;
						}
						default: {
							throw new NoViableAltException(LT(1), getFilename());
						}
						}
					}
					AST tmp46_AST = null;
					tmp46_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp46_AST);
					match(ExpressParserTokenTypes.SEMI);
					stmt_AST = (AST) currentAST.root;
				} else {
					throw new NoViableAltException(LT(1), getFilename());
				}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_16);
		}
		returnAST = stmt_AST;
	}

	public final void general_ref() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST general_ref_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case PARAMETER_IDENT:
			case ENTITY_PARAM_IDENT:
			case TYPE_PARAM_IDENT: {
				parameter_ref();
				astFactory.addASTChild(currentAST, returnAST);
				general_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.GENERAL_REF);
				break;
			}
			case VARIABLE_IDENT:
			case ENTITY_VAR_IDENT:
			case TYPE_VAR_IDENT: {
				variable_ref();
				astFactory.addASTChild(currentAST, returnAST);
				general_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.GENERAL_REF);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_18);
		}
		returnAST = general_ref_AST;
	}

	public final void bound_spec() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST bound_spec_AST = null;

		try {
			match(ExpressParserTokenTypes.LBRACK);
			bound_1();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.COLON);
			bound_2();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.RBRACK);
			bound_spec_AST = parseAST(currentAST, ExpressParserTokenTypes.BOUND_SPEC);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_19);
		}
		returnAST = bound_spec_AST;
	}

	public final void base_type() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST base_type_AST = null;

		try {
			if ((_tokenSet_20.member(LA(1)))) {
				concrete_types();
				astFactory.addASTChild(currentAST, returnAST);
				base_type_AST = parseAST(currentAST, ExpressParserTokenTypes.BASE_TYPE);
			} else if ((_tokenSet_21.member(LA(1)))) {
				generalized_types();
				astFactory.addASTChild(currentAST, returnAST);
				base_type_AST = parseAST(currentAST, ExpressParserTokenTypes.BASE_TYPE);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_9);
		}
		returnAST = base_type_AST;
	}

	public final void assignment_stmt() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST assignment_stmt_AST = null;

		try {
			{
				general_ref();
				astFactory.addASTChild(currentAST, returnAST);
				{
					_loop35536: do {
						if ((LA1Equals(ExpressParserTokenTypes.LBRACK) || LA1Equals(ExpressParserTokenTypes.DOT) || LA1Equals(ExpressParserTokenTypes.BACKSLASH))) {
							qualifier();
							astFactory.addASTChild(currentAST, returnAST);
						} else {
							break _loop35536;
						}

					} while (true);
				}
			}
			match(ExpressParserTokenTypes.COLEQ);
			expression();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.SEMI);
			assignment_stmt_AST = parseAST(currentAST, ExpressParserTokenTypes.ASSIGNMENT_STMT);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_16);
		}
		returnAST = assignment_stmt_AST;
	}

	public final void expression() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST expression_AST = null;

		try {
			simple_expression();
			astFactory.addASTChild(currentAST, returnAST);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LT:
				case LE:
				case GT:
				case GE:
				case LTGT:
				case ASSIGN:
				case COLLTGT:
				case COLEQCOL:
				case LITERAL_in:
				case LITERAL_like: {
					rel_op_extended();
					astFactory.addASTChild(currentAST, returnAST);
					simple_expression();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case COMMA:
				case RPAREN:
				case RBRACK:
				case COLON:
				case LITERAL_of:
				case SEMI:
				case LITERAL_then:
				case LITERAL_until: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			expression_AST = parseAST(currentAST, ExpressParserTokenTypes.EXPRESSION);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_22);
		}
		returnAST = expression_AST;
	}

	public final void concrete_types() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST concrete_types_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case LITERAL_array:
			case LITERAL_bag:
			case LITERAL_set:
			case LITERAL_list: {
				aggregation_types();
				astFactory.addASTChild(currentAST, returnAST);
				concrete_types_AST = parseAST(currentAST, ExpressParserTokenTypes.CONCRETE_TYPES);
				break;
			}
			case LITERAL_binary:
			case LITERAL_boolean:
			case LITERAL_integer:
			case LITERAL_logical:
			case LITERAL_number:
			case LITERAL_real:
			case LITERAL_string: {
				simple_types();
				astFactory.addASTChild(currentAST, returnAST);
				concrete_types_AST = parseAST(currentAST, ExpressParserTokenTypes.CONCRETE_TYPES);
				break;
			}
			case ENTITY_IDENT:
			case TYPE_IDENT:
			case ENTITY_ATTR_IDENT:
			case TYPE_ATTR_IDENT:
			case ENTITY_VAR_IDENT:
			case TYPE_VAR_IDENT:
			case ENTITY_PARAM_IDENT:
			case TYPE_PARAM_IDENT:
			case IDENT: {
				named_types();
				astFactory.addASTChild(currentAST, returnAST);
				concrete_types_AST = parseAST(currentAST, ExpressParserTokenTypes.CONCRETE_TYPES);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_9);
		}
		returnAST = concrete_types_AST;
	}

	public final void generalized_types() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST generalized_types_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case LITERAL_aggregate: {
				aggregate_type();
				astFactory.addASTChild(currentAST, returnAST);
				generalized_types_AST = parseAST(currentAST, ExpressParserTokenTypes.GENERALIZED_TYPES);
				break;
			}
			case LITERAL_array:
			case LITERAL_bag:
			case LITERAL_set:
			case LITERAL_list: {
				general_aggregation_types();
				astFactory.addASTChild(currentAST, returnAST);
				generalized_types_AST = parseAST(currentAST, ExpressParserTokenTypes.GENERALIZED_TYPES);
				break;
			}
			case LITERAL_generic: {
				generic_type();
				astFactory.addASTChild(currentAST, returnAST);
				generalized_types_AST = parseAST(currentAST, ExpressParserTokenTypes.GENERALIZED_TYPES);
				break;
			}
			case LITERAL_generic_entity: {
				generic_entity_type();
				astFactory.addASTChild(currentAST, returnAST);
				generalized_types_AST = parseAST(currentAST, ExpressParserTokenTypes.GENERALIZED_TYPES);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_7);
		}
		returnAST = generalized_types_AST;
	}

	public final void simple_types() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST simple_types_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case LITERAL_binary: {
				binary_type();
				astFactory.addASTChild(currentAST, returnAST);
				simple_types_AST = parseAST(currentAST, ExpressParserTokenTypes.SIMPLE_TYPES);
				break;
			}
			case LITERAL_boolean: {
				boolean_type();
				astFactory.addASTChild(currentAST, returnAST);
				simple_types_AST = parseAST(currentAST, ExpressParserTokenTypes.SIMPLE_TYPES);
				break;
			}
			case LITERAL_integer: {
				integer_type();
				astFactory.addASTChild(currentAST, returnAST);
				simple_types_AST = parseAST(currentAST, ExpressParserTokenTypes.SIMPLE_TYPES);
				break;
			}
			case LITERAL_logical: {
				logical_type();
				astFactory.addASTChild(currentAST, returnAST);
				simple_types_AST = parseAST(currentAST, ExpressParserTokenTypes.SIMPLE_TYPES);
				break;
			}
			case LITERAL_number: {
				number_type();
				astFactory.addASTChild(currentAST, returnAST);
				simple_types_AST = parseAST(currentAST, ExpressParserTokenTypes.SIMPLE_TYPES);
				break;
			}
			case LITERAL_real: {
				real_type();
				astFactory.addASTChild(currentAST, returnAST);
				simple_types_AST = parseAST(currentAST, ExpressParserTokenTypes.SIMPLE_TYPES);
				break;
			}
			case LITERAL_string: {
				string_type();
				astFactory.addASTChild(currentAST, returnAST);
				simple_types_AST = parseAST(currentAST, ExpressParserTokenTypes.SIMPLE_TYPES);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_7);
		}
		returnAST = simple_types_AST;
	}

	public final void named_types() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST named_types_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case ENTITY_IDENT:
			case ENTITY_ATTR_IDENT:
			case ENTITY_VAR_IDENT:
			case ENTITY_PARAM_IDENT: {
				entity_ref();
				astFactory.addASTChild(currentAST, returnAST);
				named_types_AST = parseAST(currentAST, ExpressParserTokenTypes.NAMED_TYPES);
				break;
			}
			case TYPE_IDENT:
			case TYPE_ATTR_IDENT:
			case TYPE_VAR_IDENT:
			case TYPE_PARAM_IDENT: {
				type_ref();
				astFactory.addASTChild(currentAST, returnAST);
				named_types_AST = parseAST(currentAST, ExpressParserTokenTypes.NAMED_TYPES);
				break;
			}
			default:
				if (((LA1Equals(ExpressParserTokenTypes.IDENT))) && (isFirst)) {
					AST tmp52_AST = null;
					tmp52_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp52_AST);
					match(ExpressParserTokenTypes.IDENT);
					named_types_AST = (AST) currentAST.root;
				} else {
					throw new NoViableAltException(LT(1), getFilename());
				}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_23);
		}
		returnAST = named_types_AST;
	}

	public final void binary_type() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST binary_type_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_binary);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LPAREN: {
					width_spec();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case RPAREN:
				case SEMI:
				case COLEQ: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			binary_type_AST = parseAST(currentAST, ExpressParserTokenTypes.BINARY_TYPE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_7);
		}
		returnAST = binary_type_AST;
	}

	public final void width_spec() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST width_spec_AST = null;

		try {
			match(ExpressParserTokenTypes.LPAREN);
			width();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.RPAREN);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_fixed: {
					AST tmp56_AST = null;
					tmp56_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp56_AST);
					match(ExpressParserTokenTypes.LITERAL_fixed);
					break;
				}
				case RPAREN:
				case SEMI:
				case COLEQ: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			width_spec_AST = parseAST(currentAST, ExpressParserTokenTypes.WIDTH_SPEC);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_7);
		}
		returnAST = width_spec_AST;
	}

	public final void boolean_type() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST boolean_type_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_boolean);
			boolean_type_AST = parseAST(currentAST, ExpressParserTokenTypes.BOOLEAN_TYPE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_7);
		}
		returnAST = boolean_type_AST;
	}

	public final void bound_1() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST bound_1_AST = null;

		try {
			numeric_expression();
			astFactory.addASTChild(currentAST, returnAST);
			bound_1_AST = parseAST(currentAST, ExpressParserTokenTypes.BOUND_1);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_24);
		}
		returnAST = bound_1_AST;
	}

	public final void numeric_expression() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST numeric_expression_AST = null;

		try {
			simple_expression();
			astFactory.addASTChild(currentAST, returnAST);
			numeric_expression_AST = parseAST(currentAST, ExpressParserTokenTypes.NUMERIC_EXPRESSION);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_25);
		}
		returnAST = numeric_expression_AST;
	}

	public final void bound_2() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST bound_2_AST = null;

		try {
			numeric_expression();
			astFactory.addASTChild(currentAST, returnAST);
			bound_2_AST = parseAST(currentAST, ExpressParserTokenTypes.BOUND_2);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_26);
		}
		returnAST = bound_2_AST;
	}

	public final void built_in_constant() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST built_in_constant_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case LITERAL_const_e: {
				AST tmp58_AST = null;
				tmp58_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp58_AST);
				match(ExpressParserTokenTypes.LITERAL_const_e);
				built_in_constant_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_CONSTANT);
				break;
			}
			case LITERAL_pi: {
				AST tmp59_AST = null;
				tmp59_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp59_AST);
				match(ExpressParserTokenTypes.LITERAL_pi);
				built_in_constant_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_CONSTANT);
				break;
			}
			case LITERAL_self: {
				AST tmp60_AST = null;
				tmp60_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp60_AST);
				match(ExpressParserTokenTypes.LITERAL_self);
				built_in_constant_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_CONSTANT);
				break;
			}
			case QUESTION: {
				AST tmp61_AST = null;
				tmp61_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp61_AST);
				match(ExpressParserTokenTypes.QUESTION);
				built_in_constant_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_CONSTANT);
				break;
			}
			case STAR: {
				AST tmp62_AST = null;
				tmp62_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp62_AST);
				match(ExpressParserTokenTypes.STAR);
				built_in_constant_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_CONSTANT);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_0);
		}
		returnAST = built_in_constant_AST;
	}

	public final void built_in_function() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST built_in_function_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case LITERAL_abs: {
				AST tmp63_AST = null;
				tmp63_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp63_AST);
				match(ExpressParserTokenTypes.LITERAL_abs);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_acos: {
				AST tmp64_AST = null;
				tmp64_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp64_AST);
				match(ExpressParserTokenTypes.LITERAL_acos);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_asin: {
				AST tmp65_AST = null;
				tmp65_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp65_AST);
				match(ExpressParserTokenTypes.LITERAL_asin);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_atan: {
				AST tmp66_AST = null;
				tmp66_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp66_AST);
				match(ExpressParserTokenTypes.LITERAL_atan);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_blength: {
				AST tmp67_AST = null;
				tmp67_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp67_AST);
				match(ExpressParserTokenTypes.LITERAL_blength);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_cos: {
				AST tmp68_AST = null;
				tmp68_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp68_AST);
				match(ExpressParserTokenTypes.LITERAL_cos);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_exists: {
				AST tmp69_AST = null;
				tmp69_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp69_AST);
				match(ExpressParserTokenTypes.LITERAL_exists);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_exp: {
				AST tmp70_AST = null;
				tmp70_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp70_AST);
				match(ExpressParserTokenTypes.LITERAL_exp);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_format: {
				AST tmp71_AST = null;
				tmp71_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp71_AST);
				match(ExpressParserTokenTypes.LITERAL_format);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_hibound: {
				AST tmp72_AST = null;
				tmp72_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp72_AST);
				match(ExpressParserTokenTypes.LITERAL_hibound);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_hiindex: {
				AST tmp73_AST = null;
				tmp73_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp73_AST);
				match(ExpressParserTokenTypes.LITERAL_hiindex);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_length: {
				AST tmp74_AST = null;
				tmp74_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp74_AST);
				match(ExpressParserTokenTypes.LITERAL_length);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_lobound: {
				AST tmp75_AST = null;
				tmp75_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp75_AST);
				match(ExpressParserTokenTypes.LITERAL_lobound);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_loindex: {
				AST tmp76_AST = null;
				tmp76_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp76_AST);
				match(ExpressParserTokenTypes.LITERAL_loindex);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_log: {
				AST tmp77_AST = null;
				tmp77_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp77_AST);
				match(ExpressParserTokenTypes.LITERAL_log);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LOG2: {
				AST tmp78_AST = null;
				tmp78_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp78_AST);
				match(ExpressParserTokenTypes.LOG2);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LOG10: {
				AST tmp79_AST = null;
				tmp79_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp79_AST);
				match(ExpressParserTokenTypes.LOG10);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_nvl: {
				AST tmp80_AST = null;
				tmp80_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp80_AST);
				match(ExpressParserTokenTypes.LITERAL_nvl);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_odd: {
				AST tmp81_AST = null;
				tmp81_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp81_AST);
				match(ExpressParserTokenTypes.LITERAL_odd);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_rolesof: {
				AST tmp82_AST = null;
				tmp82_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp82_AST);
				match(ExpressParserTokenTypes.LITERAL_rolesof);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_sin: {
				AST tmp83_AST = null;
				tmp83_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp83_AST);
				match(ExpressParserTokenTypes.LITERAL_sin);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_sizeof: {
				AST tmp84_AST = null;
				tmp84_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp84_AST);
				match(ExpressParserTokenTypes.LITERAL_sizeof);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_sqrt: {
				AST tmp85_AST = null;
				tmp85_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp85_AST);
				match(ExpressParserTokenTypes.LITERAL_sqrt);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_tan: {
				AST tmp86_AST = null;
				tmp86_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp86_AST);
				match(ExpressParserTokenTypes.LITERAL_tan);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_typeof: {
				AST tmp87_AST = null;
				tmp87_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp87_AST);
				match(ExpressParserTokenTypes.LITERAL_typeof);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_usedin: {
				AST tmp88_AST = null;
				tmp88_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp88_AST);
				match(ExpressParserTokenTypes.LITERAL_usedin);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_value: {
				AST tmp89_AST = null;
				tmp89_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp89_AST);
				match(ExpressParserTokenTypes.LITERAL_value);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_value_in: {
				AST tmp90_AST = null;
				tmp90_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp90_AST);
				match(ExpressParserTokenTypes.LITERAL_value_in);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			case LITERAL_value_unique: {
				AST tmp91_AST = null;
				tmp91_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp91_AST);
				match(ExpressParserTokenTypes.LITERAL_value_unique);
				built_in_function_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_FUNCTION);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_27);
		}
		returnAST = built_in_function_AST;
	}

	public final void built_in_procedure() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST built_in_procedure_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case LITERAL_insert: {
				AST tmp92_AST = null;
				tmp92_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp92_AST);
				match(ExpressParserTokenTypes.LITERAL_insert);
				built_in_procedure_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_PROCEDURE);
				break;
			}
			case LITERAL_remove: {
				AST tmp93_AST = null;
				tmp93_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp93_AST);
				match(ExpressParserTokenTypes.LITERAL_remove);
				built_in_procedure_AST = parseAST(currentAST, ExpressParserTokenTypes.BUILT_IN_PROCEDURE);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_28);
		}
		returnAST = built_in_procedure_AST;
	}

	public final void case_action() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST case_action_AST = null;

		try {
			case_label();
			astFactory.addASTChild(currentAST, returnAST);
			{
				_loop35552: do {
					if ((LA1Equals(ExpressParserTokenTypes.COMMA))) {
						match(ExpressParserTokenTypes.COMMA);
						case_label();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35552;
					}

				} while (true);
			}
			match(ExpressParserTokenTypes.COLON);
			stmt();
			astFactory.addASTChild(currentAST, returnAST);
			case_action_AST = parseAST(currentAST, ExpressParserTokenTypes.CASE_ACTION);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_29);
		}
		returnAST = case_action_AST;
	}

	public final void case_label() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST case_label_AST = null;

		try {
			expression();
			astFactory.addASTChild(currentAST, returnAST);
			case_label_AST = parseAST(currentAST, ExpressParserTokenTypes.CASE_LABEL);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_30);
		}
		returnAST = case_label_AST;
	}

	public final void case_stmt() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST case_stmt_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_case);
			selector();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.LITERAL_of);
			{
				_loop35556: do {
					if ((_tokenSet_2.member(LA(1)))) {
						case_action();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35556;
					}

				} while (true);
			}
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_otherwise: {
					match(ExpressParserTokenTypes.LITERAL_otherwise);
					match(ExpressParserTokenTypes.COLON);
					stmt();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case LITERAL_end_case: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			match(ExpressParserTokenTypes.LITERAL_end_case);
			match(ExpressParserTokenTypes.SEMI);
			case_stmt_AST = parseAST(currentAST, ExpressParserTokenTypes.CASE_STMT);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_16);
		}
		returnAST = case_stmt_AST;
	}

	public final void selector() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST selector_AST = null;

		try {
			expression();
			astFactory.addASTChild(currentAST, returnAST);
			selector_AST = parseAST(currentAST, ExpressParserTokenTypes.SELECTOR);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_19);
		}
		returnAST = selector_AST;
	}

	public final void compound_stmt() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST compound_stmt_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_begin);
			stmt();
			astFactory.addASTChild(currentAST, returnAST);
			{
				_loop35560: do {
					if ((_tokenSet_15.member(LA(1)))) {
						stmt();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35560;
					}

				} while (true);
			}
			match(ExpressParserTokenTypes.LITERAL_end);
			match(ExpressParserTokenTypes.SEMI);
			compound_stmt_AST = parseAST(currentAST, ExpressParserTokenTypes.COMPOUND_STMT);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_16);
		}
		returnAST = compound_stmt_AST;
	}

	public final void constant_body() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST constant_body_AST = null;

		try {
			constant_id();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.COLON);
			base_type();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.COLEQ);
			expression();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.SEMI);
			constant_body_AST = parseAST(currentAST, ExpressParserTokenTypes.CONSTANT_BODY);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_31);
		}
		returnAST = constant_body_AST;
	}

	public final void constant_id() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST constant_id_AST = null;
		Token id = null;
		AST id_AST = null;
		Token nid = null;
		AST nid_AST = null;

		try {
			if (((LA1Equals(ExpressParserTokenTypes.IDENT))) && (isFirst)) {
				id = LT(1);
				id_AST = astFactory.create(id);
				astFactory.addASTChild(currentAST, id_AST);
				match(ExpressParserTokenTypes.IDENT);
				addId(id.getText(), ExpressParserTokenTypes.CONSTANT_IDENT);
				constant_id_AST = (AST) currentAST.root;
			} else if ((LA1Equals(ExpressParserTokenTypes.CONSTANT_IDENT))) {
				nid = LT(1);
				nid_AST = astFactory.create(nid);
				astFactory.addASTChild(currentAST, nid_AST);
				match(ExpressParserTokenTypes.CONSTANT_IDENT);
				nid_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				constant_id_AST = parseAST(currentAST, ExpressParserTokenTypes.CONSTANT_ID);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_32);
		}
		returnAST = constant_id_AST;
	}

	public final void constant_factor() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST constant_factor_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case LITERAL_const_e:
			case LITERAL_pi:
			case LITERAL_self:
			case QUESTION:
			case STAR: {
				built_in_constant();
				astFactory.addASTChild(currentAST, returnAST);
				constant_factor_AST = parseAST(currentAST, ExpressParserTokenTypes.CONSTANT_FACTOR);
				break;
			}
			case CONSTANT_IDENT: {
				constant_ref();
				astFactory.addASTChild(currentAST, returnAST);
				constant_factor_AST = parseAST(currentAST, ExpressParserTokenTypes.CONSTANT_FACTOR);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_0);
		}
		returnAST = constant_factor_AST;
	}

	public final void constant_ref() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST constant_ref_AST = null;
		Token nid = null;
		AST nid_AST = null;

		try {
			nid = LT(1);
			nid_AST = astFactory.create(nid);
			astFactory.addASTChild(currentAST, nid_AST);
			match(ExpressParserTokenTypes.CONSTANT_IDENT);
			nid_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
			constant_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.CONSTANT_REF);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_33);
		}
		returnAST = constant_ref_AST;
	}

	public final void entity_decl() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST entity_decl_AST = null;

		try {
			entity_head();
			astFactory.addASTChild(currentAST, returnAST);
			entity_body();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.LITERAL_end_entity);
			upScope();
			match(ExpressParserTokenTypes.SEMI);
			entity_decl_AST = parseAST(currentAST, ExpressParserTokenTypes.ENTITY_DECL);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_12);
		}
		returnAST = entity_decl_AST;
	}

	public final void subtype_constraint_decl() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST subtype_constraint_decl_AST = null;

		try {
			subtype_constraint_head();
			astFactory.addASTChild(currentAST, returnAST);
			subtype_constraint_body();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.LITERAL_end_subtype_constraint);
			match(ExpressParserTokenTypes.SEMI);
			subtype_constraint_decl_AST = parseAST(currentAST, ExpressParserTokenTypes.SUBTYPE_CONSTRAINT_DECL);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_12);
		}
		returnAST = subtype_constraint_decl_AST;
	}

	public final void function_decl() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST function_decl_AST = null;

		try {
			function_head();
			astFactory.addASTChild(currentAST, returnAST);
			{
				if ((_tokenSet_34.member(LA(1)))) {
					algorithm_head();
					astFactory.addASTChild(currentAST, returnAST);
				} else if ((_tokenSet_15.member(LA(1)))) {
				} else {
					throw new NoViableAltException(LT(1), getFilename());
				}

			}
			stmt();
			astFactory.addASTChild(currentAST, returnAST);
			{
				_loop35668: do {
					if ((_tokenSet_15.member(LA(1)))) {
						stmt();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35668;
					}

				} while (true);
			}
			match(ExpressParserTokenTypes.LITERAL_end_function);
			match(ExpressParserTokenTypes.SEMI);
			function_decl_AST = (AST) currentAST.root;
			upScope();
			function_decl_AST = makeAST(ExpressParserTokenTypes.FUNCTION_DECL, function_decl_AST);
			currentAST.root = function_decl_AST;
			currentAST.child = getChild(function_decl_AST);
			currentAST.advanceChildToEnd();
			function_decl_AST = (AST) currentAST.root;
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_12);
		}
		returnAST = function_decl_AST;
	}

	public final void procedure_decl() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST procedure_decl_AST = null;

		try {
			procedure_head();
			astFactory.addASTChild(currentAST, returnAST);
			{
				if ((_tokenSet_35.member(LA(1)))) {
					algorithm_head();
					astFactory.addASTChild(currentAST, returnAST);
				} else if ((_tokenSet_36.member(LA(1)))) {
				} else {
					throw new NoViableAltException(LT(1), getFilename());
				}

			}
			{
				_loop35751: do {
					if ((_tokenSet_15.member(LA(1)))) {
						stmt();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35751;
					}

				} while (true);
			}
			match(ExpressParserTokenTypes.LITERAL_end_procedure);
			match(ExpressParserTokenTypes.SEMI);
			procedure_decl_AST = (AST) currentAST.root;
			upScope();
			procedure_decl_AST = makeAST(ExpressParserTokenTypes.PROCEDURE_DECL, procedure_decl_AST);
			currentAST.root = procedure_decl_AST;
			currentAST.child = getChild(procedure_decl_AST);
			currentAST.advanceChildToEnd();
			procedure_decl_AST = (AST) currentAST.root;
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_12);
		}
		returnAST = procedure_decl_AST;
	}

	public final void type_decl() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST type_decl_AST = null;

		String id = null;
		EnumerationType eids = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_type);
			id = type_id();
			astFactory.addASTChild(currentAST, returnAST);
			newScope();
			match(ExpressParserTokenTypes.ASSIGN);
			eids = underlying_type();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.SEMI);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_where: {
					where_clause();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case LITERAL_end_type: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			match(ExpressParserTokenTypes.LITERAL_end_type);
			match(ExpressParserTokenTypes.SEMI);
			type_decl_AST = (AST) currentAST.root;
			upScope();
			if (eids != null) {
				eids.setTypeName(id);
				currentScope.addEnumerationType(eids);
			}
			type_decl_AST = makeAST(ExpressParserTokenTypes.TYPE_DECL, type_decl_AST);
			currentAST.root = type_decl_AST;
			currentAST.child = getChild(type_decl_AST);
			currentAST.advanceChildToEnd();
			type_decl_AST = (AST) currentAST.root;
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_12);
		}
		returnAST = type_decl_AST;
	}

	public final void domain_rule() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST domain_rule_AST = null;

		try {
			if (((_tokenSet_2.member(LA(1)))) && (isFirst && (LA(2) != ExpressParserTokenTypes.COLON.getIndex()))) {
				logical_expression();
				astFactory.addASTChild(currentAST, returnAST);
				domain_rule_AST = (AST) currentAST.root;
			} else if ((_tokenSet_2.member(LA(1)))) {
				{
					if ((LA1Equals(ExpressParserTokenTypes.IDENT))) {
						label();
						astFactory.addASTChild(currentAST, returnAST);
						match(ExpressParserTokenTypes.COLON);
					} else if ((_tokenSet_2.member(LA(1)))) {
					} else {
						throw new NoViableAltException(LT(1), getFilename());
					}

				}
				logical_expression();
				astFactory.addASTChild(currentAST, returnAST);
				domain_rule_AST = parseAST(currentAST, ExpressParserTokenTypes.DOMAIN_RULE);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_37);
		}
		returnAST = domain_rule_AST;
	}

	public final void logical_expression() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST logical_expression_AST = null;

		try {
			expression();
			astFactory.addASTChild(currentAST, returnAST);
			logical_expression_AST = parseAST(currentAST, ExpressParserTokenTypes.LOGICAL_EXPRESSION);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_38);
		}
		returnAST = logical_expression_AST;
	}

	public final void label() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST label_AST = null;

		try {
			AST tmp122_AST = null;
			tmp122_AST = astFactory.create(LT(1));
			astFactory.addASTChild(currentAST, tmp122_AST);
			match(ExpressParserTokenTypes.IDENT);
			label_AST = parseAST(currentAST, ExpressParserTokenTypes.LABEL);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_32);
		}
		returnAST = label_AST;
	}

	public final void repetition() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST repetition_AST = null;

		try {
			numeric_expression();
			astFactory.addASTChild(currentAST, returnAST);
			repetition_AST = parseAST(currentAST, ExpressParserTokenTypes.REPETITION);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_4);
		}
		returnAST = repetition_AST;
	}

	public final void entity_head() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST entity_head_AST = null;
		String id = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_entity);
			id = entity_id();
			astFactory.addASTChild(currentAST, returnAST);
			newEntityScope(id);
			{
				if (((LA1Equals(ExpressParserTokenTypes.LITERAL_abstract))) && (LA(2) != ExpressParserTokenTypes.LITERAL_supertype.getIndex())) {
					AST tmp124_AST = null;
					tmp124_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp124_AST);
					match(ExpressParserTokenTypes.LITERAL_abstract);
				} else if ((_tokenSet_39.member(LA(1)))) {
				} else {
					throw new NoViableAltException(LT(1), getFilename());
				}

			}
			{
				if ((_tokenSet_39.member(LA(1)))) {
					subsuper();
					astFactory.addASTChild(currentAST, returnAST);
				} else if ((_tokenSet_40.member(LA(1)))) {
				} else {
					throw new NoViableAltException(LT(1), getFilename());
				}

			}
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case SEMI: {
					match(ExpressParserTokenTypes.SEMI);
					break;
				}
				case ATTRIBUTE_IDENT:
				case ENTITY_ATTR_IDENT:
				case TYPE_ATTR_IDENT:
				case IDENT:
				case LITERAL_unique:
				case LITERAL_self:
				case LITERAL_end_entity:
				case LITERAL_derive:
				case LITERAL_inverse:
				case LITERAL_where: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			entity_head_AST = parseAST(currentAST, ExpressParserTokenTypes.ENTITY_HEAD);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_41);
		}
		returnAST = entity_head_AST;
	}

	public final String entity_id() throws RecognitionException, TokenStreamException {
		String eid;

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST entity_id_AST = null;
		Token id = null;
		AST id_AST = null;
		Token id2 = null;
		AST id2_AST = null;
		eid = null;

		try {
			if (((LA1Equals(ExpressParserTokenTypes.IDENT))) && (isFirst)) {
				id = LT(1);
				id_AST = astFactory.create(id);
				astFactory.addASTChild(currentAST, id_AST);
				match(ExpressParserTokenTypes.IDENT.getIndex());
				eid = id.getText();
				addId(eid, ExpressParserTokenTypes.ENTITY_IDENT);
				entity_id_AST = (AST) currentAST.root;
			} else if ((LA1Equals(ExpressParserTokenTypes.ENTITY_IDENT))) {
				id2 = LT(1);
				id2_AST = astFactory.create(id2);
				astFactory.addASTChild(currentAST, id2_AST);
				match(ExpressParserTokenTypes.ENTITY_IDENT);
				entity_id_AST = (AST) currentAST.root;
				eid = id2.getText();
				id2_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				entity_id_AST = makeAST(ExpressParserTokenTypes.ENTITY_ID, entity_id_AST);

				currentAST.root = entity_id_AST;
				currentAST.child = getChild(entity_id_AST);
				currentAST.advanceChildToEnd();
				entity_id_AST = (AST) currentAST.root;
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_42);
		}
		returnAST = entity_id_AST;
		return eid;
	}

	public final void subsuper() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST subsuper_AST = null;

		try {
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_abstract:
				case LITERAL_supertype: {
					supertype_constraint();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case ATTRIBUTE_IDENT:
				case ENTITY_ATTR_IDENT:
				case TYPE_ATTR_IDENT:
				case IDENT:
				case SEMI:
				case LITERAL_unique:
				case LITERAL_self:
				case LITERAL_end_entity:
				case LITERAL_subtype:
				case LITERAL_derive:
				case LITERAL_inverse:
				case LITERAL_where: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_subtype: {
					subtype_declaration();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case ATTRIBUTE_IDENT:
				case ENTITY_ATTR_IDENT:
				case TYPE_ATTR_IDENT:
				case IDENT:
				case SEMI:
				case LITERAL_unique:
				case LITERAL_self:
				case LITERAL_end_entity:
				case LITERAL_derive:
				case LITERAL_inverse:
				case LITERAL_where: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			subsuper_AST = parseAST(currentAST, ExpressParserTokenTypes.SUBSUPER);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_40);
		}
		returnAST = subsuper_AST;
	}

	public final void entity_body() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST entity_body_AST = null;

		try {
			{
				_loop35579: do {
					if ((_tokenSet_43.member(LA(1)))) {
						explicit_attr();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35579;
					}

				} while (true);
			}
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_derive: {
					derive_clause();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case LITERAL_unique:
				case LITERAL_end_entity:
				case LITERAL_inverse:
				case LITERAL_where: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_inverse: {
					inverse_clause();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case LITERAL_unique:
				case LITERAL_end_entity:
				case LITERAL_where: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_unique: {
					unique_clause();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case LITERAL_end_entity:
				case LITERAL_where: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_where: {
					where_clause();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case LITERAL_end_entity: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			entity_body_AST = parseAST(currentAST, ExpressParserTokenTypes.ENTITY_BODY);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_44);
		}
		returnAST = entity_body_AST;
	}

	public final void explicit_attr() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST explicit_attr_AST = null;

		try {
			attribute_decl();
			astFactory.addASTChild(currentAST, returnAST);
			{
				_loop35612: do {
					if ((LA1Equals(ExpressParserTokenTypes.COMMA))) {
						match(ExpressParserTokenTypes.COMMA);
						attribute_decl();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35612;
					}

				} while (true);
			}
			match(ExpressParserTokenTypes.COLON);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_optional: {
					AST tmp128_AST = null;
					tmp128_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp128_AST);
					match(ExpressParserTokenTypes.LITERAL_optional);
					break;
				}
				case ENTITY_IDENT:
				case TYPE_IDENT:
				case ENTITY_ATTR_IDENT:
				case TYPE_ATTR_IDENT:
				case ENTITY_VAR_IDENT:
				case TYPE_VAR_IDENT:
				case ENTITY_PARAM_IDENT:
				case TYPE_PARAM_IDENT:
				case LITERAL_aggregate:
				case IDENT:
				case LITERAL_array:
				case LITERAL_bag:
				case LITERAL_binary:
				case LITERAL_boolean:
				case LITERAL_set:
				case LITERAL_list:
				case LITERAL_generic:
				case LITERAL_generic_entity:
				case LITERAL_integer:
				case LITERAL_logical:
				case LITERAL_number:
				case LITERAL_real:
				case LITERAL_string: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			base_type();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.SEMI);
			explicit_attr_AST = parseAST(currentAST, ExpressParserTokenTypes.EXPLICIT_ATTR);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_41);
		}
		returnAST = explicit_attr_AST;
	}

	public final void derive_clause() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST derive_clause_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_derive);
			derived_attr();
			astFactory.addASTChild(currentAST, returnAST);
			{
				_loop35621: do {
					if ((_tokenSet_43.member(LA(1)))) {
						derived_attr();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35621;
					}

				} while (true);
			}
			derive_clause_AST = parseAST(currentAST, ExpressParserTokenTypes.DERIVE_CLAUSE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_45);
		}
		returnAST = derive_clause_AST;
	}

	public final void inverse_clause() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST inverse_clause_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_inverse);
			inverse_attr();
			astFactory.addASTChild(currentAST, returnAST);
			{
				_loop35625: do {
					if ((_tokenSet_43.member(LA(1)))) {
						inverse_attr();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35625;
					}

				} while (true);
			}
			inverse_clause_AST = parseAST(currentAST, ExpressParserTokenTypes.INVERSE_CLAUSE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_46);
		}
		returnAST = inverse_clause_AST;
	}

	public final void unique_clause() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST unique_clause_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_unique);
			unique_rule();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.SEMI);
			{
				_loop35635: do {
					if ((_tokenSet_43.member(LA(1)))) {
						unique_rule();
						astFactory.addASTChild(currentAST, returnAST);
						match(ExpressParserTokenTypes.SEMI);
					} else {
						break _loop35635;
					}

				} while (true);
			}
			unique_clause_AST = parseAST(currentAST, ExpressParserTokenTypes.UNIQUE_CLAUSE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_47);
		}
		returnAST = unique_clause_AST;
	}

	public final void where_clause() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST where_clause_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_where);
			domain_rule();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.SEMI);
			{
				_loop35910: do {
					if ((_tokenSet_2.member(LA(1)))) {
						domain_rule();
						astFactory.addASTChild(currentAST, returnAST);
						match(ExpressParserTokenTypes.SEMI);
					} else {
						break _loop35910;
					}

				} while (true);
			}
			where_clause_AST = parseAST(currentAST, ExpressParserTokenTypes.WHERE_CLAUSE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_48);
		}
		returnAST = where_clause_AST;
	}

	public final void supertype_constraint() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST supertype_constraint_AST = null;

		try {
			if ((LA1Equals(ExpressParserTokenTypes.LITERAL_abstract))) {
				abstract_supertype_declaration();
				astFactory.addASTChild(currentAST, returnAST);
				supertype_constraint_AST = parseAST(currentAST, ExpressParserTokenTypes.SUPERTYPE_CONSTRAINT);
			} else if ((LA1Equals(ExpressParserTokenTypes.LITERAL_abstract) || LA1Equals(ExpressParserTokenTypes.LITERAL_supertype))) {
				supertype_rule();
				astFactory.addASTChild(currentAST, returnAST);
				supertype_constraint_AST = parseAST(currentAST, ExpressParserTokenTypes.SUPERTYPE_CONSTRAINT);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_49);
		}
		returnAST = supertype_constraint_AST;
	}

	public final void subtype_declaration() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST subtype_declaration_AST = null;
		Token id = null;
		AST id_AST = null;
		Token id2 = null;
		AST id2_AST = null;

		try {
			if (((LA1Equals(ExpressParserTokenTypes.LITERAL_subtype))) && (isFirst)) {
				AST tmp138_AST = null;
				tmp138_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp138_AST);
				match(ExpressParserTokenTypes.LITERAL_subtype);
				AST tmp139_AST = null;
				tmp139_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp139_AST);
				match(ExpressParserTokenTypes.LITERAL_of);
				AST tmp140_AST = null;
				tmp140_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp140_AST);
				match(ExpressParserTokenTypes.LPAREN);
				id = LT(1);
				id_AST = astFactory.create(id);
				astFactory.addASTChild(currentAST, id_AST);
				match(ExpressParserTokenTypes.IDENT);
				addSuper(id.getText());
				{
					_loop35592: do {
						if ((LA1Equals(ExpressParserTokenTypes.COMMA))) {
							AST tmp141_AST = null;
							tmp141_AST = astFactory.create(LT(1));
							astFactory.addASTChild(currentAST, tmp141_AST);
							match(ExpressParserTokenTypes.COMMA);
							id2 = LT(1);
							id2_AST = astFactory.create(id2);
							astFactory.addASTChild(currentAST, id2_AST);
							match(ExpressParserTokenTypes.IDENT);
							addSuper(id2.getText());
						} else {
							break _loop35592;
						}

					} while (true);
				}
				AST tmp142_AST = null;
				tmp142_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp142_AST);
				match(ExpressParserTokenTypes.RPAREN);
				{
					if ((LA1Equals(ExpressParserTokenTypes.SEMI))) {
						AST tmp143_AST = null;
						tmp143_AST = astFactory.create(LT(1));
						astFactory.addASTChild(currentAST, tmp143_AST);
						match(ExpressParserTokenTypes.SEMI);
					} else if ((_tokenSet_40.member(LA(1)))) {
					} else {
						throw new NoViableAltException(LT(1), getFilename());
					}

				}
				subtype_declaration_AST = (AST) currentAST.root;
			} else if ((LA1Equals(ExpressParserTokenTypes.LITERAL_subtype))) {
				match(ExpressParserTokenTypes.LITERAL_subtype);
				match(ExpressParserTokenTypes.LITERAL_of);
				match(ExpressParserTokenTypes.LPAREN);
				entity_ref();
				astFactory.addASTChild(currentAST, returnAST);
				{
					_loop35595: do {
						if ((LA1Equals(ExpressParserTokenTypes.COMMA))) {
							match(ExpressParserTokenTypes.COMMA);
							entity_ref();
							astFactory.addASTChild(currentAST, returnAST);
						} else {
							break _loop35595;
						}

					} while (true);
				}
				match(ExpressParserTokenTypes.RPAREN);
				{
					if ((LA1Equals(ExpressParserTokenTypes.SEMI))) {
						match(ExpressParserTokenTypes.SEMI);
					} else if ((_tokenSet_40.member(LA(1)))) {
					} else {
						throw new NoViableAltException(LT(1), getFilename());
					}

				}
				subtype_declaration_AST = parseAST(currentAST, ExpressParserTokenTypes.SUBTYPE_DECLARATION);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_40);
		}
		returnAST = subtype_declaration_AST;
	}

	public final void abstract_supertype_declaration() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST abstract_supertype_declaration_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_abstract);
			match(ExpressParserTokenTypes.LITERAL_supertype);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_of: {
					subtype_constraint();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case ATTRIBUTE_IDENT:
				case ENTITY_ATTR_IDENT:
				case TYPE_ATTR_IDENT:
				case IDENT:
				case SEMI:
				case LITERAL_unique:
				case LITERAL_self:
				case LITERAL_end_entity:
				case LITERAL_subtype:
				case LITERAL_derive:
				case LITERAL_inverse:
				case LITERAL_where: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			abstract_supertype_declaration_AST = parseAST(currentAST, ExpressParserTokenTypes.ABSTRACT_SUPERTYPE_DECLARATION);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_49);
		}
		returnAST = abstract_supertype_declaration_AST;
	}

	public final void supertype_rule() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST supertype_rule_AST = null;

		try {
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_abstract: {
					AST tmp152_AST = null;
					tmp152_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp152_AST);
					match(ExpressParserTokenTypes.LITERAL_abstract);
					break;
				}
				case LITERAL_supertype: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			match(ExpressParserTokenTypes.LITERAL_supertype);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_of: {
					subtype_constraint();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case ATTRIBUTE_IDENT:
				case ENTITY_ATTR_IDENT:
				case TYPE_ATTR_IDENT:
				case IDENT:
				case SEMI:
				case LITERAL_unique:
				case LITERAL_self:
				case LITERAL_end_entity:
				case LITERAL_subtype:
				case LITERAL_derive:
				case LITERAL_inverse:
				case LITERAL_where: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			supertype_rule_AST = parseAST(currentAST, ExpressParserTokenTypes.SUPERTYPE_RULE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_49);
		}
		returnAST = supertype_rule_AST;
	}

	public final void subtype_constraint() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST subtype_constraint_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_of);
			match(ExpressParserTokenTypes.LPAREN);
			supertype_expression();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.RPAREN);
			{
				if ((LA1Equals(ExpressParserTokenTypes.SEMI))) {
					match(ExpressParserTokenTypes.SEMI);
				} else if ((_tokenSet_49.member(LA(1)))) {
				} else {
					throw new NoViableAltException(LT(1), getFilename());
				}

			}
			subtype_constraint_AST = parseAST(currentAST, ExpressParserTokenTypes.SUBTYPE_CONSTRAINT);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_49);
		}
		returnAST = subtype_constraint_AST;
	}

	public final void entity_ref() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST entity_ref_AST = null;
		Token nid = null;
		AST nid_AST = null;
		Token nid2 = null;
		AST nid2_AST = null;
		Token nid3 = null;
		AST nid3_AST = null;
		Token nid4 = null;
		AST nid4_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case ENTITY_IDENT: {
				nid = LT(1);
				nid_AST = astFactory.create(nid);
				astFactory.addASTChild(currentAST, nid_AST);
				match(ExpressParserTokenTypes.ENTITY_IDENT);
				nid_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				entity_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.ENTITY_REF);
				break;
			}
			case ENTITY_ATTR_IDENT: {
				nid2 = LT(1);
				nid2_AST = astFactory.create(nid2);
				astFactory.addASTChild(currentAST, nid2_AST);
				match(ExpressParserTokenTypes.ENTITY_ATTR_IDENT);
				nid2_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				entity_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.ENTITY_REF);
				break;
			}
			case ENTITY_VAR_IDENT: {
				nid3 = LT(1);
				nid3_AST = astFactory.create(nid3);
				astFactory.addASTChild(currentAST, nid3_AST);
				match(ExpressParserTokenTypes.ENTITY_VAR_IDENT);
				nid3_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				entity_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.ENTITY_REF);
				break;
			}
			case ENTITY_PARAM_IDENT: {
				nid4 = LT(1);
				nid4_AST = astFactory.create(nid4);
				astFactory.addASTChild(currentAST, nid4_AST);
				match(ExpressParserTokenTypes.ENTITY_PARAM_IDENT);
				nid4_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				entity_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.ENTITY_REF);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_50);
		}
		returnAST = entity_ref_AST;
	}

	public final void subtype_constraint_head() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST subtype_constraint_head_AST = null;

		try {
			if (((LA1Equals(ExpressParserTokenTypes.LITERAL_subtype_constraint))) && (isFirst)) {
				AST tmp158_AST = null;
				tmp158_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp158_AST);
				match(ExpressParserTokenTypes.LITERAL_subtype_constraint);
				subtype_constraint_id();
				astFactory.addASTChild(currentAST, returnAST);
				AST tmp159_AST = null;
				tmp159_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp159_AST);
				match(ExpressParserTokenTypes.LITERAL_for);
				AST tmp160_AST = null;
				tmp160_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp160_AST);
				match(ExpressParserTokenTypes.IDENT);
				AST tmp161_AST = null;
				tmp161_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp161_AST);
				match(ExpressParserTokenTypes.SEMI);
				subtype_constraint_head_AST = (AST) currentAST.root;
			} else if ((LA1Equals(ExpressParserTokenTypes.LITERAL_subtype_constraint))) {
				match(ExpressParserTokenTypes.LITERAL_subtype_constraint);
				subtype_constraint_id();
				astFactory.addASTChild(currentAST, returnAST);
				match(ExpressParserTokenTypes.LITERAL_for);
				entity_ref();
				astFactory.addASTChild(currentAST, returnAST);
				match(ExpressParserTokenTypes.SEMI);
				subtype_constraint_head_AST = parseAST(currentAST, ExpressParserTokenTypes.SUBTYPE_CONSTRAINT_HEAD);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_51);
		}
		returnAST = subtype_constraint_head_AST;
	}

	public final void subtype_constraint_body() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST subtype_constraint_body_AST = null;

		try {
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_abstract: {
					abstract_supertype();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case ENTITY_IDENT:
				case ENTITY_ATTR_IDENT:
				case ENTITY_VAR_IDENT:
				case ENTITY_PARAM_IDENT:
				case LPAREN:
				case IDENT:
				case LITERAL_end_subtype_constraint:
				case LITERAL_total_over:
				case LITERAL_oneof: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_total_over: {
					total_over();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case ENTITY_IDENT:
				case ENTITY_ATTR_IDENT:
				case ENTITY_VAR_IDENT:
				case ENTITY_PARAM_IDENT:
				case LPAREN:
				case IDENT:
				case LITERAL_end_subtype_constraint:
				case LITERAL_oneof: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case ENTITY_IDENT:
				case ENTITY_ATTR_IDENT:
				case ENTITY_VAR_IDENT:
				case ENTITY_PARAM_IDENT:
				case LPAREN:
				case IDENT:
				case LITERAL_oneof: {
					supertype_expression();
					astFactory.addASTChild(currentAST, returnAST);
					match(ExpressParserTokenTypes.SEMI);
					break;
				}
				case LITERAL_end_subtype_constraint: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			subtype_constraint_body_AST = parseAST(currentAST, ExpressParserTokenTypes.SUBTYPE_CONSTRAINT_BODY);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_52);
		}
		returnAST = subtype_constraint_body_AST;
	}

	public final void subtype_constraint_id() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST subtype_constraint_id_AST = null;
		Token id = null;
		AST id_AST = null;
		Token id2 = null;
		AST id2_AST = null;

		try {
			if (((LA1Equals(ExpressParserTokenTypes.IDENT))) && (isFirst)) {
				id = LT(1);
				id_AST = astFactory.create(id);
				astFactory.addASTChild(currentAST, id_AST);
				match(ExpressParserTokenTypes.IDENT);
				addId(id.getText(), ExpressParserTokenTypes.SUBTYPE_CONSTRAINT_ID);
				subtype_constraint_id_AST = (AST) currentAST.root;
			} else if ((LA1Equals(ExpressParserTokenTypes.SUBTYPE_CONSTRAINT_ID))) {
				id2 = LT(1);
				id2_AST = astFactory.create(id2);
				astFactory.addASTChild(currentAST, id2_AST);
				match(ExpressParserTokenTypes.SUBTYPE_CONSTRAINT_ID);
				id2_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				subtype_constraint_id_AST = parseAST(currentAST, ExpressParserTokenTypes.SUBTYPE_CONSTRAINT_ID);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_53);
		}
		returnAST = subtype_constraint_id_AST;
	}

	public final void abstract_supertype() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST abstract_supertype_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_abstract);
			match(ExpressParserTokenTypes.LITERAL_supertype);
			match(ExpressParserTokenTypes.SEMI);
			abstract_supertype_AST = parseAST(currentAST, ExpressParserTokenTypes.ABSTRACT_SUPERTYPE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_54);
		}
		returnAST = abstract_supertype_AST;
	}

	public final void total_over() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST total_over_AST = null;

		try {
			if (((LA1Equals(ExpressParserTokenTypes.LITERAL_total_over))) && (isFirst)) {
				AST tmp169_AST = null;
				tmp169_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp169_AST);
				match(ExpressParserTokenTypes.LITERAL_total_over);
				AST tmp170_AST = null;
				tmp170_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp170_AST);
				match(ExpressParserTokenTypes.LPAREN);
				AST tmp171_AST = null;
				tmp171_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp171_AST);
				match(ExpressParserTokenTypes.IDENT);
				{
					_loop35607: do {
						if ((LA1Equals(ExpressParserTokenTypes.COMMA))) {
							AST tmp172_AST = null;
							tmp172_AST = astFactory.create(LT(1));
							astFactory.addASTChild(currentAST, tmp172_AST);
							match(ExpressParserTokenTypes.COMMA);
							AST tmp173_AST = null;
							tmp173_AST = astFactory.create(LT(1));
							astFactory.addASTChild(currentAST, tmp173_AST);
							match(ExpressParserTokenTypes.IDENT);
						} else {
							break _loop35607;
						}

					} while (true);
				}
				AST tmp174_AST = null;
				tmp174_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp174_AST);
				match(ExpressParserTokenTypes.LPAREN);
				AST tmp175_AST = null;
				tmp175_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp175_AST);
				match(ExpressParserTokenTypes.SEMI);
				total_over_AST = (AST) currentAST.root;
			} else if ((LA1Equals(ExpressParserTokenTypes.LITERAL_total_over))) {
				match(ExpressParserTokenTypes.LITERAL_total_over);
				match(ExpressParserTokenTypes.LPAREN);
				entity_ref();
				astFactory.addASTChild(currentAST, returnAST);
				{
					_loop35609: do {
						if ((LA1Equals(ExpressParserTokenTypes.COMMA))) {
							match(ExpressParserTokenTypes.COMMA);
							entity_ref();
							astFactory.addASTChild(currentAST, returnAST);
						} else {
							break _loop35609;
						}

					} while (true);
				}
				match(ExpressParserTokenTypes.LPAREN);
				match(ExpressParserTokenTypes.SEMI);
				total_over_AST = parseAST(currentAST, ExpressParserTokenTypes.TOTAL_OVER);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_55);
		}
		returnAST = total_over_AST;
	}

	public final void supertype_expression() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST supertype_expression_AST = null;

		try {
			supertype_factor();
			astFactory.addASTChild(currentAST, returnAST);
			{
				_loop35859: do {
					if ((LA1Equals(ExpressParserTokenTypes.LITERAL_andor))) {
						match(ExpressParserTokenTypes.LITERAL_andor);
						supertype_factor();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35859;
					}

				} while (true);
			}
			supertype_expression_AST = parseAST(currentAST, ExpressParserTokenTypes.SUPERTYPE_EXPRESSION);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_56);
		}
		returnAST = supertype_expression_AST;
	}

	public final void attribute_decl() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST attribute_decl_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case ATTRIBUTE_IDENT:
			case ENTITY_ATTR_IDENT:
			case TYPE_ATTR_IDENT:
			case IDENT: {
				attribute_id();
				astFactory.addASTChild(currentAST, returnAST);
				attribute_decl_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_DECL);
				break;
			}
			case LITERAL_self: {
				redeclared_attribute();
				astFactory.addASTChild(currentAST, returnAST);
				attribute_decl_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_DECL);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_30);
		}
		returnAST = attribute_decl_AST;
	}

	public final void attribute_id() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST attribute_id_AST = null;
		Token id = null;
		AST id_AST = null;
		Token nid1 = null;
		AST nid1_AST = null;
		Token nid2 = null;
		AST nid2_AST = null;
		Token nid3 = null;
		AST nid3_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case ATTRIBUTE_IDENT: {
				nid1 = LT(1);
				nid1_AST = astFactory.create(nid1);
				astFactory.addASTChild(currentAST, nid1_AST);
				match(ExpressParserTokenTypes.ATTRIBUTE_IDENT);
				nid1_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				attribute_id_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_ID);
				break;
			}
			case ENTITY_ATTR_IDENT: {
				nid2 = LT(1);
				nid2_AST = astFactory.create(nid2);
				astFactory.addASTChild(currentAST, nid2_AST);
				match(ExpressParserTokenTypes.ENTITY_ATTR_IDENT);
				nid2_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				attribute_id_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_ID);
				break;
			}
			case TYPE_ATTR_IDENT: {
				nid3 = LT(1);
				nid3_AST = astFactory.create(nid3);
				astFactory.addASTChild(currentAST, nid3_AST);
				match(ExpressParserTokenTypes.TYPE_ATTR_IDENT);
				nid3_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				attribute_id_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_ID);
				break;
			}
			default:
				if (((LA1Equals(ExpressParserTokenTypes.IDENT))) && (isFirst)) {
					id = LT(1);
					id_AST = astFactory.create(id);
					astFactory.addASTChild(currentAST, id_AST);
					match(ExpressParserTokenTypes.IDENT);
					addId(id.getText(), ExpressParserTokenTypes.ATTRIBUTE_IDENT);
					attribute_id_AST = (AST) currentAST.root;
				} else {
					throw new NoViableAltException(LT(1), getFilename());
				}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_30);
		}
		returnAST = attribute_id_AST;
	}

	public final void redeclared_attribute() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST redeclared_attribute_AST = null;

		try {
			qualified_attribute();
			astFactory.addASTChild(currentAST, returnAST);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_renamed: {
					match(ExpressParserTokenTypes.LITERAL_renamed);
					attribute_id();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case COMMA:
				case COLON: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			redeclared_attribute_AST = parseAST(currentAST, ExpressParserTokenTypes.REDECLARED_ATTRIBUTE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_30);
		}
		returnAST = redeclared_attribute_AST;
	}

	public final void qualified_attribute() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST qualified_attribute_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_self);
			group_qualifier();
			astFactory.addASTChild(currentAST, returnAST);
			attribute_qualifier();
			astFactory.addASTChild(currentAST, returnAST);
			qualified_attribute_AST = parseAST(currentAST, ExpressParserTokenTypes.QUALIFIED_ATTRIBUTE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_57);
		}
		returnAST = qualified_attribute_AST;
	}

	public final void group_qualifier() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST group_qualifier_AST = null;

		try {
			if (((LA1Equals(ExpressParserTokenTypes.BACKSLASH))) && (isFirst)) {
				AST tmp184_AST = null;
				tmp184_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp184_AST);
				match(ExpressParserTokenTypes.BACKSLASH);
				AST tmp185_AST = null;
				tmp185_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp185_AST);
				match(ExpressParserTokenTypes.IDENT);
				group_qualifier_AST = (AST) currentAST.root;
			} else if ((LA1Equals(ExpressParserTokenTypes.BACKSLASH))) {
				match(ExpressParserTokenTypes.BACKSLASH);
				entity_ref();
				astFactory.addASTChild(currentAST, returnAST);
				group_qualifier_AST = parseAST(currentAST, ExpressParserTokenTypes.GROUP_QUALIFIER);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_18);
		}
		returnAST = group_qualifier_AST;
	}

	public final void attribute_qualifier() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST attribute_qualifier_AST = null;

		try {
			match(ExpressParserTokenTypes.DOT);
			global_ident();
			astFactory.addASTChild(currentAST, returnAST);
			attribute_qualifier_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_QUALIFIER);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_58);
		}
		returnAST = attribute_qualifier_AST;
	}

	public final void derived_attr() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST derived_attr_AST = null;

		try {
			attribute_decl();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.COLON);
			base_type();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.COLEQ);
			expression();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.SEMI);
			derived_attr_AST = parseAST(currentAST, ExpressParserTokenTypes.DERIVED_ATTR);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_59);
		}
		returnAST = derived_attr_AST;
	}

	public final void inverse_attr() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST inverse_attr_AST = null;

		try {
			if (((_tokenSet_43.member(LA(1)))) && (isFirst)) {
				attribute_decl();
				astFactory.addASTChild(currentAST, returnAST);
				AST tmp191_AST = null;
				tmp191_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp191_AST);
				match(ExpressParserTokenTypes.COLON);
				{
					switch (ExpressParserTokenTypes.getToken(LA(1))) {
					case LITERAL_bag:
					case LITERAL_set: {
						{
							switch (ExpressParserTokenTypes.getToken(LA(1))) {
							case LITERAL_set: {
								AST tmp192_AST = null;
								tmp192_AST = astFactory.create(LT(1));
								astFactory.addASTChild(currentAST, tmp192_AST);
								match(ExpressParserTokenTypes.LITERAL_set);
								break;
							}
							case LITERAL_bag: {
								AST tmp193_AST = null;
								tmp193_AST = astFactory.create(LT(1));
								astFactory.addASTChild(currentAST, tmp193_AST);
								match(ExpressParserTokenTypes.LITERAL_bag);
								break;
							}
							default: {
								throw new NoViableAltException(LT(1), getFilename());
							}
							}
						}
						{
							switch (ExpressParserTokenTypes.getToken(LA(1))) {
							case LBRACK: {
								bound_spec();
								astFactory.addASTChild(currentAST, returnAST);
								break;
							}
							case LITERAL_of: {
								break;
							}
							default: {
								throw new NoViableAltException(LT(1), getFilename());
							}
							}
						}
						AST tmp194_AST = null;
						tmp194_AST = astFactory.create(LT(1));
						astFactory.addASTChild(currentAST, tmp194_AST);
						match(ExpressParserTokenTypes.LITERAL_of);
						break;
					}
					case IDENT: {
						break;
					}
					default: {
						throw new NoViableAltException(LT(1), getFilename());
					}
					}
				}
				AST tmp195_AST = null;
				tmp195_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp195_AST);
				match(ExpressParserTokenTypes.IDENT);
				AST tmp196_AST = null;
				tmp196_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp196_AST);
				match(ExpressParserTokenTypes.LITERAL_for);
				AST tmp197_AST = null;
				tmp197_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp197_AST);
				match(ExpressParserTokenTypes.IDENT);
				AST tmp198_AST = null;
				tmp198_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp198_AST);
				match(ExpressParserTokenTypes.SEMI);
				inverse_attr_AST = (AST) currentAST.root;
			} else if ((_tokenSet_43.member(LA(1)))) {
				attribute_decl();
				astFactory.addASTChild(currentAST, returnAST);
				match(ExpressParserTokenTypes.COLON);
				{
					switch (ExpressParserTokenTypes.getToken(LA(1))) {
					case LITERAL_bag:
					case LITERAL_set: {
						{
							switch (ExpressParserTokenTypes.getToken(LA(1))) {
							case LITERAL_set: {
								AST tmp200_AST = null;
								tmp200_AST = astFactory.create(LT(1));
								astFactory.addASTChild(currentAST, tmp200_AST);
								match(ExpressParserTokenTypes.LITERAL_set);
								break;
							}
							case LITERAL_bag: {
								AST tmp201_AST = null;
								tmp201_AST = astFactory.create(LT(1));
								astFactory.addASTChild(currentAST, tmp201_AST);
								match(ExpressParserTokenTypes.LITERAL_bag);
								break;
							}
							default: {
								throw new NoViableAltException(LT(1), getFilename());
							}
							}
						}
						{
							switch (ExpressParserTokenTypes.getToken(LA(1))) {
							case LBRACK: {
								bound_spec();
								astFactory.addASTChild(currentAST, returnAST);
								break;
							}
							case LITERAL_of: {
								break;
							}
							default: {
								throw new NoViableAltException(LT(1), getFilename());
							}
							}
						}
						match(ExpressParserTokenTypes.LITERAL_of);
						break;
					}
					case ENTITY_IDENT:
					case ENTITY_ATTR_IDENT:
					case ENTITY_VAR_IDENT:
					case ENTITY_PARAM_IDENT: {
						break;
					}
					default: {
						throw new NoViableAltException(LT(1), getFilename());
					}
					}
				}
				entity_ref();
				astFactory.addASTChild(currentAST, returnAST);
				match(ExpressParserTokenTypes.LITERAL_for);
				global_ident();
				astFactory.addASTChild(currentAST, returnAST);
				match(ExpressParserTokenTypes.SEMI);
				inverse_attr_AST = parseAST(currentAST, ExpressParserTokenTypes.INVERSE_ATTR);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_60);
		}
		returnAST = inverse_attr_AST;
	}

	/**** special rule ****/
	public final void global_ident() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST global_ident_AST = null;
		Token nid1 = null;
		AST nid1_AST = null;
		Token nid2 = null;
		AST nid2_AST = null;
		Token nid3 = null;
		AST nid3_AST = null;
		Token nid4 = null;
		AST nid4_AST = null;
		Token nid5 = null;
		AST nid5_AST = null;
		Token nid6 = null;
		AST nid6_AST = null;
		Token nid7 = null;
		AST nid7_AST = null;
		Token nid8 = null;
		AST nid8_AST = null;
		Token nid9 = null;
		AST nid9_AST = null;
		Token nid10 = null;
		AST nid10_AST = null;
		Token nid11 = null;
		AST nid11_AST = null;
		Token nid12 = null;
		AST nid12_AST = null;
		Token nid13 = null;
		AST nid13_AST = null;
		Token nid14 = null;
		AST nid14_AST = null;
		Token nid15 = null;
		AST nid15_AST = null;
		Token nid16 = null;
		AST nid16_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case IDENT: {
				AST tmp205_AST = null;
				tmp205_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp205_AST);
				match(ExpressParserTokenTypes.IDENT);
				global_ident_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_REF);
				break;
			}
			case CONSTANT_IDENT: {
				nid1 = LT(1);
				nid1_AST = astFactory.create(nid1);
				astFactory.addASTChild(currentAST, nid1_AST);
				match(ExpressParserTokenTypes.CONSTANT_IDENT);
				nid1_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				global_ident_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_REF);
				break;
			}
			case ENTITY_IDENT: {
				nid2 = LT(1);
				nid2_AST = astFactory.create(nid2);
				astFactory.addASTChild(currentAST, nid2_AST);
				match(ExpressParserTokenTypes.ENTITY_IDENT);
				nid2_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				global_ident_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_REF);
				break;
			}
			case FUNCTION_IDENT: {
				nid3 = LT(1);
				nid3_AST = astFactory.create(nid3);
				astFactory.addASTChild(currentAST, nid3_AST);
				match(ExpressParserTokenTypes.FUNCTION_IDENT);
				nid3_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				global_ident_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_REF);
				break;
			}
			case PROCEDURE_IDENT: {
				nid4 = LT(1);
				nid4_AST = astFactory.create(nid4);
				astFactory.addASTChild(currentAST, nid4_AST);
				match(ExpressParserTokenTypes.PROCEDURE_IDENT);
				nid4_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				global_ident_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_REF);
				break;
			}
			case PARAMETER_IDENT: {
				nid5 = LT(1);
				nid5_AST = astFactory.create(nid5);
				astFactory.addASTChild(currentAST, nid5_AST);
				match(ExpressParserTokenTypes.PARAMETER_IDENT);
				nid5_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				global_ident_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_REF);
				break;
			}
			case SCHEMA_IDENT: {
				nid6 = LT(1);
				nid6_AST = astFactory.create(nid6);
				astFactory.addASTChild(currentAST, nid6_AST);
				match(ExpressParserTokenTypes.SCHEMA_IDENT);
				nid6_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				global_ident_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_REF);
				break;
			}
			case TYPE_IDENT: {
				nid7 = LT(1);
				nid7_AST = astFactory.create(nid7);
				astFactory.addASTChild(currentAST, nid7_AST);
				match(ExpressParserTokenTypes.TYPE_IDENT);
				nid7_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				global_ident_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_REF);
				break;
			}
			case VARIABLE_IDENT: {
				nid8 = LT(1);
				nid8_AST = astFactory.create(nid8);
				astFactory.addASTChild(currentAST, nid8_AST);
				match(ExpressParserTokenTypes.VARIABLE_IDENT);
				nid8_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				global_ident_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_REF);
				break;
			}
			case ENUMERATION_IDENT: {
				nid9 = LT(1);
				nid9_AST = astFactory.create(nid9);
				astFactory.addASTChild(currentAST, nid9_AST);
				match(ExpressParserTokenTypes.ENUMERATION_IDENT);
				nid9_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				global_ident_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_REF);
				break;
			}
			case ATTRIBUTE_IDENT: {
				nid10 = LT(1);
				nid10_AST = astFactory.create(nid10);
				astFactory.addASTChild(currentAST, nid10_AST);
				match(ExpressParserTokenTypes.ATTRIBUTE_IDENT);
				nid10_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				global_ident_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_REF);
				break;
			}
			case ENTITY_ATTR_IDENT: {
				nid11 = LT(1);
				nid11_AST = astFactory.create(nid11);
				astFactory.addASTChild(currentAST, nid11_AST);
				match(ExpressParserTokenTypes.ENTITY_ATTR_IDENT);
				nid11_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				global_ident_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_REF);
				break;
			}
			case TYPE_ATTR_IDENT: {
				nid12 = LT(1);
				nid12_AST = astFactory.create(nid12);
				astFactory.addASTChild(currentAST, nid12_AST);
				match(ExpressParserTokenTypes.TYPE_ATTR_IDENT);
				nid12_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				global_ident_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_REF);
				break;
			}
			case ENTITY_VAR_IDENT: {
				nid13 = LT(1);
				nid13_AST = astFactory.create(nid13);
				astFactory.addASTChild(currentAST, nid13_AST);
				match(ExpressParserTokenTypes.ENTITY_VAR_IDENT);
				nid13_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				global_ident_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_REF);
				break;
			}
			case TYPE_VAR_IDENT: {
				nid14 = LT(1);
				nid14_AST = astFactory.create(nid14);
				astFactory.addASTChild(currentAST, nid14_AST);
				match(ExpressParserTokenTypes.TYPE_VAR_IDENT);
				nid14_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				global_ident_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_REF);
				break;
			}
			case ENTITY_PARAM_IDENT: {
				nid15 = LT(1);
				nid15_AST = astFactory.create(nid15);
				astFactory.addASTChild(currentAST, nid15_AST);
				match(ExpressParserTokenTypes.ENTITY_PARAM_IDENT);
				nid15_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				global_ident_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_REF);
				break;
			}
			case TYPE_PARAM_IDENT: {
				nid16 = LT(1);
				nid16_AST = astFactory.create(nid16);
				astFactory.addASTChild(currentAST, nid16_AST);
				match(ExpressParserTokenTypes.TYPE_PARAM_IDENT);
				nid16_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				global_ident_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_REF);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_61);
		}
		returnAST = global_ident_AST;
	}

	public final void unique_rule() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST unique_rule_AST = null;

		try {
			if (((LA1Equals(ExpressParserTokenTypes.IDENT) || LA1Equals(ExpressParserTokenTypes.LITERAL_self))) && (isFirst)) {
				{
					switch (ExpressParserTokenTypes.getToken(LA(1))) {
					case IDENT: {
						AST tmp206_AST = null;
						tmp206_AST = astFactory.create(LT(1));
						astFactory.addASTChild(currentAST, tmp206_AST);
						match(ExpressParserTokenTypes.IDENT);
						{
							switch (ExpressParserTokenTypes.getToken(LA(1))) {
							case COLON: {
								AST tmp207_AST = null;
								tmp207_AST = astFactory.create(LT(1));
								astFactory.addASTChild(currentAST, tmp207_AST);
								match(ExpressParserTokenTypes.COLON);
								referenced_attribute();
								astFactory.addASTChild(currentAST, returnAST);
								break;
							}
							case COMMA:
							case SEMI: {
								break;
							}
							default: {
								throw new NoViableAltException(LT(1), getFilename());
							}
							}
						}
						break;
					}
					case LITERAL_self: {
						qualified_attribute();
						astFactory.addASTChild(currentAST, returnAST);
						break;
					}
					default: {
						throw new NoViableAltException(LT(1), getFilename());
					}
					}
				}
				{
					_loop35640: do {
						if ((LA1Equals(ExpressParserTokenTypes.COMMA))) {
							AST tmp208_AST = null;
							tmp208_AST = astFactory.create(LT(1));
							astFactory.addASTChild(currentAST, tmp208_AST);
							match(ExpressParserTokenTypes.COMMA);
							referenced_attribute();
							astFactory.addASTChild(currentAST, returnAST);
						} else {
							break _loop35640;
						}

					} while (true);
				}
				unique_rule_AST = (AST) currentAST.root;
			} else if ((_tokenSet_43.member(LA(1)))) {
				{
					if ((LA1Equals(ExpressParserTokenTypes.IDENT))) {
						label();
						astFactory.addASTChild(currentAST, returnAST);
						match(ExpressParserTokenTypes.COLON);
					} else if ((_tokenSet_43.member(LA(1)))) {
					} else {
						throw new NoViableAltException(LT(1), getFilename());
					}

				}
				referenced_attribute();
				astFactory.addASTChild(currentAST, returnAST);
				{
					_loop35643: do {
						if ((LA1Equals(ExpressParserTokenTypes.COMMA))) {
							match(ExpressParserTokenTypes.COMMA);
							referenced_attribute();
							astFactory.addASTChild(currentAST, returnAST);
						} else {
							break _loop35643;
						}

					} while (true);
				}
				unique_rule_AST = parseAST(currentAST, ExpressParserTokenTypes.UNIQUE_RULE);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_37);
		}
		returnAST = unique_rule_AST;
	}

	public final void referenced_attribute() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST referenced_attribute_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case ATTRIBUTE_IDENT:
			case ENTITY_ATTR_IDENT:
			case TYPE_ATTR_IDENT: {
				attribute_ref();
				astFactory.addASTChild(currentAST, returnAST);
				referenced_attribute_AST = parseAST(currentAST, ExpressParserTokenTypes.REFERENCED_ATTRIBUTE);
				break;
			}
			case LITERAL_self: {
				qualified_attribute();
				astFactory.addASTChild(currentAST, returnAST);
				referenced_attribute_AST = parseAST(currentAST, ExpressParserTokenTypes.REFERENCED_ATTRIBUTE);
				break;
			}
			default:
				if (((LA1Equals(ExpressParserTokenTypes.IDENT))) && (isFirst)) {
					AST tmp211_AST = null;
					tmp211_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp211_AST);
					match(ExpressParserTokenTypes.IDENT);
					referenced_attribute_AST = (AST) currentAST.root;
				} else {
					throw new NoViableAltException(LT(1), getFilename());
				}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_62);
		}
		returnAST = referenced_attribute_AST;
	}

	public final void attribute_ref() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST attribute_ref_AST = null;
		Token nid1 = null;
		AST nid1_AST = null;
		Token nid2 = null;
		AST nid2_AST = null;
		Token nid3 = null;
		AST nid3_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case ATTRIBUTE_IDENT: {
				nid1 = LT(1);
				nid1_AST = astFactory.create(nid1);
				astFactory.addASTChild(currentAST, nid1_AST);
				match(ExpressParserTokenTypes.ATTRIBUTE_IDENT);
				nid1_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				attribute_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_REF);
				break;
			}
			case ENTITY_ATTR_IDENT: {
				nid2 = LT(1);
				nid2_AST = astFactory.create(nid2);
				astFactory.addASTChild(currentAST, nid2_AST);
				match(ExpressParserTokenTypes.ENTITY_ATTR_IDENT);
				nid2_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				attribute_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_REF);
				break;
			}
			case TYPE_ATTR_IDENT: {
				nid3 = LT(1);
				nid3_AST = astFactory.create(nid3);
				astFactory.addASTChild(currentAST, nid3_AST);
				match(ExpressParserTokenTypes.TYPE_ATTR_IDENT);
				nid3_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				attribute_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.ATTRIBUTE_REF);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_0);
		}
		returnAST = attribute_ref_AST;
	}

	public final void entity_constructor() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST entity_constructor_AST = null;

		try {
			entity_ref();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.LPAREN);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case CONSTANT_IDENT:
				case ENTITY_IDENT:
				case FUNCTION_IDENT:
				case PARAMETER_IDENT:
				case TYPE_IDENT:
				case VARIABLE_IDENT:
				case ENUMERATION_IDENT:
				case ATTRIBUTE_IDENT:
				case ENTITY_ATTR_IDENT:
				case TYPE_ATTR_IDENT:
				case ENTITY_VAR_IDENT:
				case TYPE_VAR_IDENT:
				case ENTITY_PARAM_IDENT:
				case TYPE_PARAM_IDENT:
				case LPAREN:
				case PLUS:
				case MINUS:
				case LBRACK:
				case IDENT:
				case LITERAL_const_e:
				case LITERAL_pi:
				case LITERAL_self:
				case QUESTION:
				case STAR:
				case LITERAL_abs:
				case LITERAL_acos:
				case LITERAL_asin:
				case LITERAL_atan:
				case LITERAL_blength:
				case LITERAL_cos:
				case LITERAL_exists:
				case LITERAL_exp:
				case LITERAL_format:
				case LITERAL_hibound:
				case LITERAL_hiindex:
				case LITERAL_length:
				case LITERAL_lobound:
				case LITERAL_loindex:
				case LITERAL_log:
				case LOG2:
				case LOG10:
				case LITERAL_nvl:
				case LITERAL_odd:
				case LITERAL_rolesof:
				case LITERAL_sin:
				case LITERAL_sizeof:
				case LITERAL_sqrt:
				case LITERAL_tan:
				case LITERAL_typeof:
				case LITERAL_usedin:
				case LITERAL_value:
				case LITERAL_value_in:
				case LITERAL_value_unique:
				case LCURLY:
				case INT:
				case STRING:
				case LITERAL_false:
				case LITERAL_true:
				case LITERAL_unknown:
				case LITERAL_query:
				case LITERAL_not: {
					expression();
					astFactory.addASTChild(currentAST, returnAST);
					{
						_loop35648: do {
							if ((LA1Equals(ExpressParserTokenTypes.COMMA))) {
								match(ExpressParserTokenTypes.COMMA);
								expression();
								astFactory.addASTChild(currentAST, returnAST);
							} else {
								break _loop35648;
							}

						} while (true);
					}
					break;
				}
				case RPAREN: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			match(ExpressParserTokenTypes.RPAREN);
			entity_constructor_AST = parseAST(currentAST, ExpressParserTokenTypes.ENTITY_CONSTRUCTOR);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_3);
		}
		returnAST = entity_constructor_AST;
	}

	public final void enumeration_reference() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST enumeration_reference_AST = null;

		try {
			if (((LA1Equals(ExpressParserTokenTypes.IDENT))) && (isFirst)) {
				AST tmp215_AST = null;
				tmp215_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp215_AST);
				match(ExpressParserTokenTypes.IDENT);
				{
					switch (ExpressParserTokenTypes.getToken(LA(1))) {
					case DOT: {
						AST tmp216_AST = null;
						tmp216_AST = astFactory.create(LT(1));
						astFactory.addASTChild(currentAST, tmp216_AST);
						match(ExpressParserTokenTypes.DOT);
						AST tmp217_AST = null;
						tmp217_AST = astFactory.create(LT(1));
						astFactory.addASTChild(currentAST, tmp217_AST);
						match(ExpressParserTokenTypes.IDENT);
						break;
					}
					case COMMA:
					case RPAREN:
					case PLUS:
					case MINUS:
					case LITERAL_or:
					case LITERAL_xor:
					case RBRACK:
					case COLON:
					case LITERAL_of:
					case SEMI:
					case STAR:
					case DOUBLESTAR:
					case LITERAL_then:
					case LITERAL_to:
					case LITERAL_by:
					case RCURLY:
					case LT:
					case LE:
					case DIVSIGN:
					case LITERAL_div:
					case LITERAL_mod:
					case LITERAL_and:
					case DOUBLEBAR:
					case BAR:
					case GT:
					case GE:
					case LTGT:
					case ASSIGN:
					case COLLTGT:
					case COLEQCOL:
					case LITERAL_in:
					case LITERAL_like:
					case LITERAL_until:
					case LITERAL_while: {
						break;
					}
					default: {
						throw new NoViableAltException(LT(1), getFilename());
					}
					}
				}
				enumeration_reference_AST = (AST) currentAST.root;
			} else if ((_tokenSet_63.member(LA(1)))) {
				{
					switch (ExpressParserTokenTypes.getToken(LA(1))) {
					case TYPE_IDENT:
					case TYPE_ATTR_IDENT:
					case TYPE_VAR_IDENT:
					case TYPE_PARAM_IDENT: {
						type_ref();
						astFactory.addASTChild(currentAST, returnAST);
						match(ExpressParserTokenTypes.DOT);
						break;
					}
					case ENUMERATION_IDENT: {
						break;
					}
					default: {
						throw new NoViableAltException(LT(1), getFilename());
					}
					}
				}
				enumeration_ref();
				astFactory.addASTChild(currentAST, returnAST);
				enumeration_reference_AST = parseAST(currentAST, ExpressParserTokenTypes.ENUMERATION_REFERENCE);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_3);
		}
		returnAST = enumeration_reference_AST;
	}

	public final void type_ref() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST type_ref_AST = null;
		Token nid = null;
		AST nid_AST = null;
		Token nid2 = null;
		AST nid2_AST = null;
		Token nid3 = null;
		AST nid3_AST = null;
		Token nid4 = null;
		AST nid4_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case TYPE_IDENT: {
				nid = LT(1);
				nid_AST = astFactory.create(nid);
				astFactory.addASTChild(currentAST, nid_AST);
				match(ExpressParserTokenTypes.TYPE_IDENT);
				nid_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				type_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.TYPE_REF);
				break;
			}
			case TYPE_ATTR_IDENT: {
				nid2 = LT(1);
				nid2_AST = astFactory.create(nid2);
				astFactory.addASTChild(currentAST, nid2_AST);
				match(ExpressParserTokenTypes.TYPE_ATTR_IDENT);
				nid2_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				type_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.TYPE_REF);
				break;
			}
			case TYPE_VAR_IDENT: {
				nid3 = LT(1);
				nid3_AST = astFactory.create(nid3);
				astFactory.addASTChild(currentAST, nid3_AST);
				match(ExpressParserTokenTypes.TYPE_VAR_IDENT);
				nid3_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				type_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.TYPE_REF);
				break;
			}
			case TYPE_PARAM_IDENT: {
				nid4 = LT(1);
				nid4_AST = astFactory.create(nid4);
				astFactory.addASTChild(currentAST, nid4_AST);
				match(ExpressParserTokenTypes.TYPE_PARAM_IDENT);
				nid4_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				type_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.TYPE_REF);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_64);
		}
		returnAST = type_ref_AST;
	}

	public final void enumeration_ref() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST enumeration_ref_AST = null;
		Token nid = null;
		AST nid_AST = null;

		try {
			nid = LT(1);
			nid_AST = astFactory.create(nid);
			astFactory.addASTChild(currentAST, nid_AST);
			match(ExpressParserTokenTypes.ENUMERATION_IDENT);
			nid_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
			enumeration_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.ENUMERATION_REF);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_3);
		}
		returnAST = enumeration_ref_AST;
	}

	public final void escape_stmt() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST escape_stmt_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_escape);
			match(ExpressParserTokenTypes.SEMI);
			escape_stmt_AST = parseAST(currentAST, ExpressParserTokenTypes.ESCAPE_STMT);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_16);
		}
		returnAST = escape_stmt_AST;
	}

	public final void rel_op_extended() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST rel_op_extended_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case LT:
			case LE:
			case GT:
			case GE:
			case LTGT:
			case ASSIGN:
			case COLLTGT:
			case COLEQCOL: {
				rel_op();
				astFactory.addASTChild(currentAST, returnAST);
				rel_op_extended_AST = parseAST(currentAST, ExpressParserTokenTypes.REL_OP_EXTENDED);
				break;
			}
			case LITERAL_in: {
				AST tmp221_AST = null;
				tmp221_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp221_AST);
				match(ExpressParserTokenTypes.LITERAL_in);
				rel_op_extended_AST = parseAST(currentAST, ExpressParserTokenTypes.REL_OP_EXTENDED);
				break;
			}
			case LITERAL_like: {
				AST tmp222_AST = null;
				tmp222_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp222_AST);
				match(ExpressParserTokenTypes.LITERAL_like);
				rel_op_extended_AST = parseAST(currentAST, ExpressParserTokenTypes.REL_OP_EXTENDED);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_2);
		}
		returnAST = rel_op_extended_AST;
	}

	public final void factor() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST factor_AST = null;

		try {
			simple_factor();
			astFactory.addASTChild(currentAST, returnAST);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case DOUBLESTAR: {
					match(ExpressParserTokenTypes.DOUBLESTAR);
					simple_factor();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case COMMA:
				case RPAREN:
				case PLUS:
				case MINUS:
				case LITERAL_or:
				case LITERAL_xor:
				case RBRACK:
				case COLON:
				case LITERAL_of:
				case SEMI:
				case STAR:
				case LITERAL_then:
				case LITERAL_to:
				case LITERAL_by:
				case RCURLY:
				case LT:
				case LE:
				case DIVSIGN:
				case LITERAL_div:
				case LITERAL_mod:
				case LITERAL_and:
				case DOUBLEBAR:
				case BAR:
				case GT:
				case GE:
				case LTGT:
				case ASSIGN:
				case COLLTGT:
				case COLEQCOL:
				case LITERAL_in:
				case LITERAL_like:
				case LITERAL_until:
				case LITERAL_while: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			factor_AST = parseAST(currentAST, ExpressParserTokenTypes.FACTOR);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_65);
		}
		returnAST = factor_AST;
	}

	public final void simple_factor() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST simple_factor_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case LBRACK: {
				aggregate_initializer();
				astFactory.addASTChild(currentAST, returnAST);
				simple_factor_AST = parseAST(currentAST, ExpressParserTokenTypes.SIMPLE_FACTOR);
				break;
			}
			case LCURLY: {
				interval();
				astFactory.addASTChild(currentAST, returnAST);
				simple_factor_AST = parseAST(currentAST, ExpressParserTokenTypes.SIMPLE_FACTOR);
				break;
			}
			case LITERAL_query: {
				query_expression();
				astFactory.addASTChild(currentAST, returnAST);
				simple_factor_AST = parseAST(currentAST, ExpressParserTokenTypes.SIMPLE_FACTOR);
				break;
			}
			default:
				if (((LA1Equals(ExpressParserTokenTypes.PLUS) || LA1Equals(ExpressParserTokenTypes.MINUS) || LA1Equals(ExpressParserTokenTypes.LITERAL_not))) && (isFirst)) {
					unary_op();
					astFactory.addASTChild(currentAST, returnAST);
					{
						switch (ExpressParserTokenTypes.getToken(LA(1))) {
						case LPAREN: {
							AST tmp224_AST = null;
							tmp224_AST = astFactory.create(LT(1));
							astFactory.addASTChild(currentAST, tmp224_AST);
							match(ExpressParserTokenTypes.LPAREN);
							expression();
							astFactory.addASTChild(currentAST, returnAST);
							AST tmp225_AST = null;
							tmp225_AST = astFactory.create(LT(1));
							astFactory.addASTChild(currentAST, tmp225_AST);
							match(ExpressParserTokenTypes.RPAREN);
							break;
						}
						case CONSTANT_IDENT:
						case ENTITY_IDENT:
						case FUNCTION_IDENT:
						case PARAMETER_IDENT:
						case VARIABLE_IDENT:
						case ATTRIBUTE_IDENT:
						case ENTITY_ATTR_IDENT:
						case TYPE_ATTR_IDENT:
						case ENTITY_VAR_IDENT:
						case TYPE_VAR_IDENT:
						case ENTITY_PARAM_IDENT:
						case TYPE_PARAM_IDENT:
						case IDENT:
						case LITERAL_const_e:
						case LITERAL_pi:
						case LITERAL_self:
						case QUESTION:
						case STAR:
						case LITERAL_abs:
						case LITERAL_acos:
						case LITERAL_asin:
						case LITERAL_atan:
						case LITERAL_blength:
						case LITERAL_cos:
						case LITERAL_exists:
						case LITERAL_exp:
						case LITERAL_format:
						case LITERAL_hibound:
						case LITERAL_hiindex:
						case LITERAL_length:
						case LITERAL_lobound:
						case LITERAL_loindex:
						case LITERAL_log:
						case LOG2:
						case LOG10:
						case LITERAL_nvl:
						case LITERAL_odd:
						case LITERAL_rolesof:
						case LITERAL_sin:
						case LITERAL_sizeof:
						case LITERAL_sqrt:
						case LITERAL_tan:
						case LITERAL_typeof:
						case LITERAL_usedin:
						case LITERAL_value:
						case LITERAL_value_in:
						case LITERAL_value_unique:
						case INT:
						case STRING:
						case LITERAL_false:
						case LITERAL_true:
						case LITERAL_unknown: {
							primary();
							astFactory.addASTChild(currentAST, returnAST);
							break;
						}
						default: {
							throw new NoViableAltException(LT(1), getFilename());
						}
						}
					}
					simple_factor_AST = (AST) currentAST.root;
				} else if (((LA1Equals(ExpressParserTokenTypes.LPAREN))) && (isFirst)) {
					AST tmp226_AST = null;
					tmp226_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp226_AST);
					match(ExpressParserTokenTypes.LPAREN);
					expression();
					astFactory.addASTChild(currentAST, returnAST);
					AST tmp227_AST = null;
					tmp227_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp227_AST);
					match(ExpressParserTokenTypes.RPAREN);
					simple_factor_AST = (AST) currentAST.root;
				} else if (((_tokenSet_66.member(LA(1)))) && (isFirst)) {
					literal();
					astFactory.addASTChild(currentAST, returnAST);
					simple_factor_AST = (AST) currentAST.root;
				} else if ((((LA(1) >= ExpressParserTokenTypes.LITERAL_const_e.getIndex() && LA(1) <= ExpressParserTokenTypes.STAR.getIndex()))) && (isFirst)) {
					built_in_constant();
					astFactory.addASTChild(currentAST, returnAST);
					{
						_loop35832: do {
							if ((LA1Equals(ExpressParserTokenTypes.LBRACK) || LA1Equals(ExpressParserTokenTypes.DOT) || LA1Equals(ExpressParserTokenTypes.BACKSLASH))) {
								qualifier();
								astFactory.addASTChild(currentAST, returnAST);
							} else {
								break _loop35832;
							}

						} while (true);
					}
					simple_factor_AST = (AST) currentAST.root;
				} else if ((((LA(1) >= ExpressParserTokenTypes.LITERAL_abs.getIndex() && LA(1) <= ExpressParserTokenTypes.LITERAL_value_unique.getIndex()))) && (isFirst)) {
					built_in_function();
					astFactory.addASTChild(currentAST, returnAST);
					{
						switch (ExpressParserTokenTypes.getToken(LA(1))) {
						case LPAREN: {
							actual_parameter_list();
							astFactory.addASTChild(currentAST, returnAST);
							break;
						}
						case COMMA:
						case RPAREN:
						case PLUS:
						case MINUS:
						case LITERAL_or:
						case LITERAL_xor:
						case LBRACK:
						case RBRACK:
						case COLON:
						case LITERAL_of:
						case SEMI:
						case STAR:
						case DOT:
						case DOUBLESTAR:
						case BACKSLASH:
						case LITERAL_then:
						case LITERAL_to:
						case LITERAL_by:
						case RCURLY:
						case LT:
						case LE:
						case DIVSIGN:
						case LITERAL_div:
						case LITERAL_mod:
						case LITERAL_and:
						case DOUBLEBAR:
						case BAR:
						case GT:
						case GE:
						case LTGT:
						case ASSIGN:
						case COLLTGT:
						case COLEQCOL:
						case LITERAL_in:
						case LITERAL_like:
						case LITERAL_until:
						case LITERAL_while: {
							break;
						}
						default: {
							throw new NoViableAltException(LT(1), getFilename());
						}
						}
					}
					{
						_loop35835: do {
							if ((LA1Equals(ExpressParserTokenTypes.LBRACK) || LA1Equals(ExpressParserTokenTypes.DOT) || LA1Equals(ExpressParserTokenTypes.BACKSLASH))) {
								qualifier();
								astFactory.addASTChild(currentAST, returnAST);
							} else {
								break _loop35835;
							}

						} while (true);
					}
					simple_factor_AST = (AST) currentAST.root;
				} else if (((LA1Equals(ExpressParserTokenTypes.IDENT))) && (isFirst)) {
					AST tmp228_AST = null;
					tmp228_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp228_AST);
					match(ExpressParserTokenTypes.IDENT);
					{
						switch (ExpressParserTokenTypes.getToken(LA(1))) {
						case LPAREN: {
							AST tmp229_AST = null;
							tmp229_AST = astFactory.create(LT(1));
							astFactory.addASTChild(currentAST, tmp229_AST);
							match(ExpressParserTokenTypes.LPAREN);
							{
								switch (ExpressParserTokenTypes.getToken(LA(1))) {
								case CONSTANT_IDENT:
								case ENTITY_IDENT:
								case FUNCTION_IDENT:
								case PARAMETER_IDENT:
								case TYPE_IDENT:
								case VARIABLE_IDENT:
								case ENUMERATION_IDENT:
								case ATTRIBUTE_IDENT:
								case ENTITY_ATTR_IDENT:
								case TYPE_ATTR_IDENT:
								case ENTITY_VAR_IDENT:
								case TYPE_VAR_IDENT:
								case ENTITY_PARAM_IDENT:
								case TYPE_PARAM_IDENT:
								case LPAREN:
								case PLUS:
								case MINUS:
								case LBRACK:
								case IDENT:
								case LITERAL_const_e:
								case LITERAL_pi:
								case LITERAL_self:
								case QUESTION:
								case STAR:
								case LITERAL_abs:
								case LITERAL_acos:
								case LITERAL_asin:
								case LITERAL_atan:
								case LITERAL_blength:
								case LITERAL_cos:
								case LITERAL_exists:
								case LITERAL_exp:
								case LITERAL_format:
								case LITERAL_hibound:
								case LITERAL_hiindex:
								case LITERAL_length:
								case LITERAL_lobound:
								case LITERAL_loindex:
								case LITERAL_log:
								case LOG2:
								case LOG10:
								case LITERAL_nvl:
								case LITERAL_odd:
								case LITERAL_rolesof:
								case LITERAL_sin:
								case LITERAL_sizeof:
								case LITERAL_sqrt:
								case LITERAL_tan:
								case LITERAL_typeof:
								case LITERAL_usedin:
								case LITERAL_value:
								case LITERAL_value_in:
								case LITERAL_value_unique:
								case LCURLY:
								case INT:
								case STRING:
								case LITERAL_false:
								case LITERAL_true:
								case LITERAL_unknown:
								case LITERAL_query:
								case LITERAL_not: {
									expression();
									astFactory.addASTChild(currentAST, returnAST);
									{
										_loop35839: do {
											if ((LA1Equals(ExpressParserTokenTypes.COMMA))) {
												AST tmp230_AST = null;
												tmp230_AST = astFactory.create(LT(1));
												astFactory.addASTChild(currentAST, tmp230_AST);
												match(ExpressParserTokenTypes.COMMA);
												expression();
												astFactory.addASTChild(currentAST, returnAST);
											} else {
												break _loop35839;
											}

										} while (true);
									}
									break;
								}
								case RPAREN: {
									break;
								}
								default: {
									throw new NoViableAltException(LT(1), getFilename());
								}
								}
							}
							AST tmp231_AST = null;
							tmp231_AST = astFactory.create(LT(1));
							astFactory.addASTChild(currentAST, tmp231_AST);
							match(ExpressParserTokenTypes.RPAREN);
							break;
						}
						case COMMA:
						case RPAREN:
						case PLUS:
						case MINUS:
						case LITERAL_or:
						case LITERAL_xor:
						case LBRACK:
						case RBRACK:
						case COLON:
						case LITERAL_of:
						case SEMI:
						case STAR:
						case DOT:
						case DOUBLESTAR:
						case BACKSLASH:
						case LITERAL_then:
						case LITERAL_to:
						case LITERAL_by:
						case RCURLY:
						case LT:
						case LE:
						case DIVSIGN:
						case LITERAL_div:
						case LITERAL_mod:
						case LITERAL_and:
						case DOUBLEBAR:
						case BAR:
						case GT:
						case GE:
						case LTGT:
						case ASSIGN:
						case COLLTGT:
						case COLEQCOL:
						case LITERAL_in:
						case LITERAL_like:
						case LITERAL_until:
						case LITERAL_while: {
							break;
						}
						default: {
							throw new NoViableAltException(LT(1), getFilename());
						}
						}
					}
					{
						if ((LA1Equals(ExpressParserTokenTypes.DOT))) {
							AST tmp232_AST = null;
							tmp232_AST = astFactory.create(LT(1));
							astFactory.addASTChild(currentAST, tmp232_AST);
							match(ExpressParserTokenTypes.DOT);
							AST tmp233_AST = null;
							tmp233_AST = astFactory.create(LT(1));
							astFactory.addASTChild(currentAST, tmp233_AST);
							match(ExpressParserTokenTypes.IDENT);
						} else if ((_tokenSet_0.member(LA(1)))) {
						} else {
							throw new NoViableAltException(LT(1), getFilename());
						}

					}
					{
						_loop35842: do {
							if ((LA1Equals(ExpressParserTokenTypes.LBRACK) || LA1Equals(ExpressParserTokenTypes.DOT) || LA1Equals(ExpressParserTokenTypes.BACKSLASH))) {
								qualifier();
								astFactory.addASTChild(currentAST, returnAST);
							} else {
								break _loop35842;
							}

						} while (true);
					}
					simple_factor_AST = (AST) currentAST.root;
				} else if (((_tokenSet_67.member(LA(1)))) && (LA(2) == ExpressParserTokenTypes.LPAREN.getIndex())) {
					entity_constructor();
					astFactory.addASTChild(currentAST, returnAST);
					simple_factor_AST = parseAST(currentAST, ExpressParserTokenTypes.SIMPLE_FACTOR);
				} else if (((_tokenSet_68.member(LA(1))))
						&& (LA1Equals(ExpressParserTokenTypes.ENUMERATION_IDENT) || LA(3) == ExpressParserTokenTypes.ENUMERATION_IDENT.getIndex())) {
					enumeration_reference();
					astFactory.addASTChild(currentAST, returnAST);
					simple_factor_AST = parseAST(currentAST, ExpressParserTokenTypes.SIMPLE_FACTOR);
				} else if ((_tokenSet_69.member(LA(1)))) {
					{
						{
							switch (ExpressParserTokenTypes.getToken(LA(1))) {
							case PLUS:
							case MINUS:
							case LITERAL_not: {
								unary_op();
								astFactory.addASTChild(currentAST, returnAST);
								break;
							}
							case CONSTANT_IDENT:
							case ENTITY_IDENT:
							case FUNCTION_IDENT:
							case PARAMETER_IDENT:
							case VARIABLE_IDENT:
							case ATTRIBUTE_IDENT:
							case ENTITY_ATTR_IDENT:
							case TYPE_ATTR_IDENT:
							case ENTITY_VAR_IDENT:
							case TYPE_VAR_IDENT:
							case ENTITY_PARAM_IDENT:
							case TYPE_PARAM_IDENT:
							case LPAREN:
							case IDENT:
							case LITERAL_const_e:
							case LITERAL_pi:
							case LITERAL_self:
							case QUESTION:
							case STAR:
							case LITERAL_abs:
							case LITERAL_acos:
							case LITERAL_asin:
							case LITERAL_atan:
							case LITERAL_blength:
							case LITERAL_cos:
							case LITERAL_exists:
							case LITERAL_exp:
							case LITERAL_format:
							case LITERAL_hibound:
							case LITERAL_hiindex:
							case LITERAL_length:
							case LITERAL_lobound:
							case LITERAL_loindex:
							case LITERAL_log:
							case LOG2:
							case LOG10:
							case LITERAL_nvl:
							case LITERAL_odd:
							case LITERAL_rolesof:
							case LITERAL_sin:
							case LITERAL_sizeof:
							case LITERAL_sqrt:
							case LITERAL_tan:
							case LITERAL_typeof:
							case LITERAL_usedin:
							case LITERAL_value:
							case LITERAL_value_in:
							case LITERAL_value_unique:
							case INT:
							case STRING:
							case LITERAL_false:
							case LITERAL_true:
							case LITERAL_unknown: {
								break;
							}
							default: {
								throw new NoViableAltException(LT(1), getFilename());
							}
							}
						}
						{
							switch (ExpressParserTokenTypes.getToken(LA(1))) {
							case LPAREN: {
								match(ExpressParserTokenTypes.LPAREN);
								expression();
								astFactory.addASTChild(currentAST, returnAST);
								match(ExpressParserTokenTypes.RPAREN);
								break;
							}
							case CONSTANT_IDENT:
							case ENTITY_IDENT:
							case FUNCTION_IDENT:
							case PARAMETER_IDENT:
							case VARIABLE_IDENT:
							case ATTRIBUTE_IDENT:
							case ENTITY_ATTR_IDENT:
							case TYPE_ATTR_IDENT:
							case ENTITY_VAR_IDENT:
							case TYPE_VAR_IDENT:
							case ENTITY_PARAM_IDENT:
							case TYPE_PARAM_IDENT:
							case IDENT:
							case LITERAL_const_e:
							case LITERAL_pi:
							case LITERAL_self:
							case QUESTION:
							case STAR:
							case LITERAL_abs:
							case LITERAL_acos:
							case LITERAL_asin:
							case LITERAL_atan:
							case LITERAL_blength:
							case LITERAL_cos:
							case LITERAL_exists:
							case LITERAL_exp:
							case LITERAL_format:
							case LITERAL_hibound:
							case LITERAL_hiindex:
							case LITERAL_length:
							case LITERAL_lobound:
							case LITERAL_loindex:
							case LITERAL_log:
							case LOG2:
							case LOG10:
							case LITERAL_nvl:
							case LITERAL_odd:
							case LITERAL_rolesof:
							case LITERAL_sin:
							case LITERAL_sizeof:
							case LITERAL_sqrt:
							case LITERAL_tan:
							case LITERAL_typeof:
							case LITERAL_usedin:
							case LITERAL_value:
							case LITERAL_value_in:
							case LITERAL_value_unique:
							case INT:
							case STRING:
							case LITERAL_false:
							case LITERAL_true:
							case LITERAL_unknown: {
								primary();
								astFactory.addASTChild(currentAST, returnAST);
								break;
							}
							default: {
								throw new NoViableAltException(LT(1), getFilename());
							}
							}
						}
					}
					simple_factor_AST = parseAST(currentAST, ExpressParserTokenTypes.SIMPLE_FACTOR);
				} else {
					throw new NoViableAltException(LT(1), getFilename());
				}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_3);
		}
		returnAST = simple_factor_AST;
	}

	public final void formal_parameter() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST formal_parameter_AST = null;

		try {
			parameter_id();
			astFactory.addASTChild(currentAST, returnAST);
			{
				_loop35660: do {
					if ((LA1Equals(ExpressParserTokenTypes.COMMA))) {
						match(ExpressParserTokenTypes.COMMA);
						parameter_id();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35660;
					}

				} while (true);
			}
			match(ExpressParserTokenTypes.COLON);
			parameter_type();
			astFactory.addASTChild(currentAST, returnAST);
			formal_parameter_AST = parseAST(currentAST, ExpressParserTokenTypes.FORMAL_PARAMETER);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_70);
		}
		returnAST = formal_parameter_AST;
	}

	public final void parameter_id() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST parameter_id_AST = null;
		Token id = null;
		AST id_AST = null;
		Token nid = null;
		AST nid_AST = null;
		Token nid2 = null;
		AST nid2_AST = null;
		Token nid3 = null;
		AST nid3_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case PARAMETER_IDENT: {
				nid = LT(1);
				nid_AST = astFactory.create(nid);
				astFactory.addASTChild(currentAST, nid_AST);
				match(ExpressParserTokenTypes.PARAMETER_IDENT);
				nid_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				parameter_id_AST = parseAST(currentAST, ExpressParserTokenTypes.PARAMETER_ID);
				break;
			}
			case ENTITY_PARAM_IDENT: {
				nid2 = LT(1);
				nid2_AST = astFactory.create(nid2);
				astFactory.addASTChild(currentAST, nid2_AST);
				match(ExpressParserTokenTypes.ENTITY_PARAM_IDENT);
				nid2_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				parameter_id_AST = parseAST(currentAST, ExpressParserTokenTypes.PARAMETER_ID);
				break;
			}
			case TYPE_PARAM_IDENT: {
				nid3 = LT(1);
				nid3_AST = astFactory.create(nid3);
				astFactory.addASTChild(currentAST, nid3_AST);
				match(ExpressParserTokenTypes.TYPE_PARAM_IDENT);
				nid3_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				parameter_id_AST = parseAST(currentAST, ExpressParserTokenTypes.PARAMETER_ID);
				break;
			}
			default:
				if (((LA1Equals(ExpressParserTokenTypes.IDENT))) && (isFirst)) {
					id = LT(1);
					id_AST = astFactory.create(id);
					astFactory.addASTChild(currentAST, id_AST);
					match(ExpressParserTokenTypes.IDENT);
					addId(id.getText(), ExpressParserTokenTypes.PARAMETER_IDENT);
					parameter_id_AST = (AST) currentAST.root;
				} else {
					throw new NoViableAltException(LT(1), getFilename());
				}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_30);
		}
		returnAST = parameter_id_AST;
	}

	public final void function_call() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST function_call_AST = null;

		try {
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_abs:
				case LITERAL_acos:
				case LITERAL_asin:
				case LITERAL_atan:
				case LITERAL_blength:
				case LITERAL_cos:
				case LITERAL_exists:
				case LITERAL_exp:
				case LITERAL_format:
				case LITERAL_hibound:
				case LITERAL_hiindex:
				case LITERAL_length:
				case LITERAL_lobound:
				case LITERAL_loindex:
				case LITERAL_log:
				case LOG2:
				case LOG10:
				case LITERAL_nvl:
				case LITERAL_odd:
				case LITERAL_rolesof:
				case LITERAL_sin:
				case LITERAL_sizeof:
				case LITERAL_sqrt:
				case LITERAL_tan:
				case LITERAL_typeof:
				case LITERAL_usedin:
				case LITERAL_value:
				case LITERAL_value_in:
				case LITERAL_value_unique: {
					built_in_function();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case FUNCTION_IDENT: {
					function_ref();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LPAREN: {
					actual_parameter_list();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case COMMA:
				case RPAREN:
				case PLUS:
				case MINUS:
				case LITERAL_or:
				case LITERAL_xor:
				case LBRACK:
				case RBRACK:
				case COLON:
				case LITERAL_of:
				case SEMI:
				case STAR:
				case DOT:
				case DOUBLESTAR:
				case BACKSLASH:
				case LITERAL_then:
				case LITERAL_to:
				case LITERAL_by:
				case RCURLY:
				case LT:
				case LE:
				case DIVSIGN:
				case LITERAL_div:
				case LITERAL_mod:
				case LITERAL_and:
				case DOUBLEBAR:
				case BAR:
				case GT:
				case GE:
				case LTGT:
				case ASSIGN:
				case COLLTGT:
				case COLEQCOL:
				case LITERAL_in:
				case LITERAL_like:
				case LITERAL_until:
				case LITERAL_while: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			function_call_AST = parseAST(currentAST, ExpressParserTokenTypes.FUNCTION_CALL);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_0);
		}
		returnAST = function_call_AST;
	}

	public final void function_ref() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST function_ref_AST = null;
		Token nid = null;
		AST nid_AST = null;

		try {
			nid = LT(1);
			nid_AST = astFactory.create(nid);
			astFactory.addASTChild(currentAST, nid_AST);
			match(ExpressParserTokenTypes.FUNCTION_IDENT);
			nid_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
			function_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.FUNCTION_REF);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_71);
		}
		returnAST = function_ref_AST;
	}

	public final void function_head() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST function_head_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_function);
			function_id();
			astFactory.addASTChild(currentAST, returnAST);
			newScope();
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LPAREN: {
					match(ExpressParserTokenTypes.LPAREN);
					formal_parameter();
					astFactory.addASTChild(currentAST, returnAST);
					{
						_loop35672: do {
							if ((LA1Equals(ExpressParserTokenTypes.SEMI))) {
								match(ExpressParserTokenTypes.SEMI);
								formal_parameter();
								astFactory.addASTChild(currentAST, returnAST);
							} else {
								break _loop35672;
							}

						} while (true);
					}
					match(ExpressParserTokenTypes.RPAREN);
					break;
				}
				case COLON: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			match(ExpressParserTokenTypes.COLON);
			parameter_type();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.SEMI);
			function_head_AST = parseAST(currentAST, ExpressParserTokenTypes.FUNCTION_HEAD);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_34);
		}
		returnAST = function_head_AST;
	}

	public final void function_id() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST function_id_AST = null;
		Token id = null;
		AST id_AST = null;
		Token nid = null;
		AST nid_AST = null;

		try {
			if (((LA1Equals(ExpressParserTokenTypes.IDENT))) && (isFirst)) {
				id = LT(1);
				id_AST = astFactory.create(id);
				astFactory.addASTChild(currentAST, id_AST);
				match(ExpressParserTokenTypes.IDENT);
				addId(id.getText(), ExpressParserTokenTypes.FUNCTION_IDENT);
				function_id_AST = (AST) currentAST.root;
			} else if ((LA1Equals(ExpressParserTokenTypes.FUNCTION_IDENT))) {
				nid = LT(1);
				nid_AST = astFactory.create(nid);
				astFactory.addASTChild(currentAST, nid_AST);
				match(ExpressParserTokenTypes.FUNCTION_IDENT);
				nid_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				function_id_AST = parseAST(currentAST, ExpressParserTokenTypes.FUNCTION_ID);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_72);
		}
		returnAST = function_id_AST;
	}

	public final void general_aggregation_types() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST general_aggregation_types_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case LITERAL_array: {
				general_array_type();
				astFactory.addASTChild(currentAST, returnAST);
				general_aggregation_types_AST = parseAST(currentAST, ExpressParserTokenTypes.GENERAL_AGGREGATION_TYPES);
				break;
			}
			case LITERAL_bag: {
				general_bag_type();
				astFactory.addASTChild(currentAST, returnAST);
				general_aggregation_types_AST = parseAST(currentAST, ExpressParserTokenTypes.GENERAL_AGGREGATION_TYPES);
				break;
			}
			case LITERAL_list: {
				general_list_type();
				astFactory.addASTChild(currentAST, returnAST);
				general_aggregation_types_AST = parseAST(currentAST, ExpressParserTokenTypes.GENERAL_AGGREGATION_TYPES);
				break;
			}
			case LITERAL_set: {
				general_set_type();
				astFactory.addASTChild(currentAST, returnAST);
				general_aggregation_types_AST = parseAST(currentAST, ExpressParserTokenTypes.GENERAL_AGGREGATION_TYPES);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_7);
		}
		returnAST = general_aggregation_types_AST;
	}

	public final void generic_type() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST generic_type_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_generic);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case COLON: {
					match(ExpressParserTokenTypes.COLON);
					type_label();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case RPAREN:
				case SEMI:
				case COLEQ: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			generic_type_AST = parseAST(currentAST, ExpressParserTokenTypes.GENERIC_TYPE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_7);
		}
		returnAST = generic_type_AST;
	}

	public final void generic_entity_type() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST generic_entity_type_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_generic_entity);
			generic_entity_type_AST = parseAST(currentAST, ExpressParserTokenTypes.GENERIC_ENTITY_TYPE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_7);
		}
		returnAST = generic_entity_type_AST;
	}

	public final void general_array_type() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST general_array_type_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_array);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LBRACK: {
					bound_spec();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case LITERAL_of: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			match(ExpressParserTokenTypes.LITERAL_of);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_optional: {
					AST tmp249_AST = null;
					tmp249_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp249_AST);
					match(ExpressParserTokenTypes.LITERAL_optional);
					break;
				}
				case ENTITY_IDENT:
				case TYPE_IDENT:
				case ENTITY_ATTR_IDENT:
				case TYPE_ATTR_IDENT:
				case ENTITY_VAR_IDENT:
				case TYPE_VAR_IDENT:
				case ENTITY_PARAM_IDENT:
				case TYPE_PARAM_IDENT:
				case LITERAL_aggregate:
				case IDENT:
				case LITERAL_array:
				case LITERAL_unique:
				case LITERAL_bag:
				case LITERAL_binary:
				case LITERAL_boolean:
				case LITERAL_set:
				case LITERAL_list:
				case LITERAL_generic:
				case LITERAL_generic_entity:
				case LITERAL_integer:
				case LITERAL_logical:
				case LITERAL_number:
				case LITERAL_real:
				case LITERAL_string: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_unique: {
					AST tmp250_AST = null;
					tmp250_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp250_AST);
					match(ExpressParserTokenTypes.LITERAL_unique);
					break;
				}
				case ENTITY_IDENT:
				case TYPE_IDENT:
				case ENTITY_ATTR_IDENT:
				case TYPE_ATTR_IDENT:
				case ENTITY_VAR_IDENT:
				case TYPE_VAR_IDENT:
				case ENTITY_PARAM_IDENT:
				case TYPE_PARAM_IDENT:
				case LITERAL_aggregate:
				case IDENT:
				case LITERAL_array:
				case LITERAL_bag:
				case LITERAL_binary:
				case LITERAL_boolean:
				case LITERAL_set:
				case LITERAL_list:
				case LITERAL_generic:
				case LITERAL_generic_entity:
				case LITERAL_integer:
				case LITERAL_logical:
				case LITERAL_number:
				case LITERAL_real:
				case LITERAL_string: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			parameter_type();
			astFactory.addASTChild(currentAST, returnAST);
			general_array_type_AST = parseAST(currentAST, ExpressParserTokenTypes.GENERAL_ARRAY_TYPE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_7);
		}
		returnAST = general_array_type_AST;
	}

	public final void general_bag_type() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST general_bag_type_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_bag);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LBRACK: {
					bound_spec();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case LITERAL_of: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			match(ExpressParserTokenTypes.LITERAL_of);
			parameter_type();
			astFactory.addASTChild(currentAST, returnAST);
			general_bag_type_AST = parseAST(currentAST, ExpressParserTokenTypes.GENERAL_BAG_TYPE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_7);
		}
		returnAST = general_bag_type_AST;
	}

	public final void general_list_type() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST general_list_type_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_list);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LBRACK: {
					bound_spec();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case LITERAL_of: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			match(ExpressParserTokenTypes.LITERAL_of);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_unique: {
					AST tmp255_AST = null;
					tmp255_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp255_AST);
					match(ExpressParserTokenTypes.LITERAL_unique);
					break;
				}
				case ENTITY_IDENT:
				case TYPE_IDENT:
				case ENTITY_ATTR_IDENT:
				case TYPE_ATTR_IDENT:
				case ENTITY_VAR_IDENT:
				case TYPE_VAR_IDENT:
				case ENTITY_PARAM_IDENT:
				case TYPE_PARAM_IDENT:
				case LITERAL_aggregate:
				case IDENT:
				case LITERAL_array:
				case LITERAL_bag:
				case LITERAL_binary:
				case LITERAL_boolean:
				case LITERAL_set:
				case LITERAL_list:
				case LITERAL_generic:
				case LITERAL_generic_entity:
				case LITERAL_integer:
				case LITERAL_logical:
				case LITERAL_number:
				case LITERAL_real:
				case LITERAL_string: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			parameter_type();
			astFactory.addASTChild(currentAST, returnAST);
			general_list_type_AST = parseAST(currentAST, ExpressParserTokenTypes.GENERAL_LIST_TYPE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_7);
		}
		returnAST = general_list_type_AST;
	}

	public final void general_set_type() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST general_set_type_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_set);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LBRACK: {
					bound_spec();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case LITERAL_of: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			match(ExpressParserTokenTypes.LITERAL_of);
			parameter_type();
			astFactory.addASTChild(currentAST, returnAST);
			general_set_type_AST = parseAST(currentAST, ExpressParserTokenTypes.GENERAL_SET_TYPE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_7);
		}
		returnAST = general_set_type_AST;
	}

	public final void parameter_ref() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST parameter_ref_AST = null;
		Token nid = null;
		AST nid_AST = null;
		Token nid2 = null;
		AST nid2_AST = null;
		Token nid3 = null;
		AST nid3_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case PARAMETER_IDENT: {
				nid = LT(1);
				nid_AST = astFactory.create(nid);
				astFactory.addASTChild(currentAST, nid_AST);
				match(ExpressParserTokenTypes.PARAMETER_IDENT);
				nid_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				parameter_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.PARAMETER_REF);
				break;
			}
			case ENTITY_PARAM_IDENT: {
				nid2 = LT(1);
				nid2_AST = astFactory.create(nid2);
				astFactory.addASTChild(currentAST, nid2_AST);
				match(ExpressParserTokenTypes.ENTITY_PARAM_IDENT);
				nid2_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				parameter_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.PARAMETER_REF);
				break;
			}
			case TYPE_PARAM_IDENT: {
				nid3 = LT(1);
				nid3_AST = astFactory.create(nid3);
				astFactory.addASTChild(currentAST, nid3_AST);
				match(ExpressParserTokenTypes.TYPE_PARAM_IDENT);
				nid3_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				parameter_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.PARAMETER_REF);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_18);
		}
		returnAST = parameter_ref_AST;
	}

	public final void variable_ref() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST variable_ref_AST = null;
		Token nid = null;
		AST nid_AST = null;
		Token nid2 = null;
		AST nid2_AST = null;
		Token nid3 = null;
		AST nid3_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case VARIABLE_IDENT: {
				nid = LT(1);
				nid_AST = astFactory.create(nid);
				astFactory.addASTChild(currentAST, nid_AST);
				match(ExpressParserTokenTypes.VARIABLE_IDENT);
				nid_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				variable_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.VARIABLE_REF);
				break;
			}
			case ENTITY_VAR_IDENT: {
				nid2 = LT(1);
				nid2_AST = astFactory.create(nid2);
				astFactory.addASTChild(currentAST, nid2_AST);
				match(ExpressParserTokenTypes.ENTITY_VAR_IDENT);
				nid2_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				variable_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.VARIABLE_REF);
				break;
			}
			case TYPE_VAR_IDENT: {
				nid3 = LT(1);
				nid3_AST = astFactory.create(nid3);
				astFactory.addASTChild(currentAST, nid3_AST);
				match(ExpressParserTokenTypes.TYPE_VAR_IDENT);
				nid3_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				variable_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.VARIABLE_REF);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_18);
		}
		returnAST = variable_ref_AST;
	}

	public final void if_stmt() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST if_stmt_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_if);
			logical_expression();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.LITERAL_then);
			stmt();
			astFactory.addASTChild(currentAST, returnAST);
			{
				_loop35694: do {
					if ((_tokenSet_15.member(LA(1)))) {
						stmt();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35694;
					}

				} while (true);
			}
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_else: {
					else_clause();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case LITERAL_end_if: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			match(ExpressParserTokenTypes.LITERAL_end_if);
			match(ExpressParserTokenTypes.SEMI);
			if_stmt_AST = parseAST(currentAST, ExpressParserTokenTypes.IF_STMT);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_16);
		}
		returnAST = if_stmt_AST;
	}

	public final void else_clause() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST else_clause_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_else);
			stmt();
			astFactory.addASTChild(currentAST, returnAST);
			{
				_loop35698: do {
					if ((_tokenSet_15.member(LA(1)))) {
						stmt();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35698;
					}

				} while (true);
			}
			else_clause_AST = parseAST(currentAST, ExpressParserTokenTypes.ELSE_CLAUSE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_73);
		}
		returnAST = else_clause_AST;
	}

	public final void increment() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST increment_AST = null;

		try {
			numeric_expression();
			astFactory.addASTChild(currentAST, returnAST);
			increment_AST = parseAST(currentAST, ExpressParserTokenTypes.INCREMENT);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_74);
		}
		returnAST = increment_AST;
	}

	public final void increment_control() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST increment_control_AST = null;

		try {
			variable_id();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.COLEQ);
			bound_1();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.LITERAL_to);
			bound_2();
			astFactory.addASTChild(currentAST, returnAST);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_by: {
					match(ExpressParserTokenTypes.LITERAL_by);
					increment();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case SEMI:
				case LITERAL_until:
				case LITERAL_while: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			increment_control_AST = parseAST(currentAST, ExpressParserTokenTypes.INCREMENT_CONTROL);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_74);
		}
		returnAST = increment_control_AST;
	}

	public final void index() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST index_AST = null;

		try {
			numeric_expression();
			astFactory.addASTChild(currentAST, returnAST);
			index_AST = parseAST(currentAST, ExpressParserTokenTypes.INDEX);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_75);
		}
		returnAST = index_AST;
	}

	public final void index_1() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST index_1_AST = null;

		try {
			index();
			astFactory.addASTChild(currentAST, returnAST);
			index_1_AST = parseAST(currentAST, ExpressParserTokenTypes.INDEX_1);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_75);
		}
		returnAST = index_1_AST;
	}

	public final void index_2() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST index_2_AST = null;

		try {
			index();
			astFactory.addASTChild(currentAST, returnAST);
			index_2_AST = parseAST(currentAST, ExpressParserTokenTypes.INDEX_2);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_76);
		}
		returnAST = index_2_AST;
	}

	public final void index_qualifier() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST index_qualifier_AST = null;

		try {
			match(ExpressParserTokenTypes.LBRACK);
			index_1();
			astFactory.addASTChild(currentAST, returnAST);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case COLON: {
					match(ExpressParserTokenTypes.COLON);
					index_2();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case RBRACK: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			match(ExpressParserTokenTypes.RBRACK);
			index_qualifier_AST = parseAST(currentAST, ExpressParserTokenTypes.INDEX_QUALIFIER);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_18);
		}
		returnAST = index_qualifier_AST;
	}

	public final void integer_type() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST integer_type_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_integer);
			integer_type_AST = parseAST(currentAST, ExpressParserTokenTypes.INTEGER_TYPE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_7);
		}
		returnAST = integer_type_AST;
	}

	public final void interval() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST interval_AST = null;

		try {
			match(ExpressParserTokenTypes.LCURLY);
			interval_low();
			astFactory.addASTChild(currentAST, returnAST);
			interval_op();
			astFactory.addASTChild(currentAST, returnAST);
			interval_item();
			astFactory.addASTChild(currentAST, returnAST);
			interval_op();
			astFactory.addASTChild(currentAST, returnAST);
			interval_high();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.RCURLY);
			interval_AST = parseAST(currentAST, ExpressParserTokenTypes.INTERVAL);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_3);
		}
		returnAST = interval_AST;
	}

	public final void interval_low() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST interval_low_AST = null;

		try {
			simple_expression();
			astFactory.addASTChild(currentAST, returnAST);
			interval_low_AST = parseAST(currentAST, ExpressParserTokenTypes.INTERVAL_LOW);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_77);
		}
		returnAST = interval_low_AST;
	}

	public final void interval_op() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST interval_op_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case LT: {
				AST tmp272_AST = null;
				tmp272_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp272_AST);
				match(ExpressParserTokenTypes.LT);
				interval_op_AST = parseAST(currentAST, ExpressParserTokenTypes.INTERVAL_OP);
				break;
			}
			case LE: {
				AST tmp273_AST = null;
				tmp273_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp273_AST);
				match(ExpressParserTokenTypes.LE);
				interval_op_AST = parseAST(currentAST, ExpressParserTokenTypes.INTERVAL_OP);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_2);
		}
		returnAST = interval_op_AST;
	}

	public final void interval_item() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST interval_item_AST = null;

		try {
			simple_expression();
			astFactory.addASTChild(currentAST, returnAST);
			interval_item_AST = parseAST(currentAST, ExpressParserTokenTypes.INTERVAL_ITEM);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_77);
		}
		returnAST = interval_item_AST;
	}

	public final void interval_high() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST interval_high_AST = null;

		try {
			simple_expression();
			astFactory.addASTChild(currentAST, returnAST);
			interval_high_AST = parseAST(currentAST, ExpressParserTokenTypes.INTERVAL_HIGH);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_78);
		}
		returnAST = interval_high_AST;
	}

	public final void literal() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST literal_AST = null;
		Token i = null;
		AST i_AST = null;
		Token f = null;
		AST f_AST = null;
		AST ll_AST = null;
		Token sl = null;
		AST sl_AST = null;

		boolean fl = false;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case INT: {
				i = LT(1);
				i_AST = astFactory.create(i);
				match(ExpressParserTokenTypes.INT);
				{
					switch (ExpressParserTokenTypes.getToken(LA(1))) {
					case FLOAT: {
						f = LT(1);
						f_AST = astFactory.create(f);
						match(ExpressParserTokenTypes.FLOAT);
						fl = true;
						break;
					}
					case COMMA:
					case RPAREN:
					case PLUS:
					case MINUS:
					case LITERAL_or:
					case LITERAL_xor:
					case RBRACK:
					case COLON:
					case LITERAL_of:
					case SEMI:
					case STAR:
					case DOUBLESTAR:
					case LITERAL_then:
					case LITERAL_to:
					case LITERAL_by:
					case RCURLY:
					case LT:
					case LE:
					case DIVSIGN:
					case LITERAL_div:
					case LITERAL_mod:
					case LITERAL_and:
					case DOUBLEBAR:
					case BAR:
					case GT:
					case GE:
					case LTGT:
					case ASSIGN:
					case COLLTGT:
					case COLEQCOL:
					case LITERAL_in:
					case LITERAL_like:
					case LITERAL_until:
					case LITERAL_while: {
						break;
					}
					default: {
						throw new NoViableAltException(LT(1), getFilename());
					}
					}
				}
				literal_AST = (AST) currentAST.root;
				if (fl) {
					f_AST.setText(i.getText() + f.getText());
					literal_AST = (AST) astFactory.make((new ASTArray(2)).add(astFactory.create(ExpressParserTokenTypes.LITERAL.getIndex(), "LITERAL")).add(
							(AST) astFactory.make((new ASTArray(2)).add(astFactory.create(ExpressParserTokenTypes.REAL.getIndex(), "REAL")).add(f_AST))));
				} else
					literal_AST = (AST) astFactory.make((new ASTArray(2)).add(astFactory.create(ExpressParserTokenTypes.LITERAL.getIndex(), "LITERAL")).add(
							(AST) astFactory.make((new ASTArray(2)).add(astFactory.create(ExpressParserTokenTypes.INTEGER.getIndex(), "INTEGER")).add(i_AST))));

				currentAST.root = literal_AST;
				currentAST.child = getChild(literal_AST);
				currentAST.advanceChildToEnd();
				break;
			}
			case LITERAL_false:
			case LITERAL_true:
			case LITERAL_unknown: {
				logical();
				ll_AST = (AST) returnAST;
				literal_AST = (AST) currentAST.root;
				literal_AST = makeAST(ExpressParserTokenTypes.LITERAL, ll_AST);
				currentAST.root = literal_AST;
				currentAST.child = getChild(literal_AST);
				currentAST.advanceChildToEnd();
				break;
			}
			case STRING: {
				sl = LT(1);
				sl_AST = astFactory.create(sl);
				match(ExpressParserTokenTypes.STRING);
				literal_AST = (AST) currentAST.root;
				literal_AST = (AST) astFactory.make((new ASTArray(2)).add(astFactory.create(ExpressParserTokenTypes.LITERAL.getIndex(), "LITERAL")).add(
						(AST) astFactory.make((new ASTArray(2)).add(astFactory.create(ExpressParserTokenTypes.STRING.getIndex(), "STRING")).add(sl_AST))));
				currentAST.root = literal_AST;
				currentAST.child = getChild(literal_AST);
				currentAST.advanceChildToEnd();
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_3);
		}
		returnAST = literal_AST;
	}

	public final void logical() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST logical_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case LITERAL_false: {
				AST tmp274_AST = null;
				tmp274_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp274_AST);
				match(ExpressParserTokenTypes.LITERAL_false);
				logical_AST = parseAST(currentAST, ExpressParserTokenTypes.LOGICAL);
				break;
			}
			case LITERAL_true: {
				AST tmp275_AST = null;
				tmp275_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp275_AST);
				match(ExpressParserTokenTypes.LITERAL_true);
				logical_AST = parseAST(currentAST, ExpressParserTokenTypes.LOGICAL);
				break;
			}
			case LITERAL_unknown: {
				AST tmp276_AST = null;
				tmp276_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp276_AST);
				match(ExpressParserTokenTypes.LITERAL_unknown);
				logical_AST = parseAST(currentAST, ExpressParserTokenTypes.LOGICAL);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_3);
		}
		returnAST = logical_AST;
	}

	public final void local_variable() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST local_variable_AST = null;

		try {
			variable_id();
			astFactory.addASTChild(currentAST, returnAST);
			{
				_loop35724: do {
					if ((LA1Equals(ExpressParserTokenTypes.COMMA))) {
						match(ExpressParserTokenTypes.COMMA);
						variable_id();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35724;
					}

				} while (true);
			}
			match(ExpressParserTokenTypes.COLON);
			parameter_type();
			astFactory.addASTChild(currentAST, returnAST);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case COLEQ: {
					match(ExpressParserTokenTypes.COLEQ);
					expression();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case SEMI: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			match(ExpressParserTokenTypes.SEMI);
			local_variable_AST = parseAST(currentAST, ExpressParserTokenTypes.LOCAL_VARIABLE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_79);
		}
		returnAST = local_variable_AST;
	}

	public final void logical_type() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST logical_type_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_logical);
			logical_type_AST = parseAST(currentAST, ExpressParserTokenTypes.LOGICAL_TYPE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_7);
		}
		returnAST = logical_type_AST;
	}

	public final void multiplication_like_op() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST multiplication_like_op_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case STAR: {
				AST tmp282_AST = null;
				tmp282_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp282_AST);
				match(ExpressParserTokenTypes.STAR);
				multiplication_like_op_AST = parseAST(currentAST, ExpressParserTokenTypes.MULTIPLICATION_LIKE_OP);
				break;
			}
			case DIVSIGN: {
				AST tmp283_AST = null;
				tmp283_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp283_AST);
				match(ExpressParserTokenTypes.DIVSIGN);
				multiplication_like_op_AST = parseAST(currentAST, ExpressParserTokenTypes.MULTIPLICATION_LIKE_OP);
				break;
			}
			case LITERAL_div: {
				AST tmp284_AST = null;
				tmp284_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp284_AST);
				match(ExpressParserTokenTypes.LITERAL_div);
				multiplication_like_op_AST = parseAST(currentAST, ExpressParserTokenTypes.MULTIPLICATION_LIKE_OP);
				break;
			}
			case LITERAL_mod: {
				AST tmp285_AST = null;
				tmp285_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp285_AST);
				match(ExpressParserTokenTypes.LITERAL_mod);
				multiplication_like_op_AST = parseAST(currentAST, ExpressParserTokenTypes.MULTIPLICATION_LIKE_OP);
				break;
			}
			case LITERAL_and: {
				AST tmp286_AST = null;
				tmp286_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp286_AST);
				match(ExpressParserTokenTypes.LITERAL_and);
				multiplication_like_op_AST = parseAST(currentAST, ExpressParserTokenTypes.MULTIPLICATION_LIKE_OP);
				break;
			}
			case DOUBLEBAR: {
				AST tmp287_AST = null;
				tmp287_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp287_AST);
				match(ExpressParserTokenTypes.DOUBLEBAR);
				multiplication_like_op_AST = parseAST(currentAST, ExpressParserTokenTypes.MULTIPLICATION_LIKE_OP);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_2);
		}
		returnAST = multiplication_like_op_AST;
	}

	public final void null_stmt() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST null_stmt_AST = null;

		try {
			match(ExpressParserTokenTypes.SEMI);
			null_stmt_AST = parseAST(currentAST, ExpressParserTokenTypes.NULL_STMT);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_16);
		}
		returnAST = null_stmt_AST;
	}

	public final void number_type() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST number_type_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_number);
			number_type_AST = parseAST(currentAST, ExpressParserTokenTypes.NUMBER_TYPE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_7);
		}
		returnAST = number_type_AST;
	}

	public final void one_of() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST one_of_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_oneof);
			match(ExpressParserTokenTypes.LPAREN);
			supertype_expression();
			astFactory.addASTChild(currentAST, returnAST);
			{
				_loop35736: do {
					if ((LA1Equals(ExpressParserTokenTypes.COMMA))) {
						match(ExpressParserTokenTypes.COMMA);
						supertype_expression();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35736;
					}

				} while (true);
			}
			match(ExpressParserTokenTypes.RPAREN);
			one_of_AST = parseAST(currentAST, ExpressParserTokenTypes.ONE_OF);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_80);
		}
		returnAST = one_of_AST;
	}

	public final void population() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST population_AST = null;

		try {
			entity_ref();
			astFactory.addASTChild(currentAST, returnAST);
			population_AST = parseAST(currentAST, ExpressParserTokenTypes.POPULATION);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_0);
		}
		returnAST = population_AST;
	}

	public final void precision_spec() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST precision_spec_AST = null;

		try {
			numeric_expression();
			astFactory.addASTChild(currentAST, returnAST);
			precision_spec_AST = parseAST(currentAST, ExpressParserTokenTypes.PRECISION_SPEC);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_81);
		}
		returnAST = precision_spec_AST;
	}

	public final void primary() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST primary_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case INT:
			case STRING:
			case LITERAL_false:
			case LITERAL_true:
			case LITERAL_unknown: {
				literal();
				astFactory.addASTChild(currentAST, returnAST);
				primary_AST = parseAST(currentAST, ExpressParserTokenTypes.PRIMARY);
				break;
			}
			case CONSTANT_IDENT:
			case ENTITY_IDENT:
			case FUNCTION_IDENT:
			case PARAMETER_IDENT:
			case VARIABLE_IDENT:
			case ATTRIBUTE_IDENT:
			case ENTITY_ATTR_IDENT:
			case TYPE_ATTR_IDENT:
			case ENTITY_VAR_IDENT:
			case TYPE_VAR_IDENT:
			case ENTITY_PARAM_IDENT:
			case TYPE_PARAM_IDENT:
			case IDENT:
			case LITERAL_const_e:
			case LITERAL_pi:
			case LITERAL_self:
			case QUESTION:
			case STAR:
			case LITERAL_abs:
			case LITERAL_acos:
			case LITERAL_asin:
			case LITERAL_atan:
			case LITERAL_blength:
			case LITERAL_cos:
			case LITERAL_exists:
			case LITERAL_exp:
			case LITERAL_format:
			case LITERAL_hibound:
			case LITERAL_hiindex:
			case LITERAL_length:
			case LITERAL_lobound:
			case LITERAL_loindex:
			case LITERAL_log:
			case LOG2:
			case LOG10:
			case LITERAL_nvl:
			case LITERAL_odd:
			case LITERAL_rolesof:
			case LITERAL_sin:
			case LITERAL_sizeof:
			case LITERAL_sqrt:
			case LITERAL_tan:
			case LITERAL_typeof:
			case LITERAL_usedin:
			case LITERAL_value:
			case LITERAL_value_in:
			case LITERAL_value_unique: {
				qualifiable_factor();
				astFactory.addASTChild(currentAST, returnAST);
				{
					_loop35744: do {
						if ((LA1Equals(ExpressParserTokenTypes.LBRACK) || LA1Equals(ExpressParserTokenTypes.DOT) || LA1Equals(ExpressParserTokenTypes.BACKSLASH))) {
							qualifier();
							astFactory.addASTChild(currentAST, returnAST);
						} else {
							break _loop35744;
						}

					} while (true);
				}
				primary_AST = parseAST(currentAST, ExpressParserTokenTypes.PRIMARY);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_3);
		}
		returnAST = primary_AST;
	}

	public final void qualifiable_factor() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST qualifiable_factor_AST = null;

		try {
			if (((LA1Equals(ExpressParserTokenTypes.IDENT))) && (isFirst)) {
				AST tmp294_AST = null;
				tmp294_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp294_AST);
				match(ExpressParserTokenTypes.IDENT);
				{
					switch (ExpressParserTokenTypes.getToken(LA(1))) {
					case LPAREN: {
						actual_parameter_list();
						astFactory.addASTChild(currentAST, returnAST);
						break;
					}
					case COMMA:
					case RPAREN:
					case PLUS:
					case MINUS:
					case LITERAL_or:
					case LITERAL_xor:
					case LBRACK:
					case RBRACK:
					case COLON:
					case LITERAL_of:
					case SEMI:
					case STAR:
					case DOT:
					case DOUBLESTAR:
					case BACKSLASH:
					case LITERAL_then:
					case LITERAL_to:
					case LITERAL_by:
					case RCURLY:
					case LT:
					case LE:
					case DIVSIGN:
					case LITERAL_div:
					case LITERAL_mod:
					case LITERAL_and:
					case DOUBLEBAR:
					case BAR:
					case GT:
					case GE:
					case LTGT:
					case ASSIGN:
					case COLLTGT:
					case COLEQCOL:
					case LITERAL_in:
					case LITERAL_like:
					case LITERAL_until:
					case LITERAL_while: {
						break;
					}
					default: {
						throw new NoViableAltException(LT(1), getFilename());
					}
					}
				}
				qualifiable_factor_AST = (AST) currentAST.root;
			} else if ((((LA(1) >= ExpressParserTokenTypes.LITERAL_const_e.getIndex() && LA(1) <= ExpressParserTokenTypes.STAR.getIndex()))) && (isFirst)) {
				built_in_constant();
				astFactory.addASTChild(currentAST, returnAST);
				qualifiable_factor_AST = (AST) currentAST.root;
			} else if ((((LA(1) >= ExpressParserTokenTypes.LITERAL_abs.getIndex() && LA(1) <= ExpressParserTokenTypes.LITERAL_value_unique.getIndex()))) && (isFirst)) {
				built_in_function();
				astFactory.addASTChild(currentAST, returnAST);
				{
					switch (ExpressParserTokenTypes.getToken(LA(1))) {
					case LPAREN: {
						actual_parameter_list();
						astFactory.addASTChild(currentAST, returnAST);
						break;
					}
					case COMMA:
					case RPAREN:
					case PLUS:
					case MINUS:
					case LITERAL_or:
					case LITERAL_xor:
					case LBRACK:
					case RBRACK:
					case COLON:
					case LITERAL_of:
					case SEMI:
					case STAR:
					case DOT:
					case DOUBLESTAR:
					case BACKSLASH:
					case LITERAL_then:
					case LITERAL_to:
					case LITERAL_by:
					case RCURLY:
					case LT:
					case LE:
					case DIVSIGN:
					case LITERAL_div:
					case LITERAL_mod:
					case LITERAL_and:
					case DOUBLEBAR:
					case BAR:
					case GT:
					case GE:
					case LTGT:
					case ASSIGN:
					case COLLTGT:
					case COLEQCOL:
					case LITERAL_in:
					case LITERAL_like:
					case LITERAL_until:
					case LITERAL_while: {
						break;
					}
					default: {
						throw new NoViableAltException(LT(1), getFilename());
					}
					}
				}
				qualifiable_factor_AST = (AST) currentAST.root;
			} else if (((LA(1) >= ExpressParserTokenTypes.ATTRIBUTE_IDENT.getIndex() && LA(1) <= ExpressParserTokenTypes.TYPE_ATTR_IDENT.getIndex()))) {
				attribute_ref();
				astFactory.addASTChild(currentAST, returnAST);
				qualifiable_factor_AST = parseAST(currentAST, ExpressParserTokenTypes.QUALIFIABLE_FACTOR);
			} else if ((_tokenSet_82.member(LA(1)))) {
				constant_factor();
				astFactory.addASTChild(currentAST, returnAST);
				qualifiable_factor_AST = parseAST(currentAST, ExpressParserTokenTypes.QUALIFIABLE_FACTOR);
			} else if ((_tokenSet_83.member(LA(1)))) {
				function_call();
				astFactory.addASTChild(currentAST, returnAST);
				qualifiable_factor_AST = parseAST(currentAST, ExpressParserTokenTypes.QUALIFIABLE_FACTOR);
			} else if ((_tokenSet_67.member(LA(1)))) {
				population();
				astFactory.addASTChild(currentAST, returnAST);
				qualifiable_factor_AST = parseAST(currentAST, ExpressParserTokenTypes.QUALIFIABLE_FACTOR);
			} else if ((_tokenSet_84.member(LA(1)))) {
				general_ref();
				astFactory.addASTChild(currentAST, returnAST);
				qualifiable_factor_AST = parseAST(currentAST, ExpressParserTokenTypes.QUALIFIABLE_FACTOR);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_0);
		}
		returnAST = qualifiable_factor_AST;
	}

	public final void procedure_call_stmt() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST procedure_call_stmt_AST = null;

		try {
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_insert:
				case LITERAL_remove: {
					built_in_procedure();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case PROCEDURE_IDENT: {
					procedure_ref();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LPAREN: {
					actual_parameter_list();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case SEMI: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			match(ExpressParserTokenTypes.SEMI);
			procedure_call_stmt_AST = parseAST(currentAST, ExpressParserTokenTypes.PROCEDURE_CALL_STMT);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_16);
		}
		returnAST = procedure_call_stmt_AST;
	}

	public final void procedure_ref() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST procedure_ref_AST = null;
		Token nid = null;
		AST nid_AST = null;

		try {
			nid = LT(1);
			nid_AST = astFactory.create(nid);
			astFactory.addASTChild(currentAST, nid_AST);
			match(ExpressParserTokenTypes.PROCEDURE_IDENT);
			nid_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
			procedure_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.PROCEDURE_REF);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_85);
		}
		returnAST = procedure_ref_AST;
	}

	public final void procedure_head() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST procedure_head_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_procedure);
			procedure_id();
			astFactory.addASTChild(currentAST, returnAST);
			newScope();
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LPAREN: {
					match(ExpressParserTokenTypes.LPAREN);
					{
						switch (ExpressParserTokenTypes.getToken(LA(1))) {
						case LITERAL_var: {
							AST tmp298_AST = null;
							tmp298_AST = astFactory.create(LT(1));
							astFactory.addASTChild(currentAST, tmp298_AST);
							match(ExpressParserTokenTypes.LITERAL_var);
							break;
						}
						case PARAMETER_IDENT:
						case ENTITY_PARAM_IDENT:
						case TYPE_PARAM_IDENT:
						case IDENT: {
							break;
						}
						default: {
							throw new NoViableAltException(LT(1), getFilename());
						}
						}
					}
					formal_parameter();
					astFactory.addASTChild(currentAST, returnAST);
					{
						_loop35757: do {
							if ((LA1Equals(ExpressParserTokenTypes.SEMI))) {
								match(ExpressParserTokenTypes.SEMI);
								{
									switch (ExpressParserTokenTypes.getToken(LA(1))) {
									case LITERAL_var: {
										AST tmp300_AST = null;
										tmp300_AST = astFactory.create(LT(1));
										astFactory.addASTChild(currentAST, tmp300_AST);
										match(ExpressParserTokenTypes.LITERAL_var);
										break;
									}
									case PARAMETER_IDENT:
									case ENTITY_PARAM_IDENT:
									case TYPE_PARAM_IDENT:
									case IDENT: {
										break;
									}
									default: {
										throw new NoViableAltException(LT(1), getFilename());
									}
									}
								}
								formal_parameter();
								astFactory.addASTChild(currentAST, returnAST);
							} else {
								break _loop35757;
							}

						} while (true);
					}
					match(ExpressParserTokenTypes.RPAREN);
					break;
				}
				case SEMI: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			match(ExpressParserTokenTypes.SEMI);
			procedure_head_AST = parseAST(currentAST, ExpressParserTokenTypes.PROCEDURE_HEAD);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_35);
		}
		returnAST = procedure_head_AST;
	}

	public final void procedure_id() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST procedure_id_AST = null;
		Token id = null;
		AST id_AST = null;
		Token nid = null;
		AST nid_AST = null;

		try {
			if (((LA1Equals(ExpressParserTokenTypes.IDENT))) && (isFirst)) {
				id = LT(1);
				id_AST = astFactory.create(id);
				astFactory.addASTChild(currentAST, id_AST);
				match(ExpressParserTokenTypes.IDENT);
				addId(id.getText(), ExpressParserTokenTypes.PROCEDURE_IDENT);
				procedure_id_AST = (AST) currentAST.root;
			} else if ((LA1Equals(ExpressParserTokenTypes.PROCEDURE_IDENT))) {
				nid = LT(1);
				nid_AST = astFactory.create(nid);
				astFactory.addASTChild(currentAST, nid_AST);
				match(ExpressParserTokenTypes.PROCEDURE_IDENT);
				nid_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				procedure_id_AST = parseAST(currentAST, ExpressParserTokenTypes.PROCEDURE_ID);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_28);
		}
		returnAST = procedure_id_AST;
	}

	public final void query_expression() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST query_expression_AST = null;
		if (isFirst)
			newScope1();

		try {
			match(ExpressParserTokenTypes.LITERAL_query);
			match(ExpressParserTokenTypes.LPAREN);
			variable_id();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.LTSTAR);
			aggregate_source();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.BAR);
			logical_expression();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.RPAREN);
			query_expression_AST = (AST) currentAST.root;
			upScope();
			query_expression_AST = makeAST(ExpressParserTokenTypes.QUERY_EXPRESSION, query_expression_AST);

			currentAST.root = query_expression_AST;
			currentAST.child = getChild(query_expression_AST);
			currentAST.advanceChildToEnd();
			query_expression_AST = (AST) currentAST.root;
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_3);
		}
		returnAST = query_expression_AST;
	}

	public final void real_type() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST real_type_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_real);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LPAREN: {
					match(ExpressParserTokenTypes.LPAREN);
					precision_spec();
					astFactory.addASTChild(currentAST, returnAST);
					match(ExpressParserTokenTypes.RPAREN);
					break;
				}
				case RPAREN:
				case SEMI:
				case COLEQ: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			real_type_AST = parseAST(currentAST, ExpressParserTokenTypes.REAL_TYPE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_7);
		}
		returnAST = real_type_AST;
	}

	public final void reference_clause() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST reference_clause_AST = null;
		Token id = null;
		AST id_AST = null;

		ExternalId ei = null;

		try {
			if (((LA1Equals(ExpressParserTokenTypes.LITERAL_reference))) && (isFirst)) {
				AST tmp311_AST = null;
				tmp311_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp311_AST);
				match(ExpressParserTokenTypes.LITERAL_reference);
				AST tmp312_AST = null;
				tmp312_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp312_AST);
				match(ExpressParserTokenTypes.LITERAL_from);
				id = LT(1);
				id_AST = astFactory.create(id);
				astFactory.addASTChild(currentAST, id_AST);
				match(ExpressParserTokenTypes.IDENT);
				{
					switch (ExpressParserTokenTypes.getToken(LA(1))) {
					case LPAREN: {
						AST tmp313_AST = null;
						tmp313_AST = astFactory.create(LT(1));
						astFactory.addASTChild(currentAST, tmp313_AST);
						match(ExpressParserTokenTypes.LPAREN);
						ei = resource_or_rename();
						astFactory.addASTChild(currentAST, returnAST);
						ei.setSchema(id.getText());
						addExternal(ei);
						{
							_loop35769: do {
								if ((LA1Equals(ExpressParserTokenTypes.COMMA))) {
									AST tmp314_AST = null;
									tmp314_AST = astFactory.create(LT(1));
									astFactory.addASTChild(currentAST, tmp314_AST);
									match(ExpressParserTokenTypes.COMMA);
									ei = resource_or_rename();
									astFactory.addASTChild(currentAST, returnAST);
									ei.setSchema(id.getText());
									addExternal(ei);
								} else {
									break _loop35769;
								}

							} while (true);
						}
						AST tmp315_AST = null;
						tmp315_AST = astFactory.create(LT(1));
						astFactory.addASTChild(currentAST, tmp315_AST);
						match(ExpressParserTokenTypes.RPAREN);
						break;
					}
					case SEMI: {
						break;
					}
					default: {
						throw new NoViableAltException(LT(1), getFilename());
					}
					}
				}
				AST tmp316_AST = null;
				tmp316_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp316_AST);
				match(ExpressParserTokenTypes.SEMI);
				if (ei == null)
					addAllReferenceExternals(id.getText());
				reference_clause_AST = (AST) currentAST.root;
			} else if ((LA1Equals(ExpressParserTokenTypes.LITERAL_reference))) {
				match(ExpressParserTokenTypes.LITERAL_reference);
				match(ExpressParserTokenTypes.LITERAL_from);
				schema_ref();
				astFactory.addASTChild(currentAST, returnAST);
				{
					switch (ExpressParserTokenTypes.getToken(LA(1))) {
					case LPAREN: {
						match(ExpressParserTokenTypes.LPAREN);
						resource_or_rename();
						astFactory.addASTChild(currentAST, returnAST);
						{
							_loop35772: do {
								if ((LA1Equals(ExpressParserTokenTypes.COMMA))) {
									match(ExpressParserTokenTypes.COMMA);
									resource_or_rename();
									astFactory.addASTChild(currentAST, returnAST);
								} else {
									break _loop35772;
								}

							} while (true);
						}
						match(ExpressParserTokenTypes.RPAREN);
						break;
					}
					case SEMI: {
						break;
					}
					default: {
						throw new NoViableAltException(LT(1), getFilename());
					}
					}
				}
				match(ExpressParserTokenTypes.SEMI);
				reference_clause_AST = parseAST(currentAST, ExpressParserTokenTypes.REFERENCE_CLAUSE);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_86);
		}
		returnAST = reference_clause_AST;
	}

	public final ExternalId resource_or_rename() throws RecognitionException, TokenStreamException {
		ExternalId ei;

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST resource_or_rename_AST = null;
		Token id = null;
		AST id_AST = null;

		ei = null;
		String s = null;

		try {
			if (((LA1Equals(ExpressParserTokenTypes.IDENT))) && (isFirst)) {
				id = LT(1);
				id_AST = astFactory.create(id);
				astFactory.addASTChild(currentAST, id_AST);
				match(ExpressParserTokenTypes.IDENT);
				ei = new ExternalId(id.getText());
				{
					switch (ExpressParserTokenTypes.getToken(LA(1))) {
					case LITERAL_as: {
						AST tmp323_AST = null;
						tmp323_AST = astFactory.create(LT(1));
						astFactory.addASTChild(currentAST, tmp323_AST);
						match(ExpressParserTokenTypes.LITERAL_as);
						s = rename_id();
						astFactory.addASTChild(currentAST, returnAST);
						ei.setRename(s);
						break;
					}
					case COMMA:
					case RPAREN: {
						break;
					}
					default: {
						throw new NoViableAltException(LT(1), getFilename());
					}
					}
				}
				resource_or_rename_AST = (AST) currentAST.root;
			} else if ((_tokenSet_87.member(LA(1)))) {
				resource_ref();
				astFactory.addASTChild(currentAST, returnAST);
				{
					switch (ExpressParserTokenTypes.getToken(LA(1))) {
					case LITERAL_as: {
						match(ExpressParserTokenTypes.LITERAL_as);
						rename_id();
						astFactory.addASTChild(currentAST, returnAST);
						break;
					}
					case COMMA:
					case RPAREN: {
						break;
					}
					default: {
						throw new NoViableAltException(LT(1), getFilename());
					}
					}
				}
				resource_or_rename_AST = parseAST(currentAST, ExpressParserTokenTypes.RESOURCE_OR_RENAME);
			} else if ((_tokenSet_88.member(LA(1)))) {
				global_ident();
				astFactory.addASTChild(currentAST, returnAST);
				{
					switch (ExpressParserTokenTypes.getToken(LA(1))) {
					case LITERAL_as: {
						match(ExpressParserTokenTypes.LITERAL_as);
						rename_id();
						astFactory.addASTChild(currentAST, returnAST);
						break;
					}
					case COMMA:
					case RPAREN: {
						break;
					}
					default: {
						throw new NoViableAltException(LT(1), getFilename());
					}
					}
				}
				resource_or_rename_AST = parseAST(currentAST, ExpressParserTokenTypes.RESOURCE_OR_RENAME);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_1);
		}
		returnAST = resource_or_rename_AST;
		return ei;
	}

	public final void schema_ref() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST schema_ref_AST = null;
		Token nid = null;
		AST nid_AST = null;

		try {
			nid = LT(1);
			nid_AST = astFactory.create(nid);
			astFactory.addASTChild(currentAST, nid_AST);
			match(ExpressParserTokenTypes.SCHEMA_IDENT);
			nid_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
			schema_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.SCHEMA_REF);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_28);
		}
		returnAST = schema_ref_AST;
	}

	public final void rel_op() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST rel_op_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case LT: {
				AST tmp326_AST = null;
				tmp326_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp326_AST);
				match(ExpressParserTokenTypes.LT);
				rel_op_AST = parseAST(currentAST, ExpressParserTokenTypes.REL_OP);
				break;
			}
			case GT: {
				AST tmp327_AST = null;
				tmp327_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp327_AST);
				match(ExpressParserTokenTypes.GT);
				rel_op_AST = parseAST(currentAST, ExpressParserTokenTypes.REL_OP);
				break;
			}
			case LE: {
				AST tmp328_AST = null;
				tmp328_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp328_AST);
				match(ExpressParserTokenTypes.LE);
				rel_op_AST = parseAST(currentAST, ExpressParserTokenTypes.REL_OP);
				break;
			}
			case GE: {
				AST tmp329_AST = null;
				tmp329_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp329_AST);
				match(ExpressParserTokenTypes.GE);
				rel_op_AST = parseAST(currentAST, ExpressParserTokenTypes.REL_OP);
				break;
			}
			case LTGT: {
				AST tmp330_AST = null;
				tmp330_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp330_AST);
				match(ExpressParserTokenTypes.LTGT);
				rel_op_AST = parseAST(currentAST, ExpressParserTokenTypes.REL_OP);
				break;
			}
			case ASSIGN: {
				AST tmp331_AST = null;
				tmp331_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp331_AST);
				match(ExpressParserTokenTypes.ASSIGN);
				rel_op_AST = parseAST(currentAST, ExpressParserTokenTypes.REL_OP);
				break;
			}
			case COLLTGT: {
				AST tmp332_AST = null;
				tmp332_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp332_AST);
				match(ExpressParserTokenTypes.COLLTGT);
				rel_op_AST = parseAST(currentAST, ExpressParserTokenTypes.REL_OP);
				break;
			}
			case COLEQCOL: {
				AST tmp333_AST = null;
				tmp333_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp333_AST);
				match(ExpressParserTokenTypes.COLEQCOL);
				rel_op_AST = parseAST(currentAST, ExpressParserTokenTypes.REL_OP);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_2);
		}
		returnAST = rel_op_AST;
	}

	public final String rename_id() throws RecognitionException, TokenStreamException {
		String s;

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST rename_id_AST = null;
		Token id = null;
		Token nid1 = null;
		AST nid1_AST = null;
		Token nid2 = null;
		AST nid2_AST = null;
		Token nid3 = null;
		AST nid3_AST = null;
		Token nid4 = null;
		AST nid4_AST = null;
		Token nid5 = null;
		AST nid5_AST = null;
		s = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case IDENT: {
				id = LT(1);
				astFactory.create(id);
				match(ExpressParserTokenTypes.IDENT);
				s = id.getText();
				break;
			}
			case CONSTANT_IDENT: {
				nid1 = LT(1);
				nid1_AST = astFactory.create(nid1);
				match(ExpressParserTokenTypes.CONSTANT_IDENT);
				nid1_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				rename_id_AST = (AST) currentAST.root;
				rename_id_AST = (AST) astFactory.make((new ASTArray(2)).add(astFactory.create(ExpressParserTokenTypes.RENAME_ID.getIndex(), "RENAME_ID")).add(
						(AST) astFactory.make((new ASTArray(2)).add(astFactory.create(ExpressParserTokenTypes.CONSTANT_ID.getIndex(), "CONSTANT_ID")).add(nid1_AST))));
				currentAST.root = rename_id_AST;
				currentAST.child = getChild(rename_id_AST);
				currentAST.advanceChildToEnd();
				break;
			}
			case ENTITY_IDENT: {
				nid2 = LT(1);
				nid2_AST = astFactory.create(nid2);
				match(ExpressParserTokenTypes.ENTITY_IDENT);
				nid2_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				rename_id_AST = (AST) currentAST.root;
				rename_id_AST = (AST) astFactory.make((new ASTArray(2)).add(astFactory.create(ExpressParserTokenTypes.RENAME_ID.getIndex(), "RENAME_ID")).add(
						(AST) astFactory.make((new ASTArray(2)).add(astFactory.create(ExpressParserTokenTypes.ENTITY_ID.getIndex(), "ENTITY_ID")).add(nid2_AST))));
				currentAST.root = rename_id_AST;
				currentAST.child = getChild(rename_id_AST);
				currentAST.advanceChildToEnd();
				break;
			}
			case FUNCTION_IDENT: {
				nid3 = LT(1);
				nid3_AST = astFactory.create(nid3);
				match(ExpressParserTokenTypes.FUNCTION_IDENT);
				nid3_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				rename_id_AST = (AST) currentAST.root;
				rename_id_AST = (AST) astFactory.make((new ASTArray(2)).add(astFactory.create(ExpressParserTokenTypes.RENAME_ID.getIndex(), "RENAME_ID")).add(
						(AST) astFactory.make((new ASTArray(2)).add(astFactory.create(ExpressParserTokenTypes.FUNCTION_ID.getIndex(), "FUNCTION_ID")).add(nid3_AST))));
				currentAST.root = rename_id_AST;
				currentAST.child = getChild(rename_id_AST);
				currentAST.advanceChildToEnd();
				break;
			}
			case PROCEDURE_IDENT: {
				nid4 = LT(1);
				nid4_AST = astFactory.create(nid4);
				match(ExpressParserTokenTypes.PROCEDURE_IDENT);
				nid4_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				rename_id_AST = (AST) currentAST.root;
				rename_id_AST = (AST) astFactory.make((new ASTArray(2)).add(astFactory.create(ExpressParserTokenTypes.RENAME_ID.getIndex(), "RENAME_ID")).add(
						(AST) astFactory.make((new ASTArray(2)).add(astFactory.create(ExpressParserTokenTypes.PROCEDURE_ID.getIndex(), "PROCEDURE_ID")).add(nid4_AST))));
				currentAST.root = rename_id_AST;
				currentAST.child = getChild(rename_id_AST);
				currentAST.advanceChildToEnd();
				break;
			}
			case TYPE_IDENT: {
				nid5 = LT(1);
				nid5_AST = astFactory.create(nid5);
				match(ExpressParserTokenTypes.TYPE_IDENT);
				nid5_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				rename_id_AST = (AST) currentAST.root;
				rename_id_AST = (AST) astFactory.make((new ASTArray(2)).add(astFactory.create(ExpressParserTokenTypes.RENAME_ID.getIndex(), "RENAME_ID")).add(
						(AST) astFactory.make((new ASTArray(2)).add(astFactory.create(ExpressParserTokenTypes.TYPE_ID.getIndex(), "TYPE_ID")).add(nid5_AST))));
				currentAST.root = rename_id_AST;
				currentAST.child = getChild(rename_id_AST);
				currentAST.advanceChildToEnd();
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_1);
		}
		returnAST = rename_id_AST;
		return s;
	}

	public final void repeat_control() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST repeat_control_AST = null;

		try {
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case VARIABLE_IDENT:
				case ENTITY_VAR_IDENT:
				case TYPE_VAR_IDENT:
				case IDENT: {
					increment_control();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case SEMI:
				case LITERAL_until:
				case LITERAL_while: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_while: {
					while_control();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case SEMI:
				case LITERAL_until: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_until: {
					until_control();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case SEMI: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			repeat_control_AST = parseAST(currentAST, ExpressParserTokenTypes.REPEAT_CONTROL);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_37);
		}
		returnAST = repeat_control_AST;
	}

	public final void while_control() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST while_control_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_while);
			logical_expression();
			astFactory.addASTChild(currentAST, returnAST);
			while_control_AST = parseAST(currentAST, ExpressParserTokenTypes.WHILE_CONTROL);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_89);
		}
		returnAST = while_control_AST;
	}

	public final void until_control() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST until_control_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_until);
			logical_expression();
			astFactory.addASTChild(currentAST, returnAST);
			until_control_AST = parseAST(currentAST, ExpressParserTokenTypes.UNTIL_CONTROL);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_37);
		}
		returnAST = until_control_AST;
	}

	public final void repeat_stmt() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST repeat_stmt_AST = null;
		if (isFirst)
			newScope1();

		try {
			match(ExpressParserTokenTypes.LITERAL_repeat);
			repeat_control();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.SEMI);
			stmt();
			astFactory.addASTChild(currentAST, returnAST);
			{
				_loop35782: do {
					if ((_tokenSet_15.member(LA(1)))) {
						stmt();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35782;
					}

				} while (true);
			}
			match(ExpressParserTokenTypes.LITERAL_end_repeat);
			upScope();
			match(ExpressParserTokenTypes.SEMI);
			repeat_stmt_AST = parseAST(currentAST, ExpressParserTokenTypes.REPEAT_STMT);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_16);
		}
		returnAST = repeat_stmt_AST;
	}

	public final void resource_ref() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST resource_ref_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case CONSTANT_IDENT: {
				constant_ref();
				astFactory.addASTChild(currentAST, returnAST);
				resource_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.RESOURCE_REF);
				break;
			}
			case ENTITY_IDENT:
			case ENTITY_ATTR_IDENT:
			case ENTITY_VAR_IDENT:
			case ENTITY_PARAM_IDENT: {
				entity_ref();
				astFactory.addASTChild(currentAST, returnAST);
				resource_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.RESOURCE_REF);
				break;
			}
			case FUNCTION_IDENT: {
				function_ref();
				astFactory.addASTChild(currentAST, returnAST);
				resource_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.RESOURCE_REF);
				break;
			}
			case PROCEDURE_IDENT: {
				procedure_ref();
				astFactory.addASTChild(currentAST, returnAST);
				resource_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.RESOURCE_REF);
				break;
			}
			case TYPE_IDENT:
			case TYPE_ATTR_IDENT:
			case TYPE_VAR_IDENT:
			case TYPE_PARAM_IDENT: {
				type_ref();
				astFactory.addASTChild(currentAST, returnAST);
				resource_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.RESOURCE_REF);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_90);
		}
		returnAST = resource_ref_AST;
	}

	public final void return_stmt() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST return_stmt_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_return);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LPAREN: {
					match(ExpressParserTokenTypes.LPAREN);
					expression();
					astFactory.addASTChild(currentAST, returnAST);
					match(ExpressParserTokenTypes.RPAREN);
					break;
				}
				case SEMI: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			match(ExpressParserTokenTypes.SEMI);
			return_stmt_AST = parseAST(currentAST, ExpressParserTokenTypes.RETURN_STMT);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_16);
		}
		returnAST = return_stmt_AST;
	}

	public final void rule_decl() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST rule_decl_AST = null;

		try {
			rule_head();
			astFactory.addASTChild(currentAST, returnAST);
			{
				if ((_tokenSet_91.member(LA(1)))) {
					algorithm_head();
					astFactory.addASTChild(currentAST, returnAST);
				} else if ((_tokenSet_92.member(LA(1)))) {
				} else {
					throw new NoViableAltException(LT(1), getFilename());
				}

			}
			{
				_loop35794: do {
					if ((_tokenSet_15.member(LA(1)))) {
						stmt();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35794;
					}

				} while (true);
			}
			where_clause();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.LITERAL_end_rule);
			upScope();
			match(ExpressParserTokenTypes.SEMI);
			rule_decl_AST = parseAST(currentAST, ExpressParserTokenTypes.RULE_DECL);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_93);
		}
		returnAST = rule_decl_AST;
	}

	public final void rule_head() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST rule_head_AST = null;

		try {
			if (((LA1Equals(ExpressParserTokenTypes.LITERAL_rule))) && (isFirst)) {
				AST tmp346_AST = null;
				tmp346_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp346_AST);
				match(ExpressParserTokenTypes.LITERAL_rule);
				rule_id();
				astFactory.addASTChild(currentAST, returnAST);
				newScope1();
				AST tmp347_AST = null;
				tmp347_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp347_AST);
				match(ExpressParserTokenTypes.LITERAL_for);
				AST tmp348_AST = null;
				tmp348_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp348_AST);
				match(ExpressParserTokenTypes.LPAREN);
				AST tmp349_AST = null;
				tmp349_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp349_AST);
				match(ExpressParserTokenTypes.IDENT);
				{
					_loop35797: do {
						if ((LA1Equals(ExpressParserTokenTypes.COMMA))) {
							AST tmp350_AST = null;
							tmp350_AST = astFactory.create(LT(1));
							astFactory.addASTChild(currentAST, tmp350_AST);
							match(ExpressParserTokenTypes.COMMA);
							AST tmp351_AST = null;
							tmp351_AST = astFactory.create(LT(1));
							astFactory.addASTChild(currentAST, tmp351_AST);
							match(ExpressParserTokenTypes.IDENT);
						} else {
							break _loop35797;
						}

					} while (true);
				}
				AST tmp352_AST = null;
				tmp352_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp352_AST);
				match(ExpressParserTokenTypes.RPAREN);
				AST tmp353_AST = null;
				tmp353_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp353_AST);
				match(ExpressParserTokenTypes.SEMI);
				rule_head_AST = (AST) currentAST.root;
			} else if ((LA1Equals(ExpressParserTokenTypes.LITERAL_rule))) {
				match(ExpressParserTokenTypes.LITERAL_rule);
				rule_id();
				astFactory.addASTChild(currentAST, returnAST);
				match(ExpressParserTokenTypes.LITERAL_for);
				match(ExpressParserTokenTypes.LPAREN);
				entity_ref();
				astFactory.addASTChild(currentAST, returnAST);
				{
					_loop35799: do {
						if ((LA1Equals(ExpressParserTokenTypes.COMMA))) {
							match(ExpressParserTokenTypes.COMMA);
							entity_ref();
							astFactory.addASTChild(currentAST, returnAST);
						} else {
							break _loop35799;
						}

					} while (true);
				}
				match(ExpressParserTokenTypes.RPAREN);
				match(ExpressParserTokenTypes.SEMI);
				rule_head_AST = parseAST(currentAST, ExpressParserTokenTypes.RULE_HEAD);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_91);
		}
		returnAST = rule_head_AST;
	}

	public final void rule_id() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST rule_id_AST = null;

		try {
			AST tmp360_AST = null;
			tmp360_AST = astFactory.create(LT(1));
			astFactory.addASTChild(currentAST, tmp360_AST);
			match(ExpressParserTokenTypes.IDENT);
			rule_id_AST = parseAST(currentAST, ExpressParserTokenTypes.RULE_ID);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_53);
		}
		returnAST = rule_id_AST;
	}

	public final String schema_id() throws RecognitionException, TokenStreamException {
		String s;

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST schema_id_AST = null;
		Token id = null;
		AST id_AST = null;
		Token nid = null;
		AST nid_AST = null;
		s = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case IDENT: {
				id = LT(1);
				id_AST = astFactory.create(id);
				astFactory.addASTChild(currentAST, id_AST);
				match(ExpressParserTokenTypes.IDENT);
				schema_id_AST = (AST) currentAST.root;
				s = id.getText();
				addId(s, ExpressParserTokenTypes.SCHEMA_IDENT);
				schema_id_AST = makeAST(ExpressParserTokenTypes.SCHEMA_ID, schema_id_AST);
				currentAST.root = schema_id_AST;
				currentAST.child = getChild(schema_id_AST);
				currentAST.advanceChildToEnd();
				schema_id_AST = (AST) currentAST.root;
				break;
			}
			case SCHEMA_IDENT: {
				nid = LT(1);
				nid_AST = astFactory.create(nid);
				astFactory.addASTChild(currentAST, nid_AST);
				match(ExpressParserTokenTypes.SCHEMA_IDENT);
				nid_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				schema_id_AST = parseAST(currentAST, ExpressParserTokenTypes.SCHEMA_ID);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_94);
		}
		returnAST = schema_id_AST;
		return s;
	}

	public final void schema_body() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST schema_body_AST = null;

		try {
			{
				_loop35804: do {
					if ((LA1Equals(ExpressParserTokenTypes.LITERAL_reference) || LA1Equals(ExpressParserTokenTypes.LITERAL_use))) {
						interface_specification();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35804;
					}

				} while (true);
			}
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_constant: {
					constant_decl();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case LITERAL_entity:
				case LITERAL_subtype_constraint:
				case LITERAL_function:
				case LITERAL_procedure:
				case LITERAL_rule:
				case LITERAL_end_schema:
				case LITERAL_type: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			{
				_loop35807: do {
					switch (ExpressParserTokenTypes.getToken(LA(1))) {
					case LITERAL_entity:
					case LITERAL_subtype_constraint:
					case LITERAL_function:
					case LITERAL_procedure:
					case LITERAL_type: {
						declaration();
						astFactory.addASTChild(currentAST, returnAST);
						break;
					}
					case LITERAL_rule: {
						rule_decl();
						astFactory.addASTChild(currentAST, returnAST);
						break;
					}
					default: {
						break _loop35807;
					}
					}
				} while (true);
			}
			schema_body_AST = parseAST(currentAST, ExpressParserTokenTypes.SCHEMA_BODY);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_95);
		}
		returnAST = schema_body_AST;
	}

	public final void interface_specification() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST interface_specification_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case LITERAL_reference: {
				reference_clause();
				astFactory.addASTChild(currentAST, returnAST);
				interface_specification_AST = parseAST(currentAST, ExpressParserTokenTypes.INTERFACE_SPECIFICATION);
				break;
			}
			case LITERAL_use: {
				use_clause();
				astFactory.addASTChild(currentAST, returnAST);
				interface_specification_AST = parseAST(currentAST, ExpressParserTokenTypes.INTERFACE_SPECIFICATION);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_86);
		}
		returnAST = interface_specification_AST;
	}

	public final void schema_decl() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST schema_decl_AST = null;
		String id = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_schema);
			id = schema_id();
			astFactory.addASTChild(currentAST, returnAST);
			newSchemaScope(id);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case STRING: {
					schema_version_id();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case SEMI: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			match(ExpressParserTokenTypes.SEMI);
			schema_body();
			astFactory.addASTChild(currentAST, returnAST);
			match(ExpressParserTokenTypes.LITERAL_end_schema);
			match(ExpressParserTokenTypes.SEMI);
			schema_decl_AST = (AST) currentAST.root;
			upScope();
			schema_decl_AST = makeAST(ExpressParserTokenTypes.SCHEMA_DECL, schema_decl_AST);
			currentAST.root = schema_decl_AST;
			currentAST.child = getChild(schema_decl_AST);
			currentAST.advanceChildToEnd();
			schema_decl_AST = (AST) currentAST.root;
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_96);
		}
		returnAST = schema_decl_AST;
	}

	public final void schema_version_id() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST schema_version_id_AST = null;

		try {
			AST tmp365_AST = null;
			tmp365_AST = astFactory.create(LT(1));
			astFactory.addASTChild(currentAST, tmp365_AST);
			match(ExpressParserTokenTypes.STRING);
			schema_version_id_AST = parseAST(currentAST, ExpressParserTokenTypes.SCHEMA_VERSION_ID);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_37);
		}
		returnAST = schema_version_id_AST;
	}

	public final void use_clause() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST use_clause_AST = null;
		Token id = null;
		AST id_AST = null;

		ExternalId ei = null;

		try {
			if (((LA1Equals(ExpressParserTokenTypes.LITERAL_use))) && (isFirst)) {
				AST tmp366_AST = null;
				tmp366_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp366_AST);
				match(ExpressParserTokenTypes.LITERAL_use);
				AST tmp367_AST = null;
				tmp367_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp367_AST);
				match(ExpressParserTokenTypes.LITERAL_from);
				id = LT(1);
				id_AST = astFactory.create(id);
				astFactory.addASTChild(currentAST, id_AST);
				match(ExpressParserTokenTypes.IDENT);
				{
					switch (ExpressParserTokenTypes.getToken(LA(1))) {
					case LPAREN: {
						AST tmp368_AST = null;
						tmp368_AST = astFactory.create(LT(1));
						astFactory.addASTChild(currentAST, tmp368_AST);
						match(ExpressParserTokenTypes.LPAREN);
						ei = named_type_or_rename();
						astFactory.addASTChild(currentAST, returnAST);
						ei.setSchema(id.getText());
						addExternal(ei);
						{
							_loop35815: do {
								if ((LA1Equals(ExpressParserTokenTypes.COMMA))) {
									AST tmp369_AST = null;
									tmp369_AST = astFactory.create(LT(1));
									astFactory.addASTChild(currentAST, tmp369_AST);
									match(ExpressParserTokenTypes.COMMA);
									ei = named_type_or_rename();
									astFactory.addASTChild(currentAST, returnAST);
									ei.setSchema(id.getText());
									addExternal(ei);
								} else {
									break _loop35815;
								}

							} while (true);
						}
						AST tmp370_AST = null;
						tmp370_AST = astFactory.create(LT(1));
						astFactory.addASTChild(currentAST, tmp370_AST);
						match(ExpressParserTokenTypes.RPAREN);
						break;
					}
					case SEMI: {
						break;
					}
					default: {
						throw new NoViableAltException(LT(1), getFilename());
					}
					}
				}
				AST tmp371_AST = null;
				tmp371_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp371_AST);
				match(ExpressParserTokenTypes.SEMI);
				if (ei == null)
					addAllUseExternals(id.getText());
				use_clause_AST = (AST) currentAST.root;
			} else if ((LA1Equals(ExpressParserTokenTypes.LITERAL_use))) {
				match(ExpressParserTokenTypes.LITERAL_use);
				match(ExpressParserTokenTypes.LITERAL_from);
				schema_ref();
				astFactory.addASTChild(currentAST, returnAST);
				{
					switch (ExpressParserTokenTypes.getToken(LA(1))) {
					case LPAREN: {
						match(ExpressParserTokenTypes.LPAREN);
						named_type_or_rename();
						astFactory.addASTChild(currentAST, returnAST);
						{
							_loop35818: do {
								if ((LA1Equals(ExpressParserTokenTypes.COMMA))) {
									match(ExpressParserTokenTypes.COMMA);
									named_type_or_rename();
									astFactory.addASTChild(currentAST, returnAST);
								} else {
									break _loop35818;
								}

							} while (true);
						}
						match(ExpressParserTokenTypes.RPAREN);
						break;
					}
					case SEMI: {
						break;
					}
					default: {
						throw new NoViableAltException(LT(1), getFilename());
					}
					}
				}
				match(ExpressParserTokenTypes.SEMI);
				use_clause_AST = parseAST(currentAST, ExpressParserTokenTypes.USE_CLAUSE);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_86);
		}
		returnAST = use_clause_AST;
	}

	public final ExternalId named_type_or_rename() throws RecognitionException, TokenStreamException {
		ExternalId ei;

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST named_type_or_rename_AST = null;
		Token id = null;
		AST id_AST = null;

		String s = null;
		ei = null;

		try {
			if (((LA1Equals(ExpressParserTokenTypes.IDENT))) && (isFirst)) {
				id = LT(1);
				id_AST = astFactory.create(id);
				astFactory.addASTChild(currentAST, id_AST);
				match(ExpressParserTokenTypes.IDENT);
				ei = new ExternalId(id.getText());
				{
					switch (ExpressParserTokenTypes.getToken(LA(1))) {
					case LITERAL_as: {
						AST tmp378_AST = null;
						tmp378_AST = astFactory.create(LT(1));
						astFactory.addASTChild(currentAST, tmp378_AST);
						match(ExpressParserTokenTypes.LITERAL_as);
						s = rename_id();
						astFactory.addASTChild(currentAST, returnAST);
						ei.setRename(s);
						break;
					}
					case COMMA:
					case RPAREN: {
						break;
					}
					default: {
						throw new NoViableAltException(LT(1), getFilename());
					}
					}
				}
				named_type_or_rename_AST = (AST) currentAST.root;
			} else if ((_tokenSet_97.member(LA(1)))) {
				named_types();
				astFactory.addASTChild(currentAST, returnAST);
				{
					switch (ExpressParserTokenTypes.getToken(LA(1))) {
					case LITERAL_as: {
						match(ExpressParserTokenTypes.LITERAL_as);
						{
							if ((LA1Equals(ExpressParserTokenTypes.ENTITY_IDENT) || LA1Equals(ExpressParserTokenTypes.IDENT))) {
								entity_id();
								astFactory.addASTChild(currentAST, returnAST);
							} else if ((LA1Equals(ExpressParserTokenTypes.TYPE_IDENT) || LA1Equals(ExpressParserTokenTypes.IDENT))) {
								type_id();
								astFactory.addASTChild(currentAST, returnAST);
							} else {
								throw new NoViableAltException(LT(1), getFilename());
							}

						}
						break;
					}
					case COMMA:
					case RPAREN: {
						break;
					}
					default: {
						throw new NoViableAltException(LT(1), getFilename());
					}
					}
				}
				named_type_or_rename_AST = parseAST(currentAST, ExpressParserTokenTypes.NAMED_TYPE_OR_RENAME);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_1);
		}
		returnAST = named_type_or_rename_AST;
		return ei;
	}

	public final String type_id() throws RecognitionException, TokenStreamException {
		String s;

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST type_id_AST = null;
		Token id = null;
		AST id_AST = null;
		Token nid = null;
		AST nid_AST = null;
		s = null;

		try {
			if (((LA1Equals(ExpressParserTokenTypes.IDENT))) && (isFirst)) {
				id = LT(1);
				id_AST = astFactory.create(id);
				astFactory.addASTChild(currentAST, id_AST);
				match(ExpressParserTokenTypes.IDENT);
				addId(id.getText(), ExpressParserTokenTypes.TYPE_IDENT);
				s = id.getText();
				type_id_AST = (AST) currentAST.root;
			} else if ((LA1Equals(ExpressParserTokenTypes.TYPE_IDENT))) {
				nid = LT(1);
				nid_AST = astFactory.create(nid);
				astFactory.addASTChild(currentAST, nid_AST);
				match(ExpressParserTokenTypes.TYPE_IDENT);
				nid_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				type_id_AST = parseAST(currentAST, ExpressParserTokenTypes.TYPE_ID);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_98);
		}
		returnAST = type_id_AST;
		return s;
	}

	public final void term() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST term_AST = null;

		try {
			factor();
			astFactory.addASTChild(currentAST, returnAST);
			{
				_loop35874: do {
					if ((_tokenSet_99.member(LA(1)))) {
						multiplication_like_op();
						astFactory.addASTChild(currentAST, returnAST);
						factor();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35874;
					}

				} while (true);
			}
			term_AST = parseAST(currentAST, ExpressParserTokenTypes.TERM);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_100);
		}
		returnAST = term_AST;
	}

	public final void unary_op() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST unary_op_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case PLUS: {
				AST tmp380_AST = null;
				tmp380_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp380_AST);
				match(ExpressParserTokenTypes.PLUS);
				unary_op_AST = parseAST(currentAST, ExpressParserTokenTypes.UNARY_OP);
				break;
			}
			case MINUS: {
				AST tmp381_AST = null;
				tmp381_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp381_AST);
				match(ExpressParserTokenTypes.MINUS);
				unary_op_AST = parseAST(currentAST, ExpressParserTokenTypes.UNARY_OP);
				break;
			}
			case LITERAL_not: {
				AST tmp382_AST = null;
				tmp382_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp382_AST);
				match(ExpressParserTokenTypes.LITERAL_not);
				unary_op_AST = parseAST(currentAST, ExpressParserTokenTypes.UNARY_OP);
				break;
			}
			default: {
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_101);
		}
		returnAST = unary_op_AST;
	}

	public final void string_type() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST string_type_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_string);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LPAREN: {
					width_spec();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case RPAREN:
				case SEMI:
				case COLEQ: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			string_type_AST = parseAST(currentAST, ExpressParserTokenTypes.STRING_TYPE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_7);
		}
		returnAST = string_type_AST;
	}

	public final void skip_stmt() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST skip_stmt_AST = null;

		try {
			match(ExpressParserTokenTypes.LITERAL_skip);
			match(ExpressParserTokenTypes.SEMI);
			skip_stmt_AST = parseAST(currentAST, ExpressParserTokenTypes.SKIP_STMT);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_16);
		}
		returnAST = skip_stmt_AST;
	}

	public final void supertype_factor() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST supertype_factor_AST = null;

		try {
			supertype_term();
			astFactory.addASTChild(currentAST, returnAST);
			{
				_loop35862: do {
					if ((LA1Equals(ExpressParserTokenTypes.LITERAL_and))) {
						match(ExpressParserTokenTypes.LITERAL_and);
						supertype_term();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35862;
					}

				} while (true);
			}
			supertype_factor_AST = parseAST(currentAST, ExpressParserTokenTypes.SUPERTYPE_FACTOR);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_102);
		}
		returnAST = supertype_factor_AST;
	}

	public final void supertype_term() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST supertype_term_AST = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case ENTITY_IDENT:
			case ENTITY_ATTR_IDENT:
			case ENTITY_VAR_IDENT:
			case ENTITY_PARAM_IDENT: {
				entity_ref();
				astFactory.addASTChild(currentAST, returnAST);
				supertype_term_AST = parseAST(currentAST, ExpressParserTokenTypes.SUPERTYPE_TERM);
				break;
			}
			case LITERAL_oneof: {
				one_of();
				astFactory.addASTChild(currentAST, returnAST);
				supertype_term_AST = parseAST(currentAST, ExpressParserTokenTypes.SUPERTYPE_TERM);
				break;
			}
			case LPAREN: {
				match(ExpressParserTokenTypes.LPAREN);
				supertype_expression();
				astFactory.addASTChild(currentAST, returnAST);
				match(ExpressParserTokenTypes.RPAREN);
				supertype_term_AST = parseAST(currentAST, ExpressParserTokenTypes.SUPERTYPE_TERM);
				break;
			}
			default:
				if (((LA1Equals(ExpressParserTokenTypes.IDENT))) && (isFirst)) {
					AST tmp389_AST = null;
					tmp389_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp389_AST);
					match(ExpressParserTokenTypes.IDENT);
					supertype_term_AST = (AST) currentAST.root;
				} else {
					throw new NoViableAltException(LT(1), getFilename());
				}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_80);
		}
		returnAST = supertype_term_AST;
	}

	public final void syntax() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST syntax_AST = null;
		if (isFirst) {
			rootScope = new Scope(null);
			lastCreatedScope = rootScope;
			currentScope = rootScope;
			schemas = new Hashtable();
		}

		try {
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LCURLY: {
					language_version_id();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case LITERAL_schema: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			schema_decl();
			astFactory.addASTChild(currentAST, returnAST);
			{
				_loop35870: do {
					if ((LA1Equals(ExpressParserTokenTypes.LITERAL_schema))) {
						schema_decl();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35870;
					}

				} while (true);
			}
			syntax_AST = parseAST(currentAST, ExpressParserTokenTypes.SYNTAX);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_103);
		}
		returnAST = syntax_AST;
	}

	public final void language_version_id() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST language_version_id_AST = null;

		try {
			match(ExpressParserTokenTypes.LCURLY);
			match(ExpressParserTokenTypes.LANG_VERSION);
			match(ExpressParserTokenTypes.RCURLY);
			language_version_id_AST = parseAST(currentAST, ExpressParserTokenTypes.LANGUAGE_VERSION_ID);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_104);
		}
		returnAST = language_version_id_AST;
	}

	public final EnumerationType underlying_type() throws RecognitionException, TokenStreamException {
		EnumerationType eids;

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST underlying_type_AST = null;
		eids = null;

		try {
			switch (ExpressParserTokenTypes.getToken(LA(1))) {
			case LITERAL_generic_entity:
			case LITERAL_extensible:
			case LITERAL_enumeration:
			case LITERAL_select: {
				eids = constructed_types();
				astFactory.addASTChild(currentAST, returnAST);
				underlying_type_AST = parseAST(currentAST, ExpressParserTokenTypes.UNDERLYING_TYPE);
				break;
			}
			case LITERAL_array:
			case LITERAL_bag:
			case LITERAL_set:
			case LITERAL_list: {
				aggregation_types();
				astFactory.addASTChild(currentAST, returnAST);
				underlying_type_AST = parseAST(currentAST, ExpressParserTokenTypes.UNDERLYING_TYPE);
				break;
			}
			case LITERAL_binary:
			case LITERAL_boolean:
			case LITERAL_integer:
			case LITERAL_logical:
			case LITERAL_number:
			case LITERAL_real:
			case LITERAL_string: {
				simple_types();
				astFactory.addASTChild(currentAST, returnAST);
				underlying_type_AST = parseAST(currentAST, ExpressParserTokenTypes.UNDERLYING_TYPE);
				break;
			}
			case TYPE_IDENT:
			case TYPE_ATTR_IDENT:
			case TYPE_VAR_IDENT:
			case TYPE_PARAM_IDENT: {
				type_ref();
				astFactory.addASTChild(currentAST, returnAST);
				underlying_type_AST = parseAST(currentAST, ExpressParserTokenTypes.UNDERLYING_TYPE);
				break;
			}
			default:
				if (((LA1Equals(ExpressParserTokenTypes.IDENT))) && (isFirst)) {
					AST tmp393_AST = null;
					tmp393_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp393_AST);
					match(ExpressParserTokenTypes.IDENT);
					underlying_type_AST = (AST) currentAST.root;
				} else {
					throw new NoViableAltException(LT(1), getFilename());
				}
			}
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_37);
		}
		returnAST = underlying_type_AST;
		return eids;
	}

	public final EnumerationType constructed_types() throws RecognitionException, TokenStreamException {
		EnumerationType eids;

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST constructed_types_AST = null;
		eids = null;

		try {
			if (((LA1Equals(ExpressParserTokenTypes.LITERAL_extensible) || LA1Equals(ExpressParserTokenTypes.LITERAL_enumeration)))
					&& (LA1Equals(ExpressParserTokenTypes.LITERAL_enumeration) || LA(2) == ExpressParserTokenTypes.LITERAL_enumeration.getIndex())) {
				eids = enumeration_type();
				astFactory.addASTChild(currentAST, returnAST);
				constructed_types_AST = parseAST(currentAST, ExpressParserTokenTypes.CONSTRUCTED_TYPES);
			} else if ((LA1Equals(ExpressParserTokenTypes.LITERAL_generic_entity) || LA1Equals(ExpressParserTokenTypes.LITERAL_extensible) || LA1Equals(ExpressParserTokenTypes.LITERAL_select))) {
				select_type();
				astFactory.addASTChild(currentAST, returnAST);
				constructed_types_AST = parseAST(currentAST, ExpressParserTokenTypes.CONSTRUCTED_TYPES);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_37);
		}
		returnAST = constructed_types_AST;
		return eids;
	}

	public final EnumerationType enumeration_type() throws RecognitionException, TokenStreamException {
		EnumerationType eids;

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST enumeration_type_AST = null;

		boolean ext = false;
		eids = null;

		try {
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_extensible: {
					AST tmp394_AST = null;
					tmp394_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp394_AST);
					match(ExpressParserTokenTypes.LITERAL_extensible);
					ext = true;
					break;
				}
				case LITERAL_enumeration: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			match(ExpressParserTokenTypes.LITERAL_enumeration);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_of:
				case LITERAL_based_on: {
					{
						switch (ExpressParserTokenTypes.getToken(LA(1))) {
						case LITERAL_of: {
							{
								match(ExpressParserTokenTypes.LITERAL_of);
								eids = enumeration_items();
								astFactory.addASTChild(currentAST, returnAST);
							}
							break;
						}
						case LITERAL_based_on: {
							eids = enumeration_extension();
							astFactory.addASTChild(currentAST, returnAST);
							break;
						}
						default: {
							throw new NoViableAltException(LT(1), getFilename());
						}
						}
					}
					break;
				}
				case SEMI: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			enumeration_type_AST = (AST) currentAST.root;
			enumeration_type_AST = makeAST(ExpressParserTokenTypes.ENUMERATION_TYPE, enumeration_type_AST);
			if (eids == null)
				eids = new EnumerationType();
			eids.setExtensible(ext);

			currentAST.root = enumeration_type_AST;
			currentAST.child = getChild(enumeration_type_AST);
			currentAST.advanceChildToEnd();
			enumeration_type_AST = (AST) currentAST.root;
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_37);
		}
		returnAST = enumeration_type_AST;
		return eids;
	}

	public final void select_type() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST select_type_AST = null;

		try {
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_extensible: {
					AST tmp397_AST = null;
					tmp397_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp397_AST);
					match(ExpressParserTokenTypes.LITERAL_extensible);
					break;
				}
				case LITERAL_generic_entity:
				case LITERAL_select: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LITERAL_generic_entity: {
					AST tmp398_AST = null;
					tmp398_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp398_AST);
					match(ExpressParserTokenTypes.LITERAL_generic_entity);
					break;
				}
				case LITERAL_select: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			match(ExpressParserTokenTypes.LITERAL_select);
			{
				switch (ExpressParserTokenTypes.getToken(LA(1))) {
				case LPAREN:
				case LITERAL_based_on: {
					{
						switch (ExpressParserTokenTypes.getToken(LA(1))) {
						case LPAREN: {
							select_list();
							astFactory.addASTChild(currentAST, returnAST);
							break;
						}
						case LITERAL_based_on: {
							select_extension();
							astFactory.addASTChild(currentAST, returnAST);
							break;
						}
						default: {
							throw new NoViableAltException(LT(1), getFilename());
						}
						}
					}
					break;
				}
				case SEMI: {
					break;
				}
				default: {
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			select_type_AST = parseAST(currentAST, ExpressParserTokenTypes.SELECT_TYPE);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_37);
		}
		returnAST = select_type_AST;
	}

	public final EnumerationType enumeration_items() throws RecognitionException, TokenStreamException {
		EnumerationType eids;

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST enumeration_items_AST = null;

		String id = null;
		if (isFirst)
			eids = new EnumerationType();
		else
			eids = null;

		try {
			match(ExpressParserTokenTypes.LPAREN);
			id = enumeration_id();
			astFactory.addASTChild(currentAST, returnAST);
			if (isFirst)
				eids.add(id);
			{
				_loop35886: do {
					if ((LA1Equals(ExpressParserTokenTypes.COMMA))) {
						match(ExpressParserTokenTypes.COMMA);
						id = enumeration_id();
						astFactory.addASTChild(currentAST, returnAST);
						if (isFirst)
							eids.add(id);
					} else {
						break _loop35886;
					}

				} while (true);
			}
			match(ExpressParserTokenTypes.RPAREN);
			enumeration_items_AST = parseAST(currentAST, ExpressParserTokenTypes.ENUMERATION_ITEMS);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_37);
		}
		returnAST = enumeration_items_AST;
		return eids;
	}

	public final EnumerationType enumeration_extension() throws RecognitionException, TokenStreamException {
		EnumerationType eids;

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST enumeration_extension_AST = null;
		Token id = null;
		AST id_AST = null;
		eids = null;

		try {
			if (((LA1Equals(ExpressParserTokenTypes.LITERAL_based_on))) && (isFirst)) {
				AST tmp403_AST = null;
				tmp403_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp403_AST);
				match(ExpressParserTokenTypes.LITERAL_based_on);
				id = LT(1);
				id_AST = astFactory.create(id);
				astFactory.addASTChild(currentAST, id_AST);
				match(ExpressParserTokenTypes.IDENT);
				{
					switch (ExpressParserTokenTypes.getToken(LA(1))) {
					case LITERAL_with: {
						AST tmp404_AST = null;
						tmp404_AST = astFactory.create(LT(1));
						astFactory.addASTChild(currentAST, tmp404_AST);
						match(ExpressParserTokenTypes.LITERAL_with);
						eids = enumeration_items();
						astFactory.addASTChild(currentAST, returnAST);
						break;
					}
					case SEMI: {
						break;
					}
					default: {
						throw new NoViableAltException(LT(1), getFilename());
					}
					}
				}
				if (eids == null)
					eids = new EnumerationType();
				eids.setBasedOn(id.getText());
				enumeration_extension_AST = (AST) currentAST.root;
			} else if ((LA1Equals(ExpressParserTokenTypes.LITERAL_based_on))) {
				match(ExpressParserTokenTypes.LITERAL_based_on);
				type_ref();
				astFactory.addASTChild(currentAST, returnAST);
				{
					switch (ExpressParserTokenTypes.getToken(LA(1))) {
					case LITERAL_with: {
						match(ExpressParserTokenTypes.LITERAL_with);
						enumeration_items();
						astFactory.addASTChild(currentAST, returnAST);
						break;
					}
					case SEMI: {
						break;
					}
					default: {
						throw new NoViableAltException(LT(1), getFilename());
					}
					}
				}
				enumeration_extension_AST = parseAST(currentAST, ExpressParserTokenTypes.ENUMERATION_EXTENSION);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_37);
		}
		returnAST = enumeration_extension_AST;
		return eids;
	}

	public final String enumeration_id() throws RecognitionException, TokenStreamException {
		String eid;

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST enumeration_id_AST = null;
		Token id = null;
		AST id_AST = null;
		Token nid = null;
		AST nid_AST = null;
		eid = null;

		try {
			if (((LA1Equals(ExpressParserTokenTypes.IDENT))) && (isFirst)) {
				id = LT(1);
				id_AST = astFactory.create(id);
				astFactory.addASTChild(currentAST, id_AST);
				match(ExpressParserTokenTypes.IDENT);
				eid = id.getText();
				enumeration_id_AST = (AST) currentAST.root;
			} else if ((LA1Equals(ExpressParserTokenTypes.ENUMERATION_IDENT))) {
				nid = LT(1);
				nid_AST = astFactory.create(nid);
				astFactory.addASTChild(currentAST, nid_AST);
				match(ExpressParserTokenTypes.ENUMERATION_IDENT);
				nid_AST.setType(ExpressParserTokenTypes.IDENT.getIndex());
				enumeration_id_AST = parseAST(currentAST, ExpressParserTokenTypes.ENUMERATION_ID);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_1);
		}
		returnAST = enumeration_id_AST;
		return eid;
	}

	public final void select_list() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST select_list_AST = null;

		try {
			match(ExpressParserTokenTypes.LPAREN);
			named_types();
			astFactory.addASTChild(currentAST, returnAST);
			{
				_loop35898: do {
					if ((LA1Equals(ExpressParserTokenTypes.COMMA))) {
						match(ExpressParserTokenTypes.COMMA);
						named_types();
						astFactory.addASTChild(currentAST, returnAST);
					} else {
						break _loop35898;
					}

				} while (true);
			}
			match(ExpressParserTokenTypes.RPAREN);
			select_list_AST = parseAST(currentAST, ExpressParserTokenTypes.SELECT_LIST);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_37);
		}
		returnAST = select_list_AST;
	}

	public final void select_extension() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST select_extension_AST = null;

		try {
			if (((LA1Equals(ExpressParserTokenTypes.LITERAL_based_on))) && (isFirst)) {
				AST tmp410_AST = null;
				tmp410_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp410_AST);
				match(ExpressParserTokenTypes.LITERAL_based_on);
				AST tmp411_AST = null;
				tmp411_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp411_AST);
				match(ExpressParserTokenTypes.IDENT);
				{
					switch (ExpressParserTokenTypes.getToken(LA(1))) {
					case LITERAL_with: {
						AST tmp412_AST = null;
						tmp412_AST = astFactory.create(LT(1));
						astFactory.addASTChild(currentAST, tmp412_AST);
						match(ExpressParserTokenTypes.LITERAL_with);
						select_list();
						astFactory.addASTChild(currentAST, returnAST);
						break;
					}
					case SEMI: {
						break;
					}
					default: {
						throw new NoViableAltException(LT(1), getFilename());
					}
					}
				}
				select_extension_AST = (AST) currentAST.root;
			} else if ((LA1Equals(ExpressParserTokenTypes.LITERAL_based_on))) {
				match(ExpressParserTokenTypes.LITERAL_based_on);
				type_ref();
				astFactory.addASTChild(currentAST, returnAST);
				{
					switch (ExpressParserTokenTypes.getToken(LA(1))) {
					case LITERAL_with: {
						match(ExpressParserTokenTypes.LITERAL_with);
						select_list();
						astFactory.addASTChild(currentAST, returnAST);
						break;
					}
					case SEMI: {
						break;
					}
					default: {
						throw new NoViableAltException(LT(1), getFilename());
					}
					}
				}
				select_extension_AST = parseAST(currentAST, ExpressParserTokenTypes.SELECT_EXTENSION);
			} else {
				throw new NoViableAltException(LT(1), getFilename());
			}

		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_37);
		}
		returnAST = select_extension_AST;
	}

	public final void type_label_id() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST type_label_id_AST = null;

		try {
			AST tmp415_AST = null;
			tmp415_AST = astFactory.create(LT(1));
			astFactory.addASTChild(currentAST, tmp415_AST);
			match(ExpressParserTokenTypes.IDENT);
			type_label_id_AST = parseAST(currentAST, ExpressParserTokenTypes.TYPE_LABEL_ID);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_103);
		}
		returnAST = type_label_id_AST;
	}

	public final void width() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST width_AST = null;

		try {
			numeric_expression();
			astFactory.addASTChild(currentAST, returnAST);
			width_AST = parseAST(currentAST, ExpressParserTokenTypes.WIDTH);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_81);
		}
		returnAST = width_AST;
	}

	public final void simple_id() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST simple_id_AST = null;

		try {
			AST tmp416_AST = null;
			tmp416_AST = astFactory.create(LT(1));
			astFactory.addASTChild(currentAST, tmp416_AST);
			match(ExpressParserTokenTypes.IDENT);
			simple_id_AST = parseAST(currentAST, ExpressParserTokenTypes.SIMPLE_ID);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_103);
		}
		returnAST = simple_id_AST;
	}

	public final void type_label_ref() throws RecognitionException, TokenStreamException {

		returnAST = null;
		ASTPair currentAST = new ASTPair();
		AST type_label_ref_AST = null;

		try {
			AST tmp417_AST = null;
			tmp417_AST = astFactory.create(LT(1));
			astFactory.addASTChild(currentAST, tmp417_AST);
			match(ExpressParserTokenTypes.IDENT);
			type_label_ref_AST = parseAST(currentAST, ExpressParserTokenTypes.TYPE_LABEL_REF);
		} catch (RecognitionException ex) {
			reportError(ex);
			recover(ex, _tokenSet_103);
		}
		returnAST = type_label_ref_AST;
	}

	public static final String[] _tokenNames = { "<0>", "EOF", "<2>", "NULL_TREE_LOOKAHEAD", "CONSTANT_IDENT", "ENTITY_IDENT", "FUNCTION_IDENT", "PROCEDURE_IDENT",
			"PARAMETER_IDENT", "SCHEMA_IDENT", "TYPE_IDENT", "VARIABLE_IDENT", "ENUMERATION_IDENT", "ATTRIBUTE_IDENT", "ENTITY_ATTR_IDENT", "TYPE_ATTR_IDENT", "ENTITY_VAR_IDENT",
			"TYPE_VAR_IDENT", "ENTITY_PARAM_IDENT", "TYPE_PARAM_IDENT", "SUBTYPE_CONSTRAINT_ID", "ACTUAL_PARAMETER_LIST", "ADD_LIKE_OP", "AGGREGATE_INITIALIZER",
			"AGGREGATE_SOURCE", "AGGREGATE_TYPE", "AGGREGATION_TYPES", "ALGORITHM_HEAD", "ALIAS_STMT", "ARRAY_TYPE", "ASSIGNMENT_STMT", "BAG_TYPE", "BASE_TYPE", "BINARY_TYPE",
			"BOOLEAN_TYPE", "BOUND_1", "BOUND_2", "BOUND_SPEC", "BUILT_IN_CONSTANT", "BUILT_IN_FUNCTION", "BUILT_IN_PROCEDURE", "CASE_ACTION", "CASE_LABEL", "CASE_STMT",
			"COMPOUND_STMT", "CONSTANT_BODY", "CONSTANT_DECL", "CONSTANT_FACTOR", "CONSTANT_ID", "DECLARATION", "DOMAIN_RULE", "ELEMENT", "ENTITY_HEAD", "ENTITY_DECL",
			"ENTITY_BODY", "SUBSUPER", "SUPERTYPE_CONSTRAINT", "ABSTRACT_SUPERTYPE_DECLARATION", "SUBTYPE_DECLARATION", "EXPLICIT_ATTR", "ATTRIBUTE_DECL", "ATTRIBUTE_ID",
			"QUALIFIED_ATTRIBUTE", "DERIVE_CLAUSE", "DERIVED_ATTR", "INVERSE_CLAUSE", "INVERSE_ATTR", "UNIQUE_CLAUSE", "UNIQUE_RULE", "REFERENCED_ATTRIBUTE", "ENTITY_CONSTRUCTOR",
			"ENTITY_ID", "ENUMERATION_REFERENCE", "ESCAPE_STMT", "EXPRESSION", "FACTOR", "FORMAL_PARAMETER", "ATTRIBUTE_QUALIFIER", "FUNCTION_CALL", "FUNCTION_DECL",
			"FUNCTION_HEAD", "FUNCTION_ID", "GENERALIZED_TYPES", "GENERAL_AGGREGATION_TYPES", "GENERAL_ARRAY_TYPE", "GENERAL_BAG_TYPE", "GENERAL_LIST_TYPE", "GENERAL_REF",
			"GENERAL_SET_TYPE", "GENERIC_TYPE", "GROUP_QUALIFIER", "IF_STMT", "INCREMENT", "INCREMENT_CONTROL", "INDEX", "INDEX_1", "INDEX_2", "INDEX_QUALIFIER", "INTEGER_TYPE",
			"INTERVAL", "INTERVAL_HIGH", "INTERVAL_ITEM", "INTERVAL_LOW", "INTERVAL_OP", "LABEL", "LIST_TYPE", "LITERAL", "REAL", "INTEGER", "STRING", "LOCAL_DECL",
			"LOCAL_VARIABLE", "LOGICAL_EXPRESSION", "LOGICAL", "LOGICAL_TYPE", "MULTIPLICATION_LIKE_OP", "NAMED_TYPES", "NULL_STMT", "NUMBER_TYPE", "NUMERIC_EXPRESSION", "ONE_OF",
			"PARAMETER", "PARAMETER_ID", "PARAMETER_TYPE", "POPULATION", "PRECISION_SPEC", "PRIMARY", "PROCEDURE_CALL_STMT", "PROCEDURE_DECL", "PROCEDURE_HEAD", "PROCEDURE_ID",
			"QUALIFIABLE_FACTOR", "QUALIFIER", "QUERY_EXPRESSION", "REAL_TYPE", "REFERENCE_CLAUSE", "REL_OP", "REL_OP_EXTENDED", "REPEAT_CONTROL", "REPEAT_STMT", "REPETITION",
			"RESOURCE_OR_RENAME", "RESOURCE_REF", "RETURN_STMT", "RULE_DECL", "RULE_HEAD", "RULE_ID", "SCHEMA_ID", "SCHEMA_BODY", "SCHEMA_DECL", "INTERFACE_SPECIFICATION",
			"USE_CLAUSE", "NAMED_TYPE_OR_RENAME", "SELECTOR", "SET_TYPE", "SIMPLE_EXPRESSION", "SIMPLE_FACTOR", "SIMPLE_TYPES", "SKIP_STMT", "STMT", "STRING_TYPE",
			"SUBTYPE_CONSTRAINT", "SUPERTYPE_EXPRESSION", "SUPERTYPE_FACTOR", "SUPERTYPE_RULE", "SUPERTYPE_TERM", "SYNTAX", "TERM", "TYPE_DECL", "UNDERLYING_TYPE",
			"CONSTRUCTED_TYPES", "ENUMERATION_TYPE", "ENUMERATION_ID", "SELECT_TYPE", "TYPE_ID", "TYPE_LABEL", "TYPE_LABEL_ID", "UNARY_OP", "UNTIL_CONTROL", "VARIABLE_ID",
			"WHERE_CLAUSE", "WHILE_CONTROL", "WIDTH", "WIDTH_SPEC", "ENTITY_REF", "TYPE_REF", "ENUMERATION_REF", "ATTRIBUTE_REF", "CONSTANT_REF", "FUNCTION_REF", "PARAMETER_REF",
			"VARIABLE_REF", "SCHEMA_REF", "TYPE_LABEL_REF", "PROCEDURE_REF", "SIMPLE_ID", "ELSE_CLAUSE", "RENAME_ID", "ENUMERATION_ITEMS", "ENUMERATION_EXTENSION", "SELECT_LIST",
			"SELECT_EXTENSION", "REDECLARED_ATTRIBUTE", "SUBTYPE_CONSTRAINT_DECL", "SUBTYPE_CONSTRAINT_HEAD", "SUBTYPE_CONSTRAINT_BODY", "ABSTRACT_SUPERTYPE", "TOTAL_OVER",
			"CONCRETE_TYPES", "GENERIC_ENTITY_TYPE", "SCHEMA_VERSION_ID", "LANGUAGE_VERSION_ID", "(", ",", ")", "+", "-", "\"or\"", "\"xor\"", "[", "]", "\"aggregate\"", ":",
			"\"of\"", "\"alias\"", "\"for\"", "an identifer", ";", "\"end_alias\"", "\"array\"", "\"optional\"", "\"unique\"", ":=", "\"bag\"", "\"binary\"", "\"boolean\"",
			"\"const_e\"", "\"pi\"", "\"self\"", "?", "*", "\"abs\"", "\"acos\"", "\"asin\"", "\"atan\"", "\"blength\"", "\"cos\"", "\"exists\"", "\"exp\"", "\"format\"",
			"\"hibound\"", "\"hiindex\"", "\"length\"", "\"lobound\"", "\"loindex\"", "\"log\"", "\"log2\"", "\"log10\"", "\"nvl\"", "\"odd\"", "\"rolesof\"", "\"sin\"",
			"\"sizeof\"", "\"sqrt\"", "\"tan\"", "\"typeof\"", "\"usedin\"", "\"value\"", "\"value_in\"", "\"value_unique\"", "\"insert\"", "\"remove\"", "\"case\"",
			"\"otherwise\"", "\"end_case\"", "\"begin\"", "\"end\"", "\"constant\"", "\"end_constant\"", "\"entity\"", "\"abstract\"", "\"end_entity\"", "\"supertype\"",
			"\"subtype\"", "\"end_subtype_constraint\"", "\"subtype_constraint\"", "\"total_over\"", "\"renamed\"", "\"derive\"", "\"inverse\"", "\"set\"", ".", "\"escape\"",
			"double star", "\"end_function\"", "\"function\"", "\"list\"", "\"generic\"", "\"generic_entity\"", "backslash", "\"if\"", "\"then\"", "\"end_if\"", "\"else\"",
			"\"to\"", "\"by\"", "\"integer\"", "{", "}", "<", "<=", "an integer value", "an floating point value", "a string literal", "\"local\"", "\"end_local\"", "\"false\"",
			"\"true\"", "\"unknown\"", "\"logical\"", "/", "\"div\"", "\"mod\"", "\"and\"", "double bar", "\"number\"", "\"oneof\"", "\"end_procedure\"", "\"procedure\"",
			"\"var\"", "\"query\"", "less than star", "|", "\"real\"", "\"reference\"", "\"from\"", ">", ">=", "less-than/greater-than thing", "=", ":<>:", ":=:", "\"in\"",
			"\"like\"", "\"repeat\"", "\"end_repeat\"", "\"as\"", "\"return\"", "\"end_rule\"", "\"rule\"", "\"schema\"", "\"end_schema\"", "\"use\"", "\"skip\"", "\"string\"",
			"\"andor\"", "language version id", "\"type\"", "\"end_type\"", "\"extensible\"", "\"enumeration\"", "\"based_on\"", "\"with\"", "\"select\"", "\"not\"", "\"until\"",
			"\"where\"", "\"while\"", "\"fixed\"", "a comment", "a EXPRESS one line comment", "&", "@", "white space", "a digit" };

	protected void buildTokenTypeASTClassMap() {
		tokenTypeToASTClassMap = null;
	};

	private static final long[] mk_tokenSet_0() {
		long[] data = new long[12];
		data[3] = 281513092448256L;
		data[4] = 32413774585528320L;
		data[5] = 175921877159967L;
		return data;
	}

	public static final BitSet _tokenSet_0 = new BitSet(mk_tokenSet_0());

	private static final long[] mk_tokenSet_1() {
		long[] data = new long[8];
		data[3] = 6291456L;
		return data;
	}

	public static final BitSet _tokenSet_1 = new BitSet(mk_tokenSet_1());

	private static final long[] mk_tokenSet_2() {
		long[] data = new long[12];
		data[0] = 1047920L;
		data[3] = -17574845743104L;
		data[4] = 8252846317156450303L;
		data[5] = 17592186045440L;
		return data;
	}

	public static final BitSet _tokenSet_2 = new BitSet(mk_tokenSet_2());

	private static final long[] mk_tokenSet_3() {
		long[] data = new long[12];
		data[3] = 281512958230528L;
		data[4] = 32404944132767744L;
		data[5] = 175921877159967L;
		return data;
	}

	public static final BitSet _tokenSet_3 = new BitSet(mk_tokenSet_3());

	private static final long[] mk_tokenSet_4() {
		long[] data = new long[8];
		data[3] = 270532608L;
		return data;
	}

	public static final BitSet _tokenSet_4 = new BitSet(mk_tokenSet_4());

	private static final long[] mk_tokenSet_5() {
		long[] data = new long[12];
		data[5] = 4096L;
		return data;
	}

	public static final BitSet _tokenSet_5 = new BitSet(mk_tokenSet_5());

	private static final long[] mk_tokenSet_6() {
		long[] data = new long[12];
		data[3] = 37855690752L;
		data[4] = 32404806693814272L;
		data[5] = 175921877159936L;
		return data;
	}

	public static final BitSet _tokenSet_6 = new BitSet(mk_tokenSet_6());

	private static final long[] mk_tokenSet_7() {
		long[] data = new long[8];
		data[3] = 1133875560448L;
		return data;
	}

	public static final BitSet _tokenSet_7 = new BitSet(mk_tokenSet_7());

	private static final long[] mk_tokenSet_8() {
		long[] data = new long[8];
		data[3] = 1136023044096L;
		return data;
	}

	public static final BitSet _tokenSet_8 = new BitSet(mk_tokenSet_8());

	private static final long[] mk_tokenSet_9() {
		long[] data = new long[8];
		data[3] = 1133871366144L;
		return data;
	}

	public static final BitSet _tokenSet_9 = new BitSet(mk_tokenSet_9());

	private static final long[] mk_tokenSet_10() {
		long[] data = new long[12];
		data[4] = 550301073408L;
		data[5] = 137438953728L;
		return data;
	}

	public static final BitSet _tokenSet_10 = new BitSet(mk_tokenSet_10());

	private static final long[] mk_tokenSet_11() {
		long[] data = new long[12];
		data[0] = 985472L;
		data[3] = 55834574848L;
		data[4] = 17660906160128L;
		data[5] = 70377485107328L;
		return data;
	}

	public static final BitSet _tokenSet_11 = new BitSet(mk_tokenSet_11());

	private static final long[] mk_tokenSet_12() {
		long[] data = new long[12];
		data[0] = 985472L;
		data[3] = 55834574848L;
		data[4] = 288248587361042432L;
		data[5] = 70517608415616L;
		return data;
	}

	public static final BitSet _tokenSet_12 = new BitSet(mk_tokenSet_12());

	private static final long[] mk_tokenSet_13() {
		long[] data = new long[12];
		data[0] = 985472L;
		data[3] = 55834574848L;
		data[4] = 288248587358945280L;
		data[5] = 70517608415616L;
		return data;
	}

	public static final BitSet _tokenSet_13 = new BitSet(mk_tokenSet_13());

	private static final long[] mk_tokenSet_14() {
		long[] data = new long[8];
		data[0] = 198656L;
		data[3] = 17179869184L;
		return data;
	}

	public static final BitSet _tokenSet_14 = new BitSet(mk_tokenSet_14());

	private static final long[] mk_tokenSet_15() {
		long[] data = new long[12];
		data[0] = 985472L;
		data[3] = 55834574848L;
		data[4] = 17660906160128L;
		data[5] = 8740929536L;
		return data;
	}

	public static final BitSet _tokenSet_15 = new BitSet(mk_tokenSet_15());

	private static final long[] mk_tokenSet_16() {
		long[] data = new long[12];
		data[0] = 1048048L;
		data[3] = -17467471560704L;
		data[4] = 8253075359174492159L;
		data[5] = 87969704707200L;
		return data;
	}

	public static final BitSet _tokenSet_16 = new BitSet(mk_tokenSet_16());

	private static final long[] mk_tokenSet_17() {
		long[] data = new long[12];
		data[3] = 1109177401344L;
		data[5] = 2048L;
		return data;
	}

	public static final BitSet _tokenSet_17 = new BitSet(mk_tokenSet_17());

	private static final long[] mk_tokenSet_18() {
		long[] data = new long[12];
		data[3] = 282612604076032L;
		data[4] = 32413774585528320L;
		data[5] = 175921877159967L;
		return data;
	}

	public static final BitSet _tokenSet_18 = new BitSet(mk_tokenSet_18());

	private static final long[] mk_tokenSet_19() {
		long[] data = new long[8];
		data[3] = 2147483648L;
		return data;
	}

	public static final BitSet _tokenSet_19 = new BitSet(mk_tokenSet_19());

	private static final long[] mk_tokenSet_20() {
		long[] data = new long[12];
		data[0] = 1033248L;
		data[3] = 15547781611520L;
		data[4] = -9222245020256436224L;
		data[5] = 17179877408L;
		return data;
	}

	public static final BitSet _tokenSet_20 = new BitSet(mk_tokenSet_20());

	private static final long[] mk_tokenSet_21() {
		long[] data = new long[10];
		data[3] = 2336999079936L;
		data[4] = 7713761263616L;
		return data;
	}

	public static final BitSet _tokenSet_21 = new BitSet(mk_tokenSet_21());

	private static final long[] mk_tokenSet_22() {
		long[] data = new long[12];
		data[3] = 37855690752L;
		for (int i = 4; i <= 5; i++) {
			data[i] = 35184372088832L;
		}
		return data;
	}

	public static final BitSet _tokenSet_22 = new BitSet(mk_tokenSet_22());

	private static final long[] mk_tokenSet_23() {
		long[] data = new long[12];
		data[3] = 1133877657600L;
		data[5] = 67108864L;
		return data;
	}

	public static final BitSet _tokenSet_23 = new BitSet(mk_tokenSet_23());

	private static final long[] mk_tokenSet_24() {
		long[] data = new long[10];
		data[3] = 1073741824L;
		data[4] = 281474976710656L;
		return data;
	}

	public static final BitSet _tokenSet_24 = new BitSet(mk_tokenSet_24());

	private static final long[] mk_tokenSet_25() {
		long[] data = new long[12];
		data[3] = 35708207104L;
		data[4] = 844424930131968L;
		data[5] = 175921860444160L;
		return data;
	}

	public static final BitSet _tokenSet_25 = new BitSet(mk_tokenSet_25());

	private static final long[] mk_tokenSet_26() {
		long[] data = new long[12];
		data[3] = 34628173824L;
		data[4] = 562949953421312L;
		data[5] = 175921860444160L;
		return data;
	}

	public static final BitSet _tokenSet_26 = new BitSet(mk_tokenSet_26());

	private static final long[] mk_tokenSet_27() {
		long[] data = new long[12];
		data[3] = 281513093496832L;
		data[4] = 32413774585528320L;
		data[5] = 175921877159967L;
		return data;
	}

	public static final BitSet _tokenSet_27 = new BitSet(mk_tokenSet_27());

	private static final long[] mk_tokenSet_28() {
		long[] data = new long[8];
		data[3] = 34360786944L;
		return data;
	}

	public static final BitSet _tokenSet_28 = new BitSet(mk_tokenSet_28());

	private static final long[] mk_tokenSet_29() {
		long[] data = new long[12];
		data[0] = 1047920L;
		data[3] = -17574845743104L;
		data[4] = 8252846317156843519L;
		data[5] = 17592186045440L;
		return data;
	}

	public static final BitSet _tokenSet_29 = new BitSet(mk_tokenSet_29());

	private static final long[] mk_tokenSet_30() {
		long[] data = new long[8];
		data[3] = 1075838976L;
		return data;
	}

	public static final BitSet _tokenSet_30 = new BitSet(mk_tokenSet_30());

	private static final long[] mk_tokenSet_31() {
		long[] data = new long[10];
		data[0] = 16L;
		data[3] = 17179869184L;
		data[4] = 4194304L;
		return data;
	}

	public static final BitSet _tokenSet_31 = new BitSet(mk_tokenSet_31());

	private static final long[] mk_tokenSet_32() {
		long[] data = new long[8];
		data[3] = 1073741824L;
		return data;
	}

	public static final BitSet _tokenSet_32 = new BitSet(mk_tokenSet_32());

	private static final long[] mk_tokenSet_33() {
		long[] data = new long[12];
		data[3] = 281513092448256L;
		data[4] = 32413774585528320L;
		data[5] = 175921944268831L;
		return data;
	}

	public static final BitSet _tokenSet_33 = new BitSet(mk_tokenSet_33());

	private static final long[] mk_tokenSet_34() {
		long[] data = new long[12];
		data[0] = 985472L;
		data[3] = 55834574848L;
		data[4] = 288248587361042432L;
		data[5] = 146179883264L;
		return data;
	}

	public static final BitSet _tokenSet_34 = new BitSet(mk_tokenSet_34());

	private static final long[] mk_tokenSet_35() {
		long[] data = new long[12];
		data[0] = 985472L;
		data[3] = 55834574848L;
		data[4] = 288248587361042432L;
		data[5] = 146179883392L;
		return data;
	}

	public static final BitSet _tokenSet_35 = new BitSet(mk_tokenSet_35());

	private static final long[] mk_tokenSet_36() {
		long[] data = new long[12];
		data[0] = 985472L;
		data[3] = 55834574848L;
		data[4] = 17660906160128L;
		data[5] = 8740929664L;
		return data;
	}

	public static final BitSet _tokenSet_36 = new BitSet(mk_tokenSet_36());

	private static final long[] mk_tokenSet_37() {
		long[] data = new long[8];
		data[3] = 34359738368L;
		return data;
	}

	public static final BitSet _tokenSet_37 = new BitSet(mk_tokenSet_37());

	private static final long[] mk_tokenSet_38() {
		long[] data = new long[12];
		data[3] = 34363932672L;
		for (int i = 4; i <= 5; i++) {
			data[i] = 35184372088832L;
		}
		return data;
	}

	public static final BitSet _tokenSet_38 = new BitSet(mk_tokenSet_38());

	private static final long[] mk_tokenSet_39() {
		long[] data = new long[12];
		data[0] = 57344L;
		data[3] = 70970039599104L;
		data[4] = 13136560128L;
		data[5] = 70368744177664L;
		return data;
	}

	public static final BitSet _tokenSet_39 = new BitSet(mk_tokenSet_39());

	private static final long[] mk_tokenSet_40() {
		long[] data = new long[12];
		data[0] = 57344L;
		data[3] = 70970039599104L;
		data[4] = 12918456320L;
		data[5] = 70368744177664L;
		return data;
	}

	public static final BitSet _tokenSet_40 = new BitSet(mk_tokenSet_40());

	private static final long[] mk_tokenSet_41() {
		long[] data = new long[12];
		data[0] = 57344L;
		data[3] = 70935679860736L;
		data[4] = 12918456320L;
		data[5] = 70368744177664L;
		return data;
	}

	public static final BitSet _tokenSet_41 = new BitSet(mk_tokenSet_41());

	private static final long[] mk_tokenSet_42() {
		long[] data = new long[12];
		data[0] = 57344L;
		data[3] = 70970045890560L;
		data[4] = 13136560128L;
		data[5] = 70368744177664L;
		return data;
	}

	public static final BitSet _tokenSet_42 = new BitSet(mk_tokenSet_42());

	private static final long[] mk_tokenSet_43() {
		long[] data = new long[8];
		data[0] = 57344L;
		data[3] = 70385924046848L;
		return data;
	}

	public static final BitSet _tokenSet_43 = new BitSet(mk_tokenSet_43());

	private static final long[] mk_tokenSet_44() {
		long[] data = new long[10];
		data[4] = 33554432L;
		return data;
	}

	public static final BitSet _tokenSet_44 = new BitSet(mk_tokenSet_44());

	private static final long[] mk_tokenSet_45() {
		long[] data = new long[12];
		data[3] = 549755813888L;
		data[4] = 8623489024L;
		data[5] = 70368744177664L;
		return data;
	}

	public static final BitSet _tokenSet_45 = new BitSet(mk_tokenSet_45());

	private static final long[] mk_tokenSet_46() {
		long[] data = new long[12];
		data[3] = 549755813888L;
		data[4] = 33554432L;
		data[5] = 70368744177664L;
		return data;
	}

	public static final BitSet _tokenSet_46 = new BitSet(mk_tokenSet_46());

	private static final long[] mk_tokenSet_47() {
		long[] data = new long[12];
		data[4] = 33554432L;
		data[5] = 70368744177664L;
		return data;
	}

	public static final BitSet _tokenSet_47 = new BitSet(mk_tokenSet_47());

	private static final long[] mk_tokenSet_48() {
		long[] data = new long[12];
		data[4] = 33554432L;
		data[5] = 275146342400L;
		return data;
	}

	public static final BitSet _tokenSet_48 = new BitSet(mk_tokenSet_48());

	private static final long[] mk_tokenSet_49() {
		long[] data = new long[12];
		data[0] = 57344L;
		data[3] = 70970039599104L;
		data[4] = 13052674048L;
		data[5] = 70368744177664L;
		return data;
	}

	public static final BitSet _tokenSet_49 = new BitSet(mk_tokenSet_49());

	private static final long[] mk_tokenSet_50() {
		long[] data = new long[12];
		data[3] = 282621195059200L;
		data[4] = 32413774585528320L;
		data[5] = 175956304007199L;
		return data;
	}

	public static final BitSet _tokenSet_50 = new BitSet(mk_tokenSet_50());

	private static final long[] mk_tokenSet_51() {
		long[] data = new long[12];
		data[0] = 344096L;
		data[3] = 17180917760L;
		data[4] = 1358954496L;
		data[5] = 64L;
		return data;
	}

	public static final BitSet _tokenSet_51 = new BitSet(mk_tokenSet_51());

	private static final long[] mk_tokenSet_52() {
		long[] data = new long[10];
		data[4] = 268435456L;
		return data;
	}

	public static final BitSet _tokenSet_52 = new BitSet(mk_tokenSet_52());

	private static final long[] mk_tokenSet_53() {
		long[] data = new long[8];
		data[3] = 8589934592L;
		return data;
	}

	public static final BitSet _tokenSet_53 = new BitSet(mk_tokenSet_53());

	private static final long[] mk_tokenSet_54() {
		long[] data = new long[12];
		data[0] = 344096L;
		data[3] = 17180917760L;
		data[4] = 1342177280L;
		data[5] = 64L;
		return data;
	}

	public static final BitSet _tokenSet_54 = new BitSet(mk_tokenSet_54());

	private static final long[] mk_tokenSet_55() {
		long[] data = new long[12];
		data[0] = 344096L;
		data[3] = 17180917760L;
		data[4] = 268435456L;
		data[5] = 64L;
		return data;
	}

	public static final BitSet _tokenSet_55 = new BitSet(mk_tokenSet_55());

	private static final long[] mk_tokenSet_56() {
		long[] data = new long[8];
		data[3] = 34366029824L;
		return data;
	}

	public static final BitSet _tokenSet_56 = new BitSet(mk_tokenSet_56());

	private static final long[] mk_tokenSet_57() {
		long[] data = new long[10];
		data[3] = 35435577344L;
		data[4] = 2147483648L;
		return data;
	}

	public static final BitSet _tokenSet_57 = new BitSet(mk_tokenSet_57());

	private static final long[] mk_tokenSet_58() {
		long[] data = new long[12];
		data[3] = 282612604076032L;
		data[4] = 32413776733011968L;
		data[5] = 175921877159967L;
		return data;
	}

	public static final BitSet _tokenSet_58 = new BitSet(mk_tokenSet_58());

	private static final long[] mk_tokenSet_59() {
		long[] data = new long[12];
		data[0] = 57344L;
		data[3] = 70935679860736L;
		data[4] = 8623489024L;
		data[5] = 70368744177664L;
		return data;
	}

	public static final BitSet _tokenSet_59 = new BitSet(mk_tokenSet_59());

	private static final long[] mk_tokenSet_60() {
		long[] data = new long[12];
		data[0] = 57344L;
		data[3] = 70935679860736L;
		data[4] = 33554432L;
		data[5] = 70368744177664L;
		return data;
	}

	public static final BitSet _tokenSet_60 = new BitSet(mk_tokenSet_60());

	private static final long[] mk_tokenSet_61() {
		long[] data = new long[12];
		data[3] = 282612604076032L;
		data[4] = 32413776733011968L;
		data[5] = 175921944268831L;
		return data;
	}

	public static final BitSet _tokenSet_61 = new BitSet(mk_tokenSet_61());

	private static final long[] mk_tokenSet_62() {
		long[] data = new long[8];
		data[3] = 34361835520L;
		return data;
	}

	public static final BitSet _tokenSet_62 = new BitSet(mk_tokenSet_62());

	private static final long[] mk_tokenSet_63() {
		long[] data = { 693248L, 0L, 0L, 0L, 0L, 0L };
		return data;
	}

	public static final BitSet _tokenSet_63 = new BitSet(mk_tokenSet_63());

	private static final long[] mk_tokenSet_64() {
		long[] data = new long[12];
		data[3] = 1133877657600L;
		data[4] = 34359738368L;
		data[5] = 4398113619968L;
		return data;
	}

	public static final BitSet _tokenSet_64 = new BitSet(mk_tokenSet_64());

	private static final long[] mk_tokenSet_65() {
		long[] data = new long[12];
		data[3] = 281512958230528L;
		data[4] = 32404806693814272L;
		data[5] = 175921877159967L;
		return data;
	}

	public static final BitSet _tokenSet_65 = new BitSet(mk_tokenSet_65());

	private static final long[] mk_tokenSet_66() {
		long[] data = new long[10];
		data[4] = 8250594517342748672L;
		return data;
	}

	public static final BitSet _tokenSet_66 = new BitSet(mk_tokenSet_66());

	private static final long[] mk_tokenSet_67() {
		long[] data = { 344096L, 0L, 0L, 0L, 0L, 0L };
		return data;
	}

	public static final BitSet _tokenSet_67 = new BitSet(mk_tokenSet_67());

	private static final long[] mk_tokenSet_68() {
		long[] data = new long[8];
		data[0] = 693248L;
		data[3] = 17179869184L;
		return data;
	}

	public static final BitSet _tokenSet_68 = new BitSet(mk_tokenSet_68());

	private static final long[] mk_tokenSet_69() {
		long[] data = new long[12];
		data[0] = 1042800L;
		data[3] = -17574979960832L;
		data[4] = 8250594517342765055L;
		data[5] = 17592186044416L;
		return data;
	}

	public static final BitSet _tokenSet_69 = new BitSet(mk_tokenSet_69());

	private static final long[] mk_tokenSet_70() {
		long[] data = new long[8];
		data[3] = 34363932672L;
		return data;
	}

	public static final BitSet _tokenSet_70 = new BitSet(mk_tokenSet_70());

	private static final long[] mk_tokenSet_71() {
		long[] data = new long[12];
		data[3] = 281513093496832L;
		data[4] = 32413774585528320L;
		data[5] = 175921944268831L;
		return data;
	}

	public static final BitSet _tokenSet_71 = new BitSet(mk_tokenSet_71());

	private static final long[] mk_tokenSet_72() {
		long[] data = new long[8];
		data[3] = 1074790400L;
		return data;
	}

	public static final BitSet _tokenSet_72 = new BitSet(mk_tokenSet_72());

	private static final long[] mk_tokenSet_73() {
		long[] data = new long[10];
		data[4] = 70368744177664L;
		return data;
	}

	public static final BitSet _tokenSet_73 = new BitSet(mk_tokenSet_73());

	private static final long[] mk_tokenSet_74() {
		long[] data = new long[12];
		data[3] = 34359738368L;
		data[5] = 175921860444160L;
		return data;
	}

	public static final BitSet _tokenSet_74 = new BitSet(mk_tokenSet_74());

	private static final long[] mk_tokenSet_75() {
		long[] data = new long[8];
		data[3] = 1342177280L;
		return data;
	}

	public static final BitSet _tokenSet_75 = new BitSet(mk_tokenSet_75());

	private static final long[] mk_tokenSet_76() {
		long[] data = new long[8];
		data[3] = 268435456L;
		return data;
	}

	public static final BitSet _tokenSet_76 = new BitSet(mk_tokenSet_76());

	private static final long[] mk_tokenSet_77() {
		long[] data = new long[10];
		data[4] = 27021597764222976L;
		return data;
	}

	public static final BitSet _tokenSet_77 = new BitSet(mk_tokenSet_77());

	private static final long[] mk_tokenSet_78() {
		long[] data = new long[10];
		data[4] = 4503599627370496L;
		return data;
	}

	public static final BitSet _tokenSet_78 = new BitSet(mk_tokenSet_78());

	private static final long[] mk_tokenSet_79() {
		long[] data = new long[10];
		data[0] = 198656L;
		data[3] = 17179869184L;
		data[4] = 576460752303423488L;
		return data;
	}

	public static final BitSet _tokenSet_79 = new BitSet(mk_tokenSet_79());

	private static final long[] mk_tokenSet_80() {
		long[] data = new long[12];
		data[3] = 34366029824L;
		data[5] = 34359738376L;
		return data;
	}

	public static final BitSet _tokenSet_80 = new BitSet(mk_tokenSet_80());

	private static final long[] mk_tokenSet_81() {
		long[] data = new long[8];
		data[3] = 4194304L;
		return data;
	}

	public static final BitSet _tokenSet_81 = new BitSet(mk_tokenSet_81());

	private static final long[] mk_tokenSet_82() {
		long[] data = new long[8];
		data[0] = 16L;
		data[3] = 545357767376896L;
		return data;
	}

	public static final BitSet _tokenSet_82 = new BitSet(mk_tokenSet_82());

	private static final long[] mk_tokenSet_83() {
		long[] data = new long[10];
		data[0] = 64L;
		data[3] = -562949953421312L;
		data[4] = 16383L;
		return data;
	}

	public static final BitSet _tokenSet_83 = new BitSet(mk_tokenSet_83());

	private static final long[] mk_tokenSet_84() {
		long[] data = { 985344L, 0L, 0L, 0L, 0L, 0L };
		return data;
	}

	public static final BitSet _tokenSet_84 = new BitSet(mk_tokenSet_84());

	private static final long[] mk_tokenSet_85() {
		long[] data = new long[12];
		data[3] = 34367078400L;
		data[5] = 67108864L;
		return data;
	}

	public static final BitSet _tokenSet_85 = new BitSet(mk_tokenSet_85());

	private static final long[] mk_tokenSet_86() {
		long[] data = new long[12];
		data[4] = 550303170560L;
		data[5] = 144418291968L;
		return data;
	}

	public static final BitSet _tokenSet_86 = new BitSet(mk_tokenSet_86());

	private static final long[] mk_tokenSet_87() {
		long[] data = { 1033456L, 0L, 0L, 0L, 0L, 0L };
		return data;
	}

	public static final BitSet _tokenSet_87 = new BitSet(mk_tokenSet_87());

	private static final long[] mk_tokenSet_88() {
		long[] data = new long[8];
		data[0] = 1048560L;
		data[3] = 17179869184L;
		return data;
	}

	public static final BitSet _tokenSet_88 = new BitSet(mk_tokenSet_88());

	private static final long[] mk_tokenSet_89() {
		long[] data = new long[12];
		data[3] = 34359738368L;
		data[5] = 35184372088832L;
		return data;
	}

	public static final BitSet _tokenSet_89 = new BitSet(mk_tokenSet_89());

	private static final long[] mk_tokenSet_90() {
		long[] data = new long[12];
		data[3] = 6291456L;
		data[5] = 67108864L;
		return data;
	}

	public static final BitSet _tokenSet_90 = new BitSet(mk_tokenSet_90());

	private static final long[] mk_tokenSet_91() {
		long[] data = new long[12];
		data[0] = 985472L;
		data[3] = 55834574848L;
		data[4] = 288248587361042432L;
		data[5] = 70514924060928L;
		return data;
	}

	public static final BitSet _tokenSet_91 = new BitSet(mk_tokenSet_91());

	private static final long[] mk_tokenSet_92() {
		long[] data = new long[12];
		data[0] = 985472L;
		data[3] = 55834574848L;
		data[4] = 17660906160128L;
		data[5] = 70377485107200L;
		return data;
	}

	public static final BitSet _tokenSet_92 = new BitSet(mk_tokenSet_92());

	private static final long[] mk_tokenSet_93() {
		long[] data = new long[12];
		data[4] = 550301073408L;
		data[5] = 140123308288L;
		return data;
	}

	public static final BitSet _tokenSet_93 = new BitSet(mk_tokenSet_93());

	private static final long[] mk_tokenSet_94() {
		long[] data = new long[10];
		data[3] = 34359738368L;
		data[4] = 144115188075855872L;
		return data;
	}

	public static final BitSet _tokenSet_94 = new BitSet(mk_tokenSet_94());

	private static final long[] mk_tokenSet_95() {
		long[] data = new long[12];
		data[5] = 2147483648L;
		return data;
	}

	public static final BitSet _tokenSet_95 = new BitSet(mk_tokenSet_95());

	private static final long[] mk_tokenSet_96() {
		long[] data = new long[12];
		data[0] = 2L;
		data[5] = 1073741824L;
		return data;
	}

	public static final BitSet _tokenSet_96 = new BitSet(mk_tokenSet_96());

	private static final long[] mk_tokenSet_97() {
		long[] data = new long[8];
		data[0] = 1033248L;
		data[3] = 17179869184L;
		return data;
	}

	public static final BitSet _tokenSet_97 = new BitSet(mk_tokenSet_97());

	private static final long[] mk_tokenSet_98() {
		long[] data = new long[12];
		data[3] = 6291456L;
		data[5] = 524288L;
		return data;
	}

	public static final BitSet _tokenSet_98 = new BitSet(mk_tokenSet_98());

	private static final long[] mk_tokenSet_99() {
		long[] data = new long[12];
		data[3] = 281474976710656L;
		data[5] = 31L;
		return data;
	}

	public static final BitSet _tokenSet_99 = new BitSet(mk_tokenSet_99());

	private static final long[] mk_tokenSet_100() {
		long[] data = new long[12];
		data[3] = 37981519872L;
		data[4] = 32404806693814272L;
		data[5] = 175921877159936L;
		return data;
	}

	public static final BitSet _tokenSet_100 = new BitSet(mk_tokenSet_100());

	private static final long[] mk_tokenSet_101() {
		long[] data = new long[10];
		data[0] = 1042800L;
		data[3] = -17575005126656L;
		data[4] = 8250594517342765055L;
		return data;
	}

	public static final BitSet _tokenSet_101 = new BitSet(mk_tokenSet_101());

	private static final long[] mk_tokenSet_102() {
		long[] data = new long[12];
		data[3] = 34366029824L;
		data[5] = 34359738368L;
		return data;
	}

	public static final BitSet _tokenSet_102 = new BitSet(mk_tokenSet_102());

	private static final long[] mk_tokenSet_103() {
		long[] data = { 2L, 0L, 0L, 0L, 0L, 0L };
		return data;
	}

	public static final BitSet _tokenSet_103 = new BitSet(mk_tokenSet_103());

	private static final long[] mk_tokenSet_104() {
		long[] data = new long[12];
		data[5] = 1073741824L;
		return data;
	}

	public static final BitSet _tokenSet_104 = new BitSet(mk_tokenSet_104());

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy