/*
* generated by Xtext
*/
grammar InternalItems;

options {
	superClass=AbstractInternalContentAssistParser;
	
}

@lexer::header {
package org.openhab.model.ui.contentassist.antlr.internal;

// Hack: Use our own Lexer superclass by means of import. 
// Currently there is no other way to specify the superclass for the lexer.
import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.Lexer;
}

@parser::header {
package org.openhab.model.ui.contentassist.antlr.internal; 

import java.io.InputStream;
import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.xtext.parsetree.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.DFA;
import org.openhab.model.services.ItemsGrammarAccess;

}

@parser::members {
 
 	private ItemsGrammarAccess grammarAccess;
 	
    public void setGrammarAccess(ItemsGrammarAccess grammarAccess) {
    	this.grammarAccess = grammarAccess;
    }
    
    @Override
    protected Grammar getGrammar() {
    	return grammarAccess.getGrammar();
    }
    
    @Override
    protected String getValueForTokenName(String tokenName) {
    	return tokenName;
    }

}




// Entry rule entryRuleItemModel
entryRuleItemModel 
:
{ before(grammarAccess.getItemModelRule()); }
	 ruleItemModel
{ after(grammarAccess.getItemModelRule()); } 
	 EOF 
;

// Rule ItemModel
ruleItemModel
    @init {
		int stackSize = keepStackSize();
    }
	:
(
{ before(grammarAccess.getItemModelAccess().getItemsAssignment()); }
(rule__ItemModel__ItemsAssignment)*
{ after(grammarAccess.getItemModelAccess().getItemsAssignment()); }
)

;
finally {
	restoreStackSize(stackSize);
}



// Entry rule entryRuleModelItem
entryRuleModelItem 
:
{ before(grammarAccess.getModelItemRule()); }
	 ruleModelItem
{ after(grammarAccess.getModelItemRule()); } 
	 EOF 
;

// Rule ModelItem
ruleModelItem
    @init {
		int stackSize = keepStackSize();
    }
	:
(
{ before(grammarAccess.getModelItemAccess().getGroup()); }
(rule__ModelItem__Group__0)
{ after(grammarAccess.getModelItemAccess().getGroup()); }
)

;
finally {
	restoreStackSize(stackSize);
}



// Entry rule entryRuleModelGroupItem
entryRuleModelGroupItem 
:
{ before(grammarAccess.getModelGroupItemRule()); }
	 ruleModelGroupItem
{ after(grammarAccess.getModelGroupItemRule()); } 
	 EOF 
;

// Rule ModelGroupItem
ruleModelGroupItem
    @init {
		int stackSize = keepStackSize();
    }
	:
(
{ before(grammarAccess.getModelGroupItemAccess().getGroup()); }
(rule__ModelGroupItem__Group__0)
{ after(grammarAccess.getModelGroupItemAccess().getGroup()); }
)

;
finally {
	restoreStackSize(stackSize);
}



// Entry rule entryRuleModelNormalItem
entryRuleModelNormalItem 
:
{ before(grammarAccess.getModelNormalItemRule()); }
	 ruleModelNormalItem
{ after(grammarAccess.getModelNormalItemRule()); } 
	 EOF 
;

// Rule ModelNormalItem
ruleModelNormalItem
    @init {
		int stackSize = keepStackSize();
    }
	:
(
{ before(grammarAccess.getModelNormalItemAccess().getTypeAssignment()); }
(rule__ModelNormalItem__TypeAssignment)
{ after(grammarAccess.getModelNormalItemAccess().getTypeAssignment()); }
)

;
finally {
	restoreStackSize(stackSize);
}



// Entry rule entryRuleModelItemType
entryRuleModelItemType 
:
{ before(grammarAccess.getModelItemTypeRule()); }
	 ruleModelItemType
{ after(grammarAccess.getModelItemTypeRule()); } 
	 EOF 
;

// Rule ModelItemType
ruleModelItemType
    @init {
		int stackSize = keepStackSize();
    }
	:
(
{ before(grammarAccess.getModelItemTypeAccess().getAlternatives()); }
(rule__ModelItemType__Alternatives)
{ after(grammarAccess.getModelItemTypeAccess().getAlternatives()); }
)

;
finally {
	restoreStackSize(stackSize);
}



// Entry rule entryRuleModelBinding
entryRuleModelBinding 
:
{ before(grammarAccess.getModelBindingRule()); }
	 ruleModelBinding
{ after(grammarAccess.getModelBindingRule()); } 
	 EOF 
;

// Rule ModelBinding
ruleModelBinding
    @init {
		int stackSize = keepStackSize();
    }
	:
(
{ before(grammarAccess.getModelBindingAccess().getGroup()); }
(rule__ModelBinding__Group__0)
{ after(grammarAccess.getModelBindingAccess().getGroup()); }
)

;
finally {
	restoreStackSize(stackSize);
}




// Rule ModelGroupFunction
ruleModelGroupFunction
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelGroupFunctionAccess().getAlternatives()); }
(rule__ModelGroupFunction__Alternatives)
{ after(grammarAccess.getModelGroupFunctionAccess().getAlternatives()); }
)

;
finally {
	restoreStackSize(stackSize);
}



rule__ModelItem__Alternatives_0
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getModelNormalItemParserRuleCall_0_0()); }
	ruleModelNormalItem
{ after(grammarAccess.getModelItemAccess().getModelNormalItemParserRuleCall_0_0()); }
)

    |(
{ before(grammarAccess.getModelItemAccess().getModelGroupItemParserRuleCall_0_1()); }
	ruleModelGroupItem
{ after(grammarAccess.getModelItemAccess().getModelGroupItemParserRuleCall_0_1()); }
)

;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__IconAlternatives_3_1_0
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getIconIDTerminalRuleCall_3_1_0_0()); }
	RULE_ID
{ after(grammarAccess.getModelItemAccess().getIconIDTerminalRuleCall_3_1_0_0()); }
)

    |(
{ before(grammarAccess.getModelItemAccess().getIconSTRINGTerminalRuleCall_3_1_0_1()); }
	RULE_STRING
{ after(grammarAccess.getModelItemAccess().getIconSTRINGTerminalRuleCall_3_1_0_1()); }
)

;
finally {
	restoreStackSize(stackSize);
}

rule__ModelGroupItem__ArgsAlternatives_2_2_2_1_0
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelGroupItemAccess().getArgsIDTerminalRuleCall_2_2_2_1_0_0()); }
	RULE_ID
{ after(grammarAccess.getModelGroupItemAccess().getArgsIDTerminalRuleCall_2_2_2_1_0_0()); }
)

    |(
{ before(grammarAccess.getModelGroupItemAccess().getArgsSTRINGTerminalRuleCall_2_2_2_1_0_1()); }
	RULE_STRING
{ after(grammarAccess.getModelGroupItemAccess().getArgsSTRINGTerminalRuleCall_2_2_2_1_0_1()); }
)

;
finally {
	restoreStackSize(stackSize);
}

rule__ModelGroupItem__ArgsAlternatives_2_2_2_2_1_0
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelGroupItemAccess().getArgsIDTerminalRuleCall_2_2_2_2_1_0_0()); }
	RULE_ID
{ after(grammarAccess.getModelGroupItemAccess().getArgsIDTerminalRuleCall_2_2_2_2_1_0_0()); }
)

    |(
{ before(grammarAccess.getModelGroupItemAccess().getArgsSTRINGTerminalRuleCall_2_2_2_2_1_0_1()); }
	RULE_STRING
{ after(grammarAccess.getModelGroupItemAccess().getArgsSTRINGTerminalRuleCall_2_2_2_2_1_0_1()); }
)

;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItemType__Alternatives
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemTypeAccess().getSwitchKeyword_0()); }

	'Switch' 

{ after(grammarAccess.getModelItemTypeAccess().getSwitchKeyword_0()); }
)

    |(
{ before(grammarAccess.getModelItemTypeAccess().getRollershutterKeyword_1()); }

	'Rollershutter' 

{ after(grammarAccess.getModelItemTypeAccess().getRollershutterKeyword_1()); }
)

    |(
{ before(grammarAccess.getModelItemTypeAccess().getNumberKeyword_2()); }

	'Number' 

{ after(grammarAccess.getModelItemTypeAccess().getNumberKeyword_2()); }
)

    |(
{ before(grammarAccess.getModelItemTypeAccess().getStringKeyword_3()); }

	'String' 

{ after(grammarAccess.getModelItemTypeAccess().getStringKeyword_3()); }
)

    |(
{ before(grammarAccess.getModelItemTypeAccess().getDimmerKeyword_4()); }

	'Dimmer' 

{ after(grammarAccess.getModelItemTypeAccess().getDimmerKeyword_4()); }
)

    |(
{ before(grammarAccess.getModelItemTypeAccess().getContactKeyword_5()); }

	'Contact' 

{ after(grammarAccess.getModelItemTypeAccess().getContactKeyword_5()); }
)

    |(
{ before(grammarAccess.getModelItemTypeAccess().getIDTerminalRuleCall_6()); }
	RULE_ID
{ after(grammarAccess.getModelItemTypeAccess().getIDTerminalRuleCall_6()); }
)

;
finally {
	restoreStackSize(stackSize);
}

rule__ModelGroupFunction__Alternatives
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelGroupFunctionAccess().getANDEnumLiteralDeclaration_0()); }
(	'AND' 
)
{ after(grammarAccess.getModelGroupFunctionAccess().getANDEnumLiteralDeclaration_0()); }
)

    |(
{ before(grammarAccess.getModelGroupFunctionAccess().getOREnumLiteralDeclaration_1()); }
(	'OR' 
)
{ after(grammarAccess.getModelGroupFunctionAccess().getOREnumLiteralDeclaration_1()); }
)

    |(
{ before(grammarAccess.getModelGroupFunctionAccess().getAVGEnumLiteralDeclaration_2()); }
(	'AVG' 
)
{ after(grammarAccess.getModelGroupFunctionAccess().getAVGEnumLiteralDeclaration_2()); }
)

    |(
{ before(grammarAccess.getModelGroupFunctionAccess().getMAXEnumLiteralDeclaration_3()); }
(	'MAX' 
)
{ after(grammarAccess.getModelGroupFunctionAccess().getMAXEnumLiteralDeclaration_3()); }
)

    |(
{ before(grammarAccess.getModelGroupFunctionAccess().getMINEnumLiteralDeclaration_4()); }
(	'MIN' 
)
{ after(grammarAccess.getModelGroupFunctionAccess().getMINEnumLiteralDeclaration_4()); }
)

;
finally {
	restoreStackSize(stackSize);
}



rule__ModelItem__Group__0
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelItem__Group__0__Impl
	rule__ModelItem__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__Group__0__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getAlternatives_0()); }
(rule__ModelItem__Alternatives_0)
{ after(grammarAccess.getModelItemAccess().getAlternatives_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelItem__Group__1
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelItem__Group__1__Impl
	rule__ModelItem__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__Group__1__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getNameAssignment_1()); }
(rule__ModelItem__NameAssignment_1)
{ after(grammarAccess.getModelItemAccess().getNameAssignment_1()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelItem__Group__2
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelItem__Group__2__Impl
	rule__ModelItem__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__Group__2__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getLabelAssignment_2()); }
(rule__ModelItem__LabelAssignment_2)?
{ after(grammarAccess.getModelItemAccess().getLabelAssignment_2()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelItem__Group__3
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelItem__Group__3__Impl
	rule__ModelItem__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__Group__3__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getGroup_3()); }
(rule__ModelItem__Group_3__0)?
{ after(grammarAccess.getModelItemAccess().getGroup_3()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelItem__Group__4
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelItem__Group__4__Impl
	rule__ModelItem__Group__5
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__Group__4__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getGroup_4()); }
(rule__ModelItem__Group_4__0)?
{ after(grammarAccess.getModelItemAccess().getGroup_4()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelItem__Group__5
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelItem__Group__5__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__Group__5__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getGroup_5()); }
(rule__ModelItem__Group_5__0)*
{ after(grammarAccess.getModelItemAccess().getGroup_5()); }
)

;
finally {
	restoreStackSize(stackSize);
}














rule__ModelItem__Group_3__0
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelItem__Group_3__0__Impl
	rule__ModelItem__Group_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__Group_3__0__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getLessThanSignKeyword_3_0()); }

	'<' 

{ after(grammarAccess.getModelItemAccess().getLessThanSignKeyword_3_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelItem__Group_3__1
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelItem__Group_3__1__Impl
	rule__ModelItem__Group_3__2
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__Group_3__1__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getIconAssignment_3_1()); }
(rule__ModelItem__IconAssignment_3_1)
{ after(grammarAccess.getModelItemAccess().getIconAssignment_3_1()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelItem__Group_3__2
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelItem__Group_3__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__Group_3__2__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getGreaterThanSignKeyword_3_2()); }

	'>' 

{ after(grammarAccess.getModelItemAccess().getGreaterThanSignKeyword_3_2()); }
)

;
finally {
	restoreStackSize(stackSize);
}








rule__ModelItem__Group_4__0
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelItem__Group_4__0__Impl
	rule__ModelItem__Group_4__1
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__Group_4__0__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getLeftParenthesisKeyword_4_0()); }

	'(' 

{ after(grammarAccess.getModelItemAccess().getLeftParenthesisKeyword_4_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelItem__Group_4__1
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelItem__Group_4__1__Impl
	rule__ModelItem__Group_4__2
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__Group_4__1__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getGroupsAssignment_4_1()); }
(rule__ModelItem__GroupsAssignment_4_1)
{ after(grammarAccess.getModelItemAccess().getGroupsAssignment_4_1()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelItem__Group_4__2
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelItem__Group_4__2__Impl
	rule__ModelItem__Group_4__3
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__Group_4__2__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getGroup_4_2()); }
(rule__ModelItem__Group_4_2__0)*
{ after(grammarAccess.getModelItemAccess().getGroup_4_2()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelItem__Group_4__3
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelItem__Group_4__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__Group_4__3__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getRightParenthesisKeyword_4_3()); }

	')' 

{ after(grammarAccess.getModelItemAccess().getRightParenthesisKeyword_4_3()); }
)

;
finally {
	restoreStackSize(stackSize);
}










rule__ModelItem__Group_4_2__0
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelItem__Group_4_2__0__Impl
	rule__ModelItem__Group_4_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__Group_4_2__0__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getCommaKeyword_4_2_0()); }

	',' 

{ after(grammarAccess.getModelItemAccess().getCommaKeyword_4_2_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelItem__Group_4_2__1
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelItem__Group_4_2__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__Group_4_2__1__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getGroupsAssignment_4_2_1()); }
(rule__ModelItem__GroupsAssignment_4_2_1)
{ after(grammarAccess.getModelItemAccess().getGroupsAssignment_4_2_1()); }
)

;
finally {
	restoreStackSize(stackSize);
}






rule__ModelItem__Group_5__0
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelItem__Group_5__0__Impl
	rule__ModelItem__Group_5__1
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__Group_5__0__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getLeftCurlyBracketKeyword_5_0()); }

	'{' 

{ after(grammarAccess.getModelItemAccess().getLeftCurlyBracketKeyword_5_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelItem__Group_5__1
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelItem__Group_5__1__Impl
	rule__ModelItem__Group_5__2
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__Group_5__1__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getBindingsAssignment_5_1()); }
(rule__ModelItem__BindingsAssignment_5_1)
{ after(grammarAccess.getModelItemAccess().getBindingsAssignment_5_1()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelItem__Group_5__2
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelItem__Group_5__2__Impl
	rule__ModelItem__Group_5__3
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__Group_5__2__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getGroup_5_2()); }
(rule__ModelItem__Group_5_2__0)*
{ after(grammarAccess.getModelItemAccess().getGroup_5_2()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelItem__Group_5__3
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelItem__Group_5__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__Group_5__3__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getRightCurlyBracketKeyword_5_3()); }

	'}' 

{ after(grammarAccess.getModelItemAccess().getRightCurlyBracketKeyword_5_3()); }
)

;
finally {
	restoreStackSize(stackSize);
}










rule__ModelItem__Group_5_2__0
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelItem__Group_5_2__0__Impl
	rule__ModelItem__Group_5_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__Group_5_2__0__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getCommaKeyword_5_2_0()); }

	',' 

{ after(grammarAccess.getModelItemAccess().getCommaKeyword_5_2_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelItem__Group_5_2__1
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelItem__Group_5_2__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__Group_5_2__1__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getBindingsAssignment_5_2_1()); }
(rule__ModelItem__BindingsAssignment_5_2_1)
{ after(grammarAccess.getModelItemAccess().getBindingsAssignment_5_2_1()); }
)

;
finally {
	restoreStackSize(stackSize);
}






rule__ModelGroupItem__Group__0
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelGroupItem__Group__0__Impl
	rule__ModelGroupItem__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelGroupItem__Group__0__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelGroupItemAccess().getGroupKeyword_0()); }

	'Group' 

{ after(grammarAccess.getModelGroupItemAccess().getGroupKeyword_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelGroupItem__Group__1
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelGroupItem__Group__1__Impl
	rule__ModelGroupItem__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelGroupItem__Group__1__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelGroupItemAccess().getModelGroupItemAction_1()); }
(

)
{ after(grammarAccess.getModelGroupItemAccess().getModelGroupItemAction_1()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelGroupItem__Group__2
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelGroupItem__Group__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelGroupItem__Group__2__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelGroupItemAccess().getGroup_2()); }
(rule__ModelGroupItem__Group_2__0)?
{ after(grammarAccess.getModelGroupItemAccess().getGroup_2()); }
)

;
finally {
	restoreStackSize(stackSize);
}








rule__ModelGroupItem__Group_2__0
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelGroupItem__Group_2__0__Impl
	rule__ModelGroupItem__Group_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelGroupItem__Group_2__0__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelGroupItemAccess().getColonKeyword_2_0()); }

	':' 

{ after(grammarAccess.getModelGroupItemAccess().getColonKeyword_2_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelGroupItem__Group_2__1
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelGroupItem__Group_2__1__Impl
	rule__ModelGroupItem__Group_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelGroupItem__Group_2__1__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelGroupItemAccess().getTypeAssignment_2_1()); }
(rule__ModelGroupItem__TypeAssignment_2_1)
{ after(grammarAccess.getModelGroupItemAccess().getTypeAssignment_2_1()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelGroupItem__Group_2__2
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelGroupItem__Group_2__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelGroupItem__Group_2__2__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelGroupItemAccess().getGroup_2_2()); }
(rule__ModelGroupItem__Group_2_2__0)?
{ after(grammarAccess.getModelGroupItemAccess().getGroup_2_2()); }
)

;
finally {
	restoreStackSize(stackSize);
}








rule__ModelGroupItem__Group_2_2__0
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelGroupItem__Group_2_2__0__Impl
	rule__ModelGroupItem__Group_2_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelGroupItem__Group_2_2__0__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelGroupItemAccess().getColonKeyword_2_2_0()); }

	':' 

{ after(grammarAccess.getModelGroupItemAccess().getColonKeyword_2_2_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelGroupItem__Group_2_2__1
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelGroupItem__Group_2_2__1__Impl
	rule__ModelGroupItem__Group_2_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelGroupItem__Group_2_2__1__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelGroupItemAccess().getFunctionAssignment_2_2_1()); }
(rule__ModelGroupItem__FunctionAssignment_2_2_1)
{ after(grammarAccess.getModelGroupItemAccess().getFunctionAssignment_2_2_1()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelGroupItem__Group_2_2__2
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelGroupItem__Group_2_2__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelGroupItem__Group_2_2__2__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelGroupItemAccess().getGroup_2_2_2()); }
(rule__ModelGroupItem__Group_2_2_2__0)?
{ after(grammarAccess.getModelGroupItemAccess().getGroup_2_2_2()); }
)

;
finally {
	restoreStackSize(stackSize);
}








rule__ModelGroupItem__Group_2_2_2__0
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelGroupItem__Group_2_2_2__0__Impl
	rule__ModelGroupItem__Group_2_2_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelGroupItem__Group_2_2_2__0__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelGroupItemAccess().getLeftParenthesisKeyword_2_2_2_0()); }

	'(' 

{ after(grammarAccess.getModelGroupItemAccess().getLeftParenthesisKeyword_2_2_2_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelGroupItem__Group_2_2_2__1
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelGroupItem__Group_2_2_2__1__Impl
	rule__ModelGroupItem__Group_2_2_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelGroupItem__Group_2_2_2__1__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelGroupItemAccess().getArgsAssignment_2_2_2_1()); }
(rule__ModelGroupItem__ArgsAssignment_2_2_2_1)
{ after(grammarAccess.getModelGroupItemAccess().getArgsAssignment_2_2_2_1()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelGroupItem__Group_2_2_2__2
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelGroupItem__Group_2_2_2__2__Impl
	rule__ModelGroupItem__Group_2_2_2__3
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelGroupItem__Group_2_2_2__2__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelGroupItemAccess().getGroup_2_2_2_2()); }
(rule__ModelGroupItem__Group_2_2_2_2__0)*
{ after(grammarAccess.getModelGroupItemAccess().getGroup_2_2_2_2()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelGroupItem__Group_2_2_2__3
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelGroupItem__Group_2_2_2__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelGroupItem__Group_2_2_2__3__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelGroupItemAccess().getRightParenthesisKeyword_2_2_2_3()); }

	')' 

{ after(grammarAccess.getModelGroupItemAccess().getRightParenthesisKeyword_2_2_2_3()); }
)

;
finally {
	restoreStackSize(stackSize);
}










rule__ModelGroupItem__Group_2_2_2_2__0
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelGroupItem__Group_2_2_2_2__0__Impl
	rule__ModelGroupItem__Group_2_2_2_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelGroupItem__Group_2_2_2_2__0__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelGroupItemAccess().getCommaKeyword_2_2_2_2_0()); }

	',' 

{ after(grammarAccess.getModelGroupItemAccess().getCommaKeyword_2_2_2_2_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelGroupItem__Group_2_2_2_2__1
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelGroupItem__Group_2_2_2_2__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelGroupItem__Group_2_2_2_2__1__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelGroupItemAccess().getArgsAssignment_2_2_2_2_1()); }
(rule__ModelGroupItem__ArgsAssignment_2_2_2_2_1)
{ after(grammarAccess.getModelGroupItemAccess().getArgsAssignment_2_2_2_2_1()); }
)

;
finally {
	restoreStackSize(stackSize);
}






rule__ModelBinding__Group__0
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelBinding__Group__0__Impl
	rule__ModelBinding__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelBinding__Group__0__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelBindingAccess().getTypeAssignment_0()); }
(rule__ModelBinding__TypeAssignment_0)
{ after(grammarAccess.getModelBindingAccess().getTypeAssignment_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelBinding__Group__1
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelBinding__Group__1__Impl
	rule__ModelBinding__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelBinding__Group__1__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelBindingAccess().getEqualsSignKeyword_1()); }

	'=' 

{ after(grammarAccess.getModelBindingAccess().getEqualsSignKeyword_1()); }
)

;
finally {
	restoreStackSize(stackSize);
}


rule__ModelBinding__Group__2
    @init {
		int stackSize = keepStackSize();
    }
:
	rule__ModelBinding__Group__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__ModelBinding__Group__2__Impl
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelBindingAccess().getConfigurationAssignment_2()); }
(rule__ModelBinding__ConfigurationAssignment_2)
{ after(grammarAccess.getModelBindingAccess().getConfigurationAssignment_2()); }
)

;
finally {
	restoreStackSize(stackSize);
}









rule__ItemModel__ItemsAssignment
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getItemModelAccess().getItemsModelItemParserRuleCall_0()); }
	ruleModelItem{ after(grammarAccess.getItemModelAccess().getItemsModelItemParserRuleCall_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__NameAssignment_1
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getNameIDTerminalRuleCall_1_0()); }
	RULE_ID{ after(grammarAccess.getModelItemAccess().getNameIDTerminalRuleCall_1_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__LabelAssignment_2
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getLabelSTRINGTerminalRuleCall_2_0()); }
	RULE_STRING{ after(grammarAccess.getModelItemAccess().getLabelSTRINGTerminalRuleCall_2_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__IconAssignment_3_1
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getIconAlternatives_3_1_0()); }
(rule__ModelItem__IconAlternatives_3_1_0)
{ after(grammarAccess.getModelItemAccess().getIconAlternatives_3_1_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__GroupsAssignment_4_1
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getGroupsModelGroupItemCrossReference_4_1_0()); }
(
{ before(grammarAccess.getModelItemAccess().getGroupsModelGroupItemIDTerminalRuleCall_4_1_0_1()); }
	RULE_ID{ after(grammarAccess.getModelItemAccess().getGroupsModelGroupItemIDTerminalRuleCall_4_1_0_1()); }
)
{ after(grammarAccess.getModelItemAccess().getGroupsModelGroupItemCrossReference_4_1_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__GroupsAssignment_4_2_1
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getGroupsModelGroupItemCrossReference_4_2_1_0()); }
(
{ before(grammarAccess.getModelItemAccess().getGroupsModelGroupItemIDTerminalRuleCall_4_2_1_0_1()); }
	RULE_ID{ after(grammarAccess.getModelItemAccess().getGroupsModelGroupItemIDTerminalRuleCall_4_2_1_0_1()); }
)
{ after(grammarAccess.getModelItemAccess().getGroupsModelGroupItemCrossReference_4_2_1_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__BindingsAssignment_5_1
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getBindingsModelBindingParserRuleCall_5_1_0()); }
	ruleModelBinding{ after(grammarAccess.getModelItemAccess().getBindingsModelBindingParserRuleCall_5_1_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}

rule__ModelItem__BindingsAssignment_5_2_1
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelItemAccess().getBindingsModelBindingParserRuleCall_5_2_1_0()); }
	ruleModelBinding{ after(grammarAccess.getModelItemAccess().getBindingsModelBindingParserRuleCall_5_2_1_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}

rule__ModelGroupItem__TypeAssignment_2_1
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelGroupItemAccess().getTypeModelItemTypeParserRuleCall_2_1_0()); }
	ruleModelItemType{ after(grammarAccess.getModelGroupItemAccess().getTypeModelItemTypeParserRuleCall_2_1_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}

rule__ModelGroupItem__FunctionAssignment_2_2_1
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelGroupItemAccess().getFunctionModelGroupFunctionEnumRuleCall_2_2_1_0()); }
	ruleModelGroupFunction{ after(grammarAccess.getModelGroupItemAccess().getFunctionModelGroupFunctionEnumRuleCall_2_2_1_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}

rule__ModelGroupItem__ArgsAssignment_2_2_2_1
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelGroupItemAccess().getArgsAlternatives_2_2_2_1_0()); }
(rule__ModelGroupItem__ArgsAlternatives_2_2_2_1_0)
{ after(grammarAccess.getModelGroupItemAccess().getArgsAlternatives_2_2_2_1_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}

rule__ModelGroupItem__ArgsAssignment_2_2_2_2_1
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelGroupItemAccess().getArgsAlternatives_2_2_2_2_1_0()); }
(rule__ModelGroupItem__ArgsAlternatives_2_2_2_2_1_0)
{ after(grammarAccess.getModelGroupItemAccess().getArgsAlternatives_2_2_2_2_1_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}

rule__ModelNormalItem__TypeAssignment
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelNormalItemAccess().getTypeModelItemTypeParserRuleCall_0()); }
	ruleModelItemType{ after(grammarAccess.getModelNormalItemAccess().getTypeModelItemTypeParserRuleCall_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}

rule__ModelBinding__TypeAssignment_0
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelBindingAccess().getTypeIDTerminalRuleCall_0_0()); }
	RULE_ID{ after(grammarAccess.getModelBindingAccess().getTypeIDTerminalRuleCall_0_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}

rule__ModelBinding__ConfigurationAssignment_2
    @init {
		int stackSize = keepStackSize();
    }
:
(
{ before(grammarAccess.getModelBindingAccess().getConfigurationSTRINGTerminalRuleCall_2_0()); }
	RULE_STRING{ after(grammarAccess.getModelBindingAccess().getConfigurationSTRINGTerminalRuleCall_2_0()); }
)

;
finally {
	restoreStackSize(stackSize);
}


RULE_ID : '^'? ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;

RULE_INT : ('0'..'9')+;

RULE_STRING : ('"' ('\\' ('b'|'t'|'n'|'f'|'r'|'"'|'\''|'\\')|~(('\\'|'"')))* '"'|'\'' ('\\' ('b'|'t'|'n'|'f'|'r'|'"'|'\''|'\\')|~(('\\'|'\'')))* '\'');

RULE_ML_COMMENT : '/*' ( options {greedy=false;} : . )*'*/';

RULE_SL_COMMENT : '//' ~(('\n'|'\r'))* ('\r'? '\n')?;

RULE_WS : (' '|'\t'|'\r'|'\n')+;

RULE_ANY_OTHER : .;


