expr(); e3_AST = (org.exist.xquery.parser.XQueryAST)returnAST; astFactory.addASTChild(currentAST, returnAST);
{ switch ( LA(1)) { case LPAREN: case NCNAME: case LITERAL_xquery: case LITERAL_version: case LITERAL_module: case LITERAL_namespace: case STRING_LITERAL: case LITERAL_declare: case LITERAL_default: case 62: case LITERAL_ordering: case LITERAL_construction: case 65: case LITERAL_option: case LITERAL_function: case LITERAL_variable: case LITERAL_import: case LITERAL_encoding: case LITERAL_collation: case LITERAL_element: case LITERAL_order: case LITERAL_empty: case LITERAL_preserve: case LITERAL_strip: case LITERAL_ordered: case LITERAL_unordered: case 83: case LITERAL_inherit: case 85: case DOLLAR: case LITERAL_external: case LITERAL_at: case LITERAL_schema: case LITERAL_as: case STAR: case PLUS: case LITERAL_item: case LITERAL_for: case LITERAL_let: case LITERAL_some: case LITERAL_every: case LITERAL_if: case LITERAL_typeswitch: case LITERAL_update: case LITERAL_replace: case LITERAL_value: case LITERAL_insert: case LITERAL_delete: case LITERAL_rename: case LITERAL_with: case LITERAL_into: case LITERAL_preceding: case LITERAL_following: case LITERAL_return: case LITERAL_by: case LITERAL_case: case LITERAL_then: case LITERAL_else: case LITERAL_or: case LITERAL_and: case LITERAL_instance: case LITERAL_of: case LITERAL_treat: case LITERAL_cast: case LT: case LITERAL_is: case LITERAL_isnot: case LITERAL_to: case MINUS: case LITERAL_div: case LITERAL_mod: case LITERAL_union: case LITERAL_intersect: case LITERAL_except: case SLASH: case DSLASH: case LITERAL_text: case LITERAL_node: case LITERAL_attribute: case LITERAL_comment: case 162: case 163: case LITERAL_document: case SELF: case XML_COMMENT: case XML_PI: case AT: case PARENT: case LITERAL_child: case LITERAL_self: case LITERAL_descendant: case 175: case 176: case LITERAL_parent: case LITERAL_ancestor: case 179: case 180: case DOUBLE_LITERAL: case DECIMAL_LITERAL: case INTEGER_LITERAL: case LITERAL_collection: case LITERAL_validate: { expr(); e3_AST = (org.exist.xquery.parser.XQueryAST)returnAST; astFactory.addASTChild(currentAST, returnAST); break; } case RCURLY: { break; } default: { throw new NoViableAltException(LT(1), getFilename()); } } }
	public final void compAttrConstructor() throws RecognitionException, TokenStreamException, XPathException {				returnAST = null;		ASTPair currentAST = new ASTPair();		org.exist.xquery.parser.XQueryAST compAttrConstructor_AST = null;		org.exist.xquery.parser.XQueryAST e1_AST = null;		org.exist.xquery.parser.XQueryAST e2_AST = null;		org.exist.xquery.parser.XQueryAST e3_AST = null;					String qn;						boolean synPredMatched316 = false;		if (((LA(1)==LITERAL_attribute))) {			int _m316 = mark();			synPredMatched316 = true;			inputState.guessing++;			try {				{				match(LITERAL_attribute);				match(LCURLY);				}			}			catch (RecognitionException pe) {				synPredMatched316 = false;			}			rewind(_m316);			inputState.guessing--;		}		if ( synPredMatched316 ) {			match(LITERAL_attribute);			match(LCURLY);			expr();			e1_AST = (org.exist.xquery.parser.XQueryAST)returnAST;			astFactory.addASTChild(currentAST, returnAST);			match(RCURLY);			match(LCURLY);			expr();			e2_AST = (org.exist.xquery.parser.XQueryAST)returnAST;			astFactory.addASTChild(currentAST, returnAST);			match(RCURLY);			if ( inputState.guessing==0 ) {				compAttrConstructor_AST = (org.exist.xquery.parser.XQueryAST)currentAST.root;				compAttrConstructor_AST = (org.exist.xquery.parser.XQueryAST)astFactory.make( (new ASTArray(2)).add((org.exist.xquery.parser.XQueryAST)astFactory.create(COMP_ATTR_CONSTRUCTOR)).add(compAttrConstructor_AST));				currentAST.root = compAttrConstructor_AST;				currentAST.child = compAttrConstructor_AST!=null &&compAttrConstructor_AST.getFirstChild()!=null ?					compAttrConstructor_AST.getFirstChild() : compAttrConstructor_AST;				currentAST.advanceChildToEnd();			}			compAttrConstructor_AST = (org.exist.xquery.parser.XQueryAST)currentAST.root;		}		else if ((LA(1)==LITERAL_attribute)) {			match(LITERAL_attribute);			qn=qName();			astFactory.addASTChild(currentAST, returnAST);			match(LCURLY);			expr();			e3_AST = (org.exist.xquery.parser.XQueryAST)returnAST;			astFactory.addASTChild(currentAST, returnAST);			match(RCURLY);			if ( inputState.guessing==0 ) {				compAttrConstructor_AST = (org.exist.xquery.parser.XQueryAST)currentAST.root;				compAttrConstructor_AST = (org.exist.xquery.parser.XQueryAST)astFactory.make( (new ASTArray(3)).add((org.exist.xquery.parser.XQueryAST)astFactory.create(COMP_ATTR_CONSTRUCTOR,qn)).add((org.exist.xquery.parser.XQueryAST)astFactory.create(STRING_LITERAL,qn)).add(e3_AST));				currentAST.root = compAttrConstructor_AST;				currentAST.child = compAttrConstructor_AST!=null &&compAttrConstructor_AST.getFirstChild()!=null ?					compAttrConstructor_AST.getFirstChild() : compAttrConstructor_AST;				currentAST.advanceChildToEnd();			}			compAttrConstructor_AST = (org.exist.xquery.parser.XQueryAST)currentAST.root;		}		else {			throw new NoViableAltException(LT(1), getFilename());		}				returnAST = compAttrConstructor_AST;	}