/*
 * generated by Xtext 2.14.0
 */
grammar InternalRDL;

options {
	superClass=AbstractInternalAntlrParser;
	backtrack=true;
}

@lexer::header {
package com.minres.rdl.parser.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.parser.antlr.Lexer;
}

@parser::header {
package com.minres.rdl.parser.antlr.internal;

import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.common.util.Enumerator;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import com.minres.rdl.services.RDLGrammarAccess;

}

@parser::members {

/*
  This grammar contains a lot of empty actions to work around a bug in ANTLR.
  Otherwise the ANTLR tool will create synpreds that cannot be compiled in some rare cases.
*/

 	private RDLGrammarAccess grammarAccess;

    public InternalRDLParser(TokenStream input, RDLGrammarAccess grammarAccess) {
        this(input);
        this.grammarAccess = grammarAccess;
        registerRules(grammarAccess.getGrammar());
    }

    @Override
    protected String getFirstRuleName() {
    	return "Root";
   	}

   	@Override
   	protected RDLGrammarAccess getGrammarAccess() {
   		return grammarAccess;
   	}

}

@rulecatch {
    catch (RecognitionException re) {
        recover(input,re);
        appendSkippedTokens();
    }
}

// Entry rule entryRuleRoot
entryRuleRoot returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getRootRule()); }
	iv_ruleRoot=ruleRoot
	{ $current=$iv_ruleRoot.current; }
	EOF;

// Rule Root
ruleRoot returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		(
			(
				{
					newCompositeNode(grammarAccess.getRootAccess().getIncludesIncludeParserRuleCall_0_0());
				}
				lv_includes_0_0=ruleInclude
				{
					if ($current==null) {
						$current = createModelElementForParent(grammarAccess.getRootRule());
					}
					add(
						$current,
						"includes",
						lv_includes_0_0,
						"com.minres.rdl.RDL.Include");
					afterParserOrEnumRuleCall();
				}
			)
		)
		    |
		(
			(
				(
					{
						newCompositeNode(grammarAccess.getRootAccess().getComponentDefinitionsComponentDefinitionParserRuleCall_1_0_0());
					}
					lv_componentDefinitions_1_0=ruleComponentDefinition
					{
						if ($current==null) {
							$current = createModelElementForParent(grammarAccess.getRootRule());
						}
						add(
							$current,
							"componentDefinitions",
							lv_componentDefinitions_1_0,
							"com.minres.rdl.RDL.ComponentDefinition");
						afterParserOrEnumRuleCall();
					}
				)
			)
			otherlv_2=';'
			{
				newLeafNode(otherlv_2, grammarAccess.getRootAccess().getSemicolonKeyword_1_1());
			}
		)
		    |
		(
			(
				(
					{
						newCompositeNode(grammarAccess.getRootAccess().getEnumDefinitionsEnumDefinitionParserRuleCall_2_0_0());
					}
					lv_enumDefinitions_3_0=ruleEnumDefinition
					{
						if ($current==null) {
							$current = createModelElementForParent(grammarAccess.getRootRule());
						}
						add(
							$current,
							"enumDefinitions",
							lv_enumDefinitions_3_0,
							"com.minres.rdl.RDL.EnumDefinition");
						afterParserOrEnumRuleCall();
					}
				)
			)
			otherlv_4=';'
			{
				newLeafNode(otherlv_4, grammarAccess.getRootAccess().getSemicolonKeyword_2_1());
			}
		)
		    |
		(
			(
				(
					{
						newCompositeNode(grammarAccess.getRootAccess().getInstantiationsInstantiationParserRuleCall_3_0_0());
					}
					lv_instantiations_5_0=ruleInstantiation
					{
						if ($current==null) {
							$current = createModelElementForParent(grammarAccess.getRootRule());
						}
						add(
							$current,
							"instantiations",
							lv_instantiations_5_0,
							"com.minres.rdl.RDL.Instantiation");
						afterParserOrEnumRuleCall();
					}
				)
			)
			otherlv_6=';'
			{
				newLeafNode(otherlv_6, grammarAccess.getRootAccess().getSemicolonKeyword_3_1());
			}
		)
		    |
		(
			(
				(
					{
						newCompositeNode(grammarAccess.getRootAccess().getPropertyAssignmentsPropertyAssignmentParserRuleCall_4_0_0());
					}
					lv_propertyAssignments_7_0=rulePropertyAssignment
					{
						if ($current==null) {
							$current = createModelElementForParent(grammarAccess.getRootRule());
						}
						add(
							$current,
							"propertyAssignments",
							lv_propertyAssignments_7_0,
							"com.minres.rdl.RDL.PropertyAssignment");
						afterParserOrEnumRuleCall();
					}
				)
			)
			otherlv_8=';'
			{
				newLeafNode(otherlv_8, grammarAccess.getRootAccess().getSemicolonKeyword_4_1());
			}
		)
		    |
		(
			(
				(
					{
						newCompositeNode(grammarAccess.getRootAccess().getPropertyDefinitionsPropertyDefinitionParserRuleCall_5_0_0());
					}
					lv_propertyDefinitions_9_0=rulePropertyDefinition
					{
						if ($current==null) {
							$current = createModelElementForParent(grammarAccess.getRootRule());
						}
						add(
							$current,
							"propertyDefinitions",
							lv_propertyDefinitions_9_0,
							"com.minres.rdl.RDL.PropertyDefinition");
						afterParserOrEnumRuleCall();
					}
				)
			)
			otherlv_10=';'
			{
				newLeafNode(otherlv_10, grammarAccess.getRootAccess().getSemicolonKeyword_5_1());
			}
		)
	)*
;

// Entry rule entryRuleInclude
entryRuleInclude returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getIncludeRule()); }
	iv_ruleInclude=ruleInclude
	{ $current=$iv_ruleInclude.current; }
	EOF;

// Rule Include
ruleInclude returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		otherlv_0='`include'
		{
			newLeafNode(otherlv_0, grammarAccess.getIncludeAccess().getIncludeKeyword_0());
		}
		(
			(
				lv_importURI_1_0=RULE_STR
				{
					newLeafNode(lv_importURI_1_0, grammarAccess.getIncludeAccess().getImportURISTRTerminalRuleCall_1_0());
				}
				{
					if ($current==null) {
						$current = createModelElement(grammarAccess.getIncludeRule());
					}
					setWithLastConsumed(
						$current,
						"importURI",
						lv_importURI_1_0,
						"com.minres.rdl.RDL.STR");
				}
			)
		)
	)
;

// Entry rule entryRulePropertyDefinition
entryRulePropertyDefinition returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getPropertyDefinitionRule()); }
	iv_rulePropertyDefinition=rulePropertyDefinition
	{ $current=$iv_rulePropertyDefinition.current; }
	EOF;

// Rule PropertyDefinition
rulePropertyDefinition returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		otherlv_0='property'
		{
			newLeafNode(otherlv_0, grammarAccess.getPropertyDefinitionAccess().getPropertyKeyword_0());
		}
		(
			(
				lv_name_1_0=RULE_ID
				{
					newLeafNode(lv_name_1_0, grammarAccess.getPropertyDefinitionAccess().getNameIDTerminalRuleCall_1_0());
				}
				{
					if ($current==null) {
						$current = createModelElement(grammarAccess.getPropertyDefinitionRule());
					}
					setWithLastConsumed(
						$current,
						"name",
						lv_name_1_0,
						"com.minres.rdl.RDL.ID");
				}
			)
		)
		otherlv_2='{'
		{
			newLeafNode(otherlv_2, grammarAccess.getPropertyDefinitionAccess().getLeftCurlyBracketKeyword_2());
		}
		(
			(
				otherlv_3='type'
				{
					newLeafNode(otherlv_3, grammarAccess.getPropertyDefinitionAccess().getTypeKeyword_3_0_0());
				}
				otherlv_4='='
				{
					newLeafNode(otherlv_4, grammarAccess.getPropertyDefinitionAccess().getEqualsSignKeyword_3_0_1());
				}
				(
					(
						{
							newCompositeNode(grammarAccess.getPropertyDefinitionAccess().getTypePropertyTypeNameEnumRuleCall_3_0_2_0());
						}
						lv_type_5_0=rulePropertyTypeName
						{
							if ($current==null) {
								$current = createModelElementForParent(grammarAccess.getPropertyDefinitionRule());
							}
							set(
								$current,
								"type",
								lv_type_5_0,
								"com.minres.rdl.RDL.PropertyTypeName");
							afterParserOrEnumRuleCall();
						}
					)
				)
				otherlv_6=';'
				{
					newLeafNode(otherlv_6, grammarAccess.getPropertyDefinitionAccess().getSemicolonKeyword_3_0_3());
				}
				(
					(
						(
							(
								{
									newCompositeNode(grammarAccess.getPropertyDefinitionAccess().getUsagePropertyUsageParserRuleCall_3_0_4_0_0_0());
								}
								lv_usage_7_0=rulePropertyUsage
								{
									if ($current==null) {
										$current = createModelElementForParent(grammarAccess.getPropertyDefinitionRule());
									}
									set(
										$current,
										"usage",
										lv_usage_7_0,
										"com.minres.rdl.RDL.PropertyUsage");
									afterParserOrEnumRuleCall();
								}
							)
						)
						(
							(
								{
									newCompositeNode(grammarAccess.getPropertyDefinitionAccess().getDefaultPropertyDefaultParserRuleCall_3_0_4_0_1_0());
								}
								lv_default_8_0=rulePropertyDefault
								{
									if ($current==null) {
										$current = createModelElementForParent(grammarAccess.getPropertyDefinitionRule());
									}
									set(
										$current,
										"default",
										lv_default_8_0,
										"com.minres.rdl.RDL.PropertyDefault");
									afterParserOrEnumRuleCall();
								}
							)
						)?
					)
					    |
					(
						(
							(
								{
									newCompositeNode(grammarAccess.getPropertyDefinitionAccess().getDefaultPropertyDefaultParserRuleCall_3_0_4_1_0_0());
								}
								lv_default_9_0=rulePropertyDefault
								{
									if ($current==null) {
										$current = createModelElementForParent(grammarAccess.getPropertyDefinitionRule());
									}
									set(
										$current,
										"default",
										lv_default_9_0,
										"com.minres.rdl.RDL.PropertyDefault");
									afterParserOrEnumRuleCall();
								}
							)
						)
						(
							(
								{
									newCompositeNode(grammarAccess.getPropertyDefinitionAccess().getUsagePropertyUsageParserRuleCall_3_0_4_1_1_0());
								}
								lv_usage_10_0=rulePropertyUsage
								{
									if ($current==null) {
										$current = createModelElementForParent(grammarAccess.getPropertyDefinitionRule());
									}
									set(
										$current,
										"usage",
										lv_usage_10_0,
										"com.minres.rdl.RDL.PropertyUsage");
									afterParserOrEnumRuleCall();
								}
							)
						)
					)
				)
			)
			    |
			(
				(
					(
						{
							newCompositeNode(grammarAccess.getPropertyDefinitionAccess().getUsagePropertyUsageParserRuleCall_3_1_0_0());
						}
						lv_usage_11_0=rulePropertyUsage
						{
							if ($current==null) {
								$current = createModelElementForParent(grammarAccess.getPropertyDefinitionRule());
							}
							set(
								$current,
								"usage",
								lv_usage_11_0,
								"com.minres.rdl.RDL.PropertyUsage");
							afterParserOrEnumRuleCall();
						}
					)
				)
				(
					(
						otherlv_12='type'
						{
							newLeafNode(otherlv_12, grammarAccess.getPropertyDefinitionAccess().getTypeKeyword_3_1_1_0_0());
						}
						otherlv_13='='
						{
							newLeafNode(otherlv_13, grammarAccess.getPropertyDefinitionAccess().getEqualsSignKeyword_3_1_1_0_1());
						}
						(
							(
								{
									newCompositeNode(grammarAccess.getPropertyDefinitionAccess().getTypePropertyTypeNameEnumRuleCall_3_1_1_0_2_0());
								}
								lv_type_14_0=rulePropertyTypeName
								{
									if ($current==null) {
										$current = createModelElementForParent(grammarAccess.getPropertyDefinitionRule());
									}
									set(
										$current,
										"type",
										lv_type_14_0,
										"com.minres.rdl.RDL.PropertyTypeName");
									afterParserOrEnumRuleCall();
								}
							)
						)
						otherlv_15=';'
						{
							newLeafNode(otherlv_15, grammarAccess.getPropertyDefinitionAccess().getSemicolonKeyword_3_1_1_0_3());
						}
						(
							(
								{
									newCompositeNode(grammarAccess.getPropertyDefinitionAccess().getDefaultPropertyDefaultParserRuleCall_3_1_1_0_4_0());
								}
								lv_default_16_0=rulePropertyDefault
								{
									if ($current==null) {
										$current = createModelElementForParent(grammarAccess.getPropertyDefinitionRule());
									}
									set(
										$current,
										"default",
										lv_default_16_0,
										"com.minres.rdl.RDL.PropertyDefault");
									afterParserOrEnumRuleCall();
								}
							)
						)?
					)
					    |
					(
						(
							(
								{
									newCompositeNode(grammarAccess.getPropertyDefinitionAccess().getDefaultPropertyDefaultParserRuleCall_3_1_1_1_0_0());
								}
								lv_default_17_0=rulePropertyDefault
								{
									if ($current==null) {
										$current = createModelElementForParent(grammarAccess.getPropertyDefinitionRule());
									}
									set(
										$current,
										"default",
										lv_default_17_0,
										"com.minres.rdl.RDL.PropertyDefault");
									afterParserOrEnumRuleCall();
								}
							)
						)
						otherlv_18='type'
						{
							newLeafNode(otherlv_18, grammarAccess.getPropertyDefinitionAccess().getTypeKeyword_3_1_1_1_1());
						}
						otherlv_19='='
						{
							newLeafNode(otherlv_19, grammarAccess.getPropertyDefinitionAccess().getEqualsSignKeyword_3_1_1_1_2());
						}
						(
							(
								{
									newCompositeNode(grammarAccess.getPropertyDefinitionAccess().getTypePropertyTypeNameEnumRuleCall_3_1_1_1_3_0());
								}
								lv_type_20_0=rulePropertyTypeName
								{
									if ($current==null) {
										$current = createModelElementForParent(grammarAccess.getPropertyDefinitionRule());
									}
									set(
										$current,
										"type",
										lv_type_20_0,
										"com.minres.rdl.RDL.PropertyTypeName");
									afterParserOrEnumRuleCall();
								}
							)
						)
						otherlv_21=';'
						{
							newLeafNode(otherlv_21, grammarAccess.getPropertyDefinitionAccess().getSemicolonKeyword_3_1_1_1_4());
						}
					)
				)
			)
			    |
			(
				(
					(
						{
							newCompositeNode(grammarAccess.getPropertyDefinitionAccess().getDefaultPropertyDefaultParserRuleCall_3_2_0_0());
						}
						lv_default_22_0=rulePropertyDefault
						{
							if ($current==null) {
								$current = createModelElementForParent(grammarAccess.getPropertyDefinitionRule());
							}
							set(
								$current,
								"default",
								lv_default_22_0,
								"com.minres.rdl.RDL.PropertyDefault");
							afterParserOrEnumRuleCall();
						}
					)
				)
				(
					(
						otherlv_23='type'
						{
							newLeafNode(otherlv_23, grammarAccess.getPropertyDefinitionAccess().getTypeKeyword_3_2_1_0_0());
						}
						otherlv_24='='
						{
							newLeafNode(otherlv_24, grammarAccess.getPropertyDefinitionAccess().getEqualsSignKeyword_3_2_1_0_1());
						}
						(
							(
								{
									newCompositeNode(grammarAccess.getPropertyDefinitionAccess().getTypePropertyTypeNameEnumRuleCall_3_2_1_0_2_0());
								}
								lv_type_25_0=rulePropertyTypeName
								{
									if ($current==null) {
										$current = createModelElementForParent(grammarAccess.getPropertyDefinitionRule());
									}
									set(
										$current,
										"type",
										lv_type_25_0,
										"com.minres.rdl.RDL.PropertyTypeName");
									afterParserOrEnumRuleCall();
								}
							)
						)
						otherlv_26=';'
						{
							newLeafNode(otherlv_26, grammarAccess.getPropertyDefinitionAccess().getSemicolonKeyword_3_2_1_0_3());
						}
						(
							(
								{
									newCompositeNode(grammarAccess.getPropertyDefinitionAccess().getUsagePropertyUsageParserRuleCall_3_2_1_0_4_0());
								}
								lv_usage_27_0=rulePropertyUsage
								{
									if ($current==null) {
										$current = createModelElementForParent(grammarAccess.getPropertyDefinitionRule());
									}
									set(
										$current,
										"usage",
										lv_usage_27_0,
										"com.minres.rdl.RDL.PropertyUsage");
									afterParserOrEnumRuleCall();
								}
							)
						)
					)
					    |
					(
						(
							(
								{
									newCompositeNode(grammarAccess.getPropertyDefinitionAccess().getUsagePropertyUsageParserRuleCall_3_2_1_1_0_0());
								}
								lv_usage_28_0=rulePropertyUsage
								{
									if ($current==null) {
										$current = createModelElementForParent(grammarAccess.getPropertyDefinitionRule());
									}
									set(
										$current,
										"usage",
										lv_usage_28_0,
										"com.minres.rdl.RDL.PropertyUsage");
									afterParserOrEnumRuleCall();
								}
							)
						)
						otherlv_29='type'
						{
							newLeafNode(otherlv_29, grammarAccess.getPropertyDefinitionAccess().getTypeKeyword_3_2_1_1_1());
						}
						otherlv_30='='
						{
							newLeafNode(otherlv_30, grammarAccess.getPropertyDefinitionAccess().getEqualsSignKeyword_3_2_1_1_2());
						}
						(
							(
								{
									newCompositeNode(grammarAccess.getPropertyDefinitionAccess().getTypePropertyTypeNameEnumRuleCall_3_2_1_1_3_0());
								}
								lv_type_31_0=rulePropertyTypeName
								{
									if ($current==null) {
										$current = createModelElementForParent(grammarAccess.getPropertyDefinitionRule());
									}
									set(
										$current,
										"type",
										lv_type_31_0,
										"com.minres.rdl.RDL.PropertyTypeName");
									afterParserOrEnumRuleCall();
								}
							)
						)
						otherlv_32=';'
						{
							newLeafNode(otherlv_32, grammarAccess.getPropertyDefinitionAccess().getSemicolonKeyword_3_2_1_1_4());
						}
					)
				)
			)
		)
		otherlv_33='}'
		{
			newLeafNode(otherlv_33, grammarAccess.getPropertyDefinitionAccess().getRightCurlyBracketKeyword_4());
		}
		otherlv_34=';'
		{
			newLeafNode(otherlv_34, grammarAccess.getPropertyDefinitionAccess().getSemicolonKeyword_5());
		}
	)
;

// Entry rule entryRulePropertyDefault
entryRulePropertyDefault returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getPropertyDefaultRule()); }
	iv_rulePropertyDefault=rulePropertyDefault
	{ $current=$iv_rulePropertyDefault.current; }
	EOF;

// Rule PropertyDefault
rulePropertyDefault returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		otherlv_0='default'
		{
			newLeafNode(otherlv_0, grammarAccess.getPropertyDefaultAccess().getDefaultKeyword_0());
		}
		otherlv_1='='
		{
			newLeafNode(otherlv_1, grammarAccess.getPropertyDefaultAccess().getEqualsSignKeyword_1());
		}
		(
			(
				(
					lv_string_2_0=RULE_STR
					{
						newLeafNode(lv_string_2_0, grammarAccess.getPropertyDefaultAccess().getStringSTRTerminalRuleCall_2_0_0());
					}
					{
						if ($current==null) {
							$current = createModelElement(grammarAccess.getPropertyDefaultRule());
						}
						setWithLastConsumed(
							$current,
							"string",
							lv_string_2_0,
							"com.minres.rdl.RDL.STR");
					}
				)
			)
			    |
			(
				(
					lv_value_3_0=RULE_NUM
					{
						newLeafNode(lv_value_3_0, grammarAccess.getPropertyDefaultAccess().getValueNUMTerminalRuleCall_2_1_0());
					}
					{
						if ($current==null) {
							$current = createModelElement(grammarAccess.getPropertyDefaultRule());
						}
						setWithLastConsumed(
							$current,
							"value",
							lv_value_3_0,
							"com.minres.rdl.RDL.NUM");
					}
				)
			)
			    |
			(
				(
					lv_string_4_0='true'
					{
						newLeafNode(lv_string_4_0, grammarAccess.getPropertyDefaultAccess().getStringTrueKeyword_2_2_0());
					}
					{
						if ($current==null) {
							$current = createModelElement(grammarAccess.getPropertyDefaultRule());
						}
						setWithLastConsumed($current, "string", lv_string_4_0, "true");
					}
				)
			)
			    |
			(
				(
					lv_string_5_0='false'
					{
						newLeafNode(lv_string_5_0, grammarAccess.getPropertyDefaultAccess().getStringFalseKeyword_2_3_0());
					}
					{
						if ($current==null) {
							$current = createModelElement(grammarAccess.getPropertyDefaultRule());
						}
						setWithLastConsumed($current, "string", lv_string_5_0, "false");
					}
				)
			)
		)
		otherlv_6=';'
		{
			newLeafNode(otherlv_6, grammarAccess.getPropertyDefaultAccess().getSemicolonKeyword_3());
		}
	)
;

// Entry rule entryRulePropertyUsage
entryRulePropertyUsage returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getPropertyUsageRule()); }
	iv_rulePropertyUsage=rulePropertyUsage
	{ $current=$iv_rulePropertyUsage.current; }
	EOF;

// Rule PropertyUsage
rulePropertyUsage returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		otherlv_0='component'
		{
			newLeafNode(otherlv_0, grammarAccess.getPropertyUsageAccess().getComponentKeyword_0());
		}
		otherlv_1='='
		{
			newLeafNode(otherlv_1, grammarAccess.getPropertyUsageAccess().getEqualsSignKeyword_1());
		}
		(
			(
				{
					newCompositeNode(grammarAccess.getPropertyUsageAccess().getComponentsPropertyComponentEnumRuleCall_2_0());
				}
				lv_components_2_0=rulePropertyComponent
				{
					if ($current==null) {
						$current = createModelElementForParent(grammarAccess.getPropertyUsageRule());
					}
					add(
						$current,
						"components",
						lv_components_2_0,
						"com.minres.rdl.RDL.PropertyComponent");
					afterParserOrEnumRuleCall();
				}
			)
		)
		(
			otherlv_3='|'
			{
				newLeafNode(otherlv_3, grammarAccess.getPropertyUsageAccess().getVerticalLineKeyword_3_0());
			}
			(
				(
					{
						newCompositeNode(grammarAccess.getPropertyUsageAccess().getComponentsPropertyComponentEnumRuleCall_3_1_0());
					}
					lv_components_4_0=rulePropertyComponent
					{
						if ($current==null) {
							$current = createModelElementForParent(grammarAccess.getPropertyUsageRule());
						}
						add(
							$current,
							"components",
							lv_components_4_0,
							"com.minres.rdl.RDL.PropertyComponent");
						afterParserOrEnumRuleCall();
					}
				)
			)
		)*
		otherlv_5=';'
		{
			newLeafNode(otherlv_5, grammarAccess.getPropertyUsageAccess().getSemicolonKeyword_4());
		}
	)
;

// Entry rule entryRuleComponentDefinition
entryRuleComponentDefinition returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getComponentDefinitionRule()); }
	iv_ruleComponentDefinition=ruleComponentDefinition
	{ $current=$iv_ruleComponentDefinition.current; }
	EOF;

// Rule ComponentDefinition
ruleComponentDefinition returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		(
			(
				{
					newCompositeNode(grammarAccess.getComponentDefinitionAccess().getTypeComponentDefinitionTypeEnumRuleCall_0_0());
				}
				lv_type_0_0=ruleComponentDefinitionType
				{
					if ($current==null) {
						$current = createModelElementForParent(grammarAccess.getComponentDefinitionRule());
					}
					set(
						$current,
						"type",
						lv_type_0_0,
						"com.minres.rdl.RDL.ComponentDefinitionType");
					afterParserOrEnumRuleCall();
				}
			)
		)
		(
			(
				lv_name_1_0=RULE_ID
				{
					newLeafNode(lv_name_1_0, grammarAccess.getComponentDefinitionAccess().getNameIDTerminalRuleCall_1_0());
				}
				{
					if ($current==null) {
						$current = createModelElement(grammarAccess.getComponentDefinitionRule());
					}
					setWithLastConsumed(
						$current,
						"name",
						lv_name_1_0,
						"com.minres.rdl.RDL.ID");
				}
			)
		)?
		otherlv_2='{'
		{
			newLeafNode(otherlv_2, grammarAccess.getComponentDefinitionAccess().getLeftCurlyBracketKeyword_2());
		}
		(
			(
				(
					(
						{
							newCompositeNode(grammarAccess.getComponentDefinitionAccess().getComponentDefinitionsComponentDefinitionParserRuleCall_3_0_0_0());
						}
						lv_componentDefinitions_3_0=ruleComponentDefinition
						{
							if ($current==null) {
								$current = createModelElementForParent(grammarAccess.getComponentDefinitionRule());
							}
							add(
								$current,
								"componentDefinitions",
								lv_componentDefinitions_3_0,
								"com.minres.rdl.RDL.ComponentDefinition");
							afterParserOrEnumRuleCall();
						}
					)
				)
				otherlv_4=';'
				{
					newLeafNode(otherlv_4, grammarAccess.getComponentDefinitionAccess().getSemicolonKeyword_3_0_1());
				}
			)
			    |
			(
				(
					(
						{
							newCompositeNode(grammarAccess.getComponentDefinitionAccess().getInstantiationsInstantiationParserRuleCall_3_1_0_0());
						}
						lv_instantiations_5_0=ruleInstantiation
						{
							if ($current==null) {
								$current = createModelElementForParent(grammarAccess.getComponentDefinitionRule());
							}
							add(
								$current,
								"instantiations",
								lv_instantiations_5_0,
								"com.minres.rdl.RDL.Instantiation");
							afterParserOrEnumRuleCall();
						}
					)
				)
				otherlv_6=';'
				{
					newLeafNode(otherlv_6, grammarAccess.getComponentDefinitionAccess().getSemicolonKeyword_3_1_1());
				}
			)
			    |
			(
				(
					(
						{
							newCompositeNode(grammarAccess.getComponentDefinitionAccess().getPropertyAssignmentsPropertyAssignmentParserRuleCall_3_2_0_0());
						}
						lv_propertyAssignments_7_0=rulePropertyAssignment
						{
							if ($current==null) {
								$current = createModelElementForParent(grammarAccess.getComponentDefinitionRule());
							}
							add(
								$current,
								"propertyAssignments",
								lv_propertyAssignments_7_0,
								"com.minres.rdl.RDL.PropertyAssignment");
							afterParserOrEnumRuleCall();
						}
					)
				)
				otherlv_8=';'
				{
					newLeafNode(otherlv_8, grammarAccess.getComponentDefinitionAccess().getSemicolonKeyword_3_2_1());
				}
			)
			    |
			(
				(
					(
						{
							newCompositeNode(grammarAccess.getComponentDefinitionAccess().getEnumDefinitionsEnumDefinitionParserRuleCall_3_3_0_0());
						}
						lv_enumDefinitions_9_0=ruleEnumDefinition
						{
							if ($current==null) {
								$current = createModelElementForParent(grammarAccess.getComponentDefinitionRule());
							}
							add(
								$current,
								"enumDefinitions",
								lv_enumDefinitions_9_0,
								"com.minres.rdl.RDL.EnumDefinition");
							afterParserOrEnumRuleCall();
						}
					)
				)
				otherlv_10=';'
				{
					newLeafNode(otherlv_10, grammarAccess.getComponentDefinitionAccess().getSemicolonKeyword_3_3_1());
				}
			)
		)*
		otherlv_11='}'
		{
			newLeafNode(otherlv_11, grammarAccess.getComponentDefinitionAccess().getRightCurlyBracketKeyword_4());
		}
	)
;

// Entry rule entryRuleInstantiation
entryRuleInstantiation returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getInstantiationRule()); }
	iv_ruleInstantiation=ruleInstantiation
	{ $current=$iv_ruleInstantiation.current; }
	EOF;

// Rule Instantiation
ruleInstantiation returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		(
			(
				(
					(
						{
							newCompositeNode(grammarAccess.getInstantiationAccess().getInstanceTypeEnumInstanceTypeParserRuleCall_0_0_0_0());
						}
						lv_instanceType_0_0=ruleEnumInstanceType
						{
							if ($current==null) {
								$current = createModelElementForParent(grammarAccess.getInstantiationRule());
							}
							set(
								$current,
								"instanceType",
								lv_instanceType_0_0,
								"com.minres.rdl.RDL.EnumInstanceType");
							afterParserOrEnumRuleCall();
						}
					)
				)?
				(
					otherlv_1='alias'
					{
						newLeafNode(otherlv_1, grammarAccess.getInstantiationAccess().getAliasKeyword_0_0_1_0());
					}
					(
						(
							lv_alias_2_0=RULE_ID
							{
								newLeafNode(lv_alias_2_0, grammarAccess.getInstantiationAccess().getAliasIDTerminalRuleCall_0_0_1_1_0());
							}
							{
								if ($current==null) {
									$current = createModelElement(grammarAccess.getInstantiationRule());
								}
								setWithLastConsumed(
									$current,
									"alias",
									lv_alias_2_0,
									"com.minres.rdl.RDL.ID");
							}
						)
					)
				)?
				(
					(
						{
							/* */
						}
						{
							if ($current==null) {
								$current = createModelElement(grammarAccess.getInstantiationRule());
							}
						}
						otherlv_3=RULE_ID
						{
							newLeafNode(otherlv_3, grammarAccess.getInstantiationAccess().getComponentRefComponentDefinitionCrossReference_0_0_2_0());
						}
					)
				)
			)
			    |
			(
				(
					(
						{
							newCompositeNode(grammarAccess.getInstantiationAccess().getComponentComponentDefinitionParserRuleCall_0_1_0_0());
						}
						lv_component_4_0=ruleComponentDefinition
						{
							if ($current==null) {
								$current = createModelElementForParent(grammarAccess.getInstantiationRule());
							}
							set(
								$current,
								"component",
								lv_component_4_0,
								"com.minres.rdl.RDL.ComponentDefinition");
							afterParserOrEnumRuleCall();
						}
					)
				)
				(
					(
						{
							newCompositeNode(grammarAccess.getInstantiationAccess().getInstanceTypeEnumInstanceTypeParserRuleCall_0_1_1_0());
						}
						lv_instanceType_5_0=ruleEnumInstanceType
						{
							if ($current==null) {
								$current = createModelElementForParent(grammarAccess.getInstantiationRule());
							}
							set(
								$current,
								"instanceType",
								lv_instanceType_5_0,
								"com.minres.rdl.RDL.EnumInstanceType");
							afterParserOrEnumRuleCall();
						}
					)
				)?
			)
		)
		(
			(
				{
					newCompositeNode(grammarAccess.getInstantiationAccess().getComponentInstancesComponentInstanceParserRuleCall_1_0());
				}
				lv_componentInstances_6_0=ruleComponentInstance
				{
					if ($current==null) {
						$current = createModelElementForParent(grammarAccess.getInstantiationRule());
					}
					add(
						$current,
						"componentInstances",
						lv_componentInstances_6_0,
						"com.minres.rdl.RDL.ComponentInstance");
					afterParserOrEnumRuleCall();
				}
			)
		)
		(
			otherlv_7=','
			{
				newLeafNode(otherlv_7, grammarAccess.getInstantiationAccess().getCommaKeyword_2_0());
			}
			(
				(
					{
						newCompositeNode(grammarAccess.getInstantiationAccess().getComponentInstancesComponentInstanceParserRuleCall_2_1_0());
					}
					lv_componentInstances_8_0=ruleComponentInstance
					{
						if ($current==null) {
							$current = createModelElementForParent(grammarAccess.getInstantiationRule());
						}
						add(
							$current,
							"componentInstances",
							lv_componentInstances_8_0,
							"com.minres.rdl.RDL.ComponentInstance");
						afterParserOrEnumRuleCall();
					}
				)
			)
		)*
	)
;

// Entry rule entryRuleComponentInstance
entryRuleComponentInstance returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getComponentInstanceRule()); }
	iv_ruleComponentInstance=ruleComponentInstance
	{ $current=$iv_ruleComponentInstance.current; }
	EOF;

// Rule ComponentInstance
ruleComponentInstance returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		(
			(
				lv_name_0_0=RULE_ID
				{
					newLeafNode(lv_name_0_0, grammarAccess.getComponentInstanceAccess().getNameIDTerminalRuleCall_0_0());
				}
				{
					if ($current==null) {
						$current = createModelElement(grammarAccess.getComponentInstanceRule());
					}
					setWithLastConsumed(
						$current,
						"name",
						lv_name_0_0,
						"com.minres.rdl.RDL.ID");
				}
			)
		)
		(
			(
				{
					newCompositeNode(grammarAccess.getComponentInstanceAccess().getRangeRangeParserRuleCall_1_0());
				}
				lv_range_1_0=ruleRange
				{
					if ($current==null) {
						$current = createModelElementForParent(grammarAccess.getComponentInstanceRule());
					}
					set(
						$current,
						"range",
						lv_range_1_0,
						"com.minres.rdl.RDL.Range");
					afterParserOrEnumRuleCall();
				}
			)
		)?
		(
			otherlv_2='='
			{
				newLeafNode(otherlv_2, grammarAccess.getComponentInstanceAccess().getEqualsSignKeyword_2_0());
			}
			(
				(
					lv_reset_3_0=RULE_NUM
					{
						newLeafNode(lv_reset_3_0, grammarAccess.getComponentInstanceAccess().getResetNUMTerminalRuleCall_2_1_0());
					}
					{
						if ($current==null) {
							$current = createModelElement(grammarAccess.getComponentInstanceRule());
						}
						setWithLastConsumed(
							$current,
							"reset",
							lv_reset_3_0,
							"com.minres.rdl.RDL.NUM");
					}
				)
			)
		)?
		(
			otherlv_4='@'
			{
				newLeafNode(otherlv_4, grammarAccess.getComponentInstanceAccess().getCommercialAtKeyword_3_0());
			}
			(
				(
					lv_address_5_0=RULE_NUM
					{
						newLeafNode(lv_address_5_0, grammarAccess.getComponentInstanceAccess().getAddressNUMTerminalRuleCall_3_1_0());
					}
					{
						if ($current==null) {
							$current = createModelElement(grammarAccess.getComponentInstanceRule());
						}
						setWithLastConsumed(
							$current,
							"address",
							lv_address_5_0,
							"com.minres.rdl.RDL.NUM");
					}
				)
			)
		)?
		(
			otherlv_6='+='
			{
				newLeafNode(otherlv_6, grammarAccess.getComponentInstanceAccess().getPlusSignEqualsSignKeyword_4_0());
			}
			(
				(
					lv_addrInc_7_0=RULE_NUM
					{
						newLeafNode(lv_addrInc_7_0, grammarAccess.getComponentInstanceAccess().getAddrIncNUMTerminalRuleCall_4_1_0());
					}
					{
						if ($current==null) {
							$current = createModelElement(grammarAccess.getComponentInstanceRule());
						}
						setWithLastConsumed(
							$current,
							"addrInc",
							lv_addrInc_7_0,
							"com.minres.rdl.RDL.NUM");
					}
				)
			)
		)?
		(
			otherlv_8='%='
			{
				newLeafNode(otherlv_8, grammarAccess.getComponentInstanceAccess().getPercentSignEqualsSignKeyword_5_0());
			}
			(
				(
					lv_addrMod_9_0=RULE_NUM
					{
						newLeafNode(lv_addrMod_9_0, grammarAccess.getComponentInstanceAccess().getAddrModNUMTerminalRuleCall_5_1_0());
					}
					{
						if ($current==null) {
							$current = createModelElement(grammarAccess.getComponentInstanceRule());
						}
						setWithLastConsumed(
							$current,
							"addrMod",
							lv_addrMod_9_0,
							"com.minres.rdl.RDL.NUM");
					}
				)
			)
		)?
	)
;

// Entry rule entryRuleRange
entryRuleRange returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getRangeRule()); }
	iv_ruleRange=ruleRange
	{ $current=$iv_ruleRange.current; }
	EOF;

// Rule Range
ruleRange returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		otherlv_0='['
		{
			newLeafNode(otherlv_0, grammarAccess.getRangeAccess().getLeftSquareBracketKeyword_0());
		}
		(
			(
				(
					(
						lv_left_1_0=RULE_NUM
						{
							newLeafNode(lv_left_1_0, grammarAccess.getRangeAccess().getLeftNUMTerminalRuleCall_1_0_0_0());
						}
						{
							if ($current==null) {
								$current = createModelElement(grammarAccess.getRangeRule());
							}
							setWithLastConsumed(
								$current,
								"left",
								lv_left_1_0,
								"com.minres.rdl.RDL.NUM");
						}
					)
				)
				otherlv_2=':'
				{
					newLeafNode(otherlv_2, grammarAccess.getRangeAccess().getColonKeyword_1_0_1());
				}
				(
					(
						lv_right_3_0=RULE_NUM
						{
							newLeafNode(lv_right_3_0, grammarAccess.getRangeAccess().getRightNUMTerminalRuleCall_1_0_2_0());
						}
						{
							if ($current==null) {
								$current = createModelElement(grammarAccess.getRangeRule());
							}
							setWithLastConsumed(
								$current,
								"right",
								lv_right_3_0,
								"com.minres.rdl.RDL.NUM");
						}
					)
				)
			)
			    |
			(
				(
					lv_size_4_0=RULE_NUM
					{
						newLeafNode(lv_size_4_0, grammarAccess.getRangeAccess().getSizeNUMTerminalRuleCall_1_1_0());
					}
					{
						if ($current==null) {
							$current = createModelElement(grammarAccess.getRangeRule());
						}
						setWithLastConsumed(
							$current,
							"size",
							lv_size_4_0,
							"com.minres.rdl.RDL.NUM");
					}
				)
			)
		)
		otherlv_5=']'
		{
			newLeafNode(otherlv_5, grammarAccess.getRangeAccess().getRightSquareBracketKeyword_2());
		}
	)
;

// Entry rule entryRulePropertyAssignment
entryRulePropertyAssignment returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getPropertyAssignmentRule()); }
	iv_rulePropertyAssignment=rulePropertyAssignment
	{ $current=$iv_rulePropertyAssignment.current; }
	EOF;

// Rule PropertyAssignment
rulePropertyAssignment returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		{
			/* */
		}
		{
			newCompositeNode(grammarAccess.getPropertyAssignmentAccess().getDefaultProperyAssignmentParserRuleCall_0());
		}
		this_DefaultProperyAssignment_0=ruleDefaultProperyAssignment
		{
			$current = $this_DefaultProperyAssignment_0.current;
			afterParserOrEnumRuleCall();
		}
		    |
		{
			/* */
		}
		{
			newCompositeNode(grammarAccess.getPropertyAssignmentAccess().getExplicitPropertyAssignmentParserRuleCall_1());
		}
		this_ExplicitPropertyAssignment_1=ruleExplicitPropertyAssignment
		{
			$current = $this_ExplicitPropertyAssignment_1.current;
			afterParserOrEnumRuleCall();
		}
		    |
		{
			/* */
		}
		{
			newCompositeNode(grammarAccess.getPropertyAssignmentAccess().getPostPropertyAssignmentParserRuleCall_2());
		}
		this_PostPropertyAssignment_2=rulePostPropertyAssignment
		{
			$current = $this_PostPropertyAssignment_2.current;
			afterParserOrEnumRuleCall();
		}
	)
;

// Entry rule entryRuleDefaultProperyAssignment
entryRuleDefaultProperyAssignment returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getDefaultProperyAssignmentRule()); }
	iv_ruleDefaultProperyAssignment=ruleDefaultProperyAssignment
	{ $current=$iv_ruleDefaultProperyAssignment.current; }
	EOF;

// Rule DefaultProperyAssignment
ruleDefaultProperyAssignment returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		otherlv_0='default'
		{
			newLeafNode(otherlv_0, grammarAccess.getDefaultProperyAssignmentAccess().getDefaultKeyword_0());
		}
		{
			/* */
		}
		{
			newCompositeNode(grammarAccess.getDefaultProperyAssignmentAccess().getExplicitPropertyAssignmentParserRuleCall_1());
		}
		this_ExplicitPropertyAssignment_1=ruleExplicitPropertyAssignment
		{
			$current = $this_ExplicitPropertyAssignment_1.current;
			afterParserOrEnumRuleCall();
		}
	)
;

// Entry rule entryRuleExplicitPropertyAssignment
entryRuleExplicitPropertyAssignment returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getExplicitPropertyAssignmentRule()); }
	iv_ruleExplicitPropertyAssignment=ruleExplicitPropertyAssignment
	{ $current=$iv_ruleExplicitPropertyAssignment.current; }
	EOF;

// Rule ExplicitPropertyAssignment
ruleExplicitPropertyAssignment returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		(
			(
				(
					{
						newCompositeNode(grammarAccess.getExplicitPropertyAssignmentAccess().getModifierPropertyModifierEnumRuleCall_0_0_0());
					}
					lv_modifier_0_0=rulePropertyModifier
					{
						if ($current==null) {
							$current = createModelElementForParent(grammarAccess.getExplicitPropertyAssignmentRule());
						}
						set(
							$current,
							"modifier",
							lv_modifier_0_0,
							"com.minres.rdl.RDL.PropertyModifier");
						afterParserOrEnumRuleCall();
					}
				)
			)
			(
				(
					{
						newCompositeNode(grammarAccess.getExplicitPropertyAssignmentAccess().getNamePropertyEnumRuleCall_0_1_0());
					}
					lv_name_1_0=ruleProperty
					{
						if ($current==null) {
							$current = createModelElementForParent(grammarAccess.getExplicitPropertyAssignmentRule());
						}
						set(
							$current,
							"name",
							lv_name_1_0,
							"com.minres.rdl.RDL.Property");
						afterParserOrEnumRuleCall();
					}
				)
			)
		)
		    |
		(
			(
				(
					{
						newCompositeNode(grammarAccess.getExplicitPropertyAssignmentAccess().getNamePropertyEnumRuleCall_1_0_0());
					}
					lv_name_2_0=ruleProperty
					{
						if ($current==null) {
							$current = createModelElementForParent(grammarAccess.getExplicitPropertyAssignmentRule());
						}
						set(
							$current,
							"name",
							lv_name_2_0,
							"com.minres.rdl.RDL.Property");
						afterParserOrEnumRuleCall();
					}
				)
			)
			(
				otherlv_3='='
				{
					newLeafNode(otherlv_3, grammarAccess.getExplicitPropertyAssignmentAccess().getEqualsSignKeyword_1_1_0());
				}
				(
					(
						{
							newCompositeNode(grammarAccess.getExplicitPropertyAssignmentAccess().getRhsPropertyAssignmentRhsParserRuleCall_1_1_1_0());
						}
						lv_rhs_4_0=rulePropertyAssignmentRhs
						{
							if ($current==null) {
								$current = createModelElementForParent(grammarAccess.getExplicitPropertyAssignmentRule());
							}
							set(
								$current,
								"rhs",
								lv_rhs_4_0,
								"com.minres.rdl.RDL.PropertyAssignmentRhs");
							afterParserOrEnumRuleCall();
						}
					)
				)
			)?
		)
	)
;

// Entry rule entryRulePostPropertyAssignment
entryRulePostPropertyAssignment returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getPostPropertyAssignmentRule()); }
	iv_rulePostPropertyAssignment=rulePostPropertyAssignment
	{ $current=$iv_rulePostPropertyAssignment.current; }
	EOF;

// Rule PostPropertyAssignment
rulePostPropertyAssignment returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		(
			(
				(
					(
						{
							newCompositeNode(grammarAccess.getPostPropertyAssignmentAccess().getInstanceHierInstanceRefParserRuleCall_0_0_0_0());
						}
						lv_instance_0_0=ruleHierInstanceRef
						{
							if ($current==null) {
								$current = createModelElementForParent(grammarAccess.getPostPropertyAssignmentRule());
							}
							set(
								$current,
								"instance",
								lv_instance_0_0,
								"com.minres.rdl.RDL.HierInstanceRef");
							afterParserOrEnumRuleCall();
						}
					)
				)
				otherlv_1='->'
				{
					newLeafNode(otherlv_1, grammarAccess.getPostPropertyAssignmentAccess().getHyphenMinusGreaterThanSignKeyword_0_0_1());
				}
				(
					(
						(
							{
								newCompositeNode(grammarAccess.getPostPropertyAssignmentAccess().getPropertyEnumPropertyEnumRuleCall_0_0_2_0_0());
							}
							lv_propertyEnum_2_0=ruleProperty
							{
								if ($current==null) {
									$current = createModelElementForParent(grammarAccess.getPostPropertyAssignmentRule());
								}
								set(
									$current,
									"propertyEnum",
									lv_propertyEnum_2_0,
									"com.minres.rdl.RDL.Property");
								afterParserOrEnumRuleCall();
							}
						)
					)
					    |
					(
						(
							{
								/* */
							}
							{
								if ($current==null) {
									$current = createModelElement(grammarAccess.getPostPropertyAssignmentRule());
								}
							}
							otherlv_3=RULE_ID
							{
								newLeafNode(otherlv_3, grammarAccess.getPostPropertyAssignmentAccess().getPropertyPropertyDefinitionCrossReference_0_0_2_1_0());
							}
						)
					)
				)
			)
			    |
			(
				(
					{
						/* */
					}
					{
						if ($current==null) {
							$current = createModelElement(grammarAccess.getPostPropertyAssignmentRule());
						}
					}
					otherlv_4=RULE_ID
					{
						newLeafNode(otherlv_4, grammarAccess.getPostPropertyAssignmentAccess().getPropertyPropertyDefinitionCrossReference_0_1_0());
					}
				)
			)
		)
		(
			otherlv_5='='
			{
				newLeafNode(otherlv_5, grammarAccess.getPostPropertyAssignmentAccess().getEqualsSignKeyword_1_0());
			}
			(
				(
					{
						newCompositeNode(grammarAccess.getPostPropertyAssignmentAccess().getRhsPropertyAssignmentRhsParserRuleCall_1_1_0());
					}
					lv_rhs_6_0=rulePropertyAssignmentRhs
					{
						if ($current==null) {
							$current = createModelElementForParent(grammarAccess.getPostPropertyAssignmentRule());
						}
						set(
							$current,
							"rhs",
							lv_rhs_6_0,
							"com.minres.rdl.RDL.PropertyAssignmentRhs");
						afterParserOrEnumRuleCall();
					}
				)
			)
		)?
	)
;

// Entry rule entryRuleInstancePropertyRef
entryRuleInstancePropertyRef returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getInstancePropertyRefRule()); }
	iv_ruleInstancePropertyRef=ruleInstancePropertyRef
	{ $current=$iv_ruleInstancePropertyRef.current; }
	EOF;

// Rule InstancePropertyRef
ruleInstancePropertyRef returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		(
			(
				{
					newCompositeNode(grammarAccess.getInstancePropertyRefAccess().getInstanceInstanceRefParserRuleCall_0_0());
				}
				lv_instance_0_0=ruleInstanceRef
				{
					if ($current==null) {
						$current = createModelElementForParent(grammarAccess.getInstancePropertyRefRule());
					}
					set(
						$current,
						"instance",
						lv_instance_0_0,
						"com.minres.rdl.RDL.InstanceRef");
					afterParserOrEnumRuleCall();
				}
			)
		)
		(
			otherlv_1='->'
			{
				newLeafNode(otherlv_1, grammarAccess.getInstancePropertyRefAccess().getHyphenMinusGreaterThanSignKeyword_1_0());
			}
			(
				(
					(
						{
							newCompositeNode(grammarAccess.getInstancePropertyRefAccess().getPropertyEnumPropertyEnumRuleCall_1_1_0_0());
						}
						lv_propertyEnum_2_0=ruleProperty
						{
							if ($current==null) {
								$current = createModelElementForParent(grammarAccess.getInstancePropertyRefRule());
							}
							set(
								$current,
								"propertyEnum",
								lv_propertyEnum_2_0,
								"com.minres.rdl.RDL.Property");
							afterParserOrEnumRuleCall();
						}
					)
				)
				    |
				(
					(
						{
							/* */
						}
						{
							if ($current==null) {
								$current = createModelElement(grammarAccess.getInstancePropertyRefRule());
							}
						}
						otherlv_3=RULE_ID
						{
							newLeafNode(otherlv_3, grammarAccess.getInstancePropertyRefAccess().getPropertyPropertyDefinitionCrossReference_1_1_1_0());
						}
					)
				)
			)
		)?
	)
;

// Entry rule entryRuleInstanceRef
entryRuleInstanceRef returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getInstanceRefRule()); }
	iv_ruleInstanceRef=ruleInstanceRef
	{ $current=$iv_ruleInstanceRef.current; }
	EOF;

// Rule InstanceRef
ruleInstanceRef returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		(
			(
				{
					/* */
				}
				{
					if ($current==null) {
						$current = createModelElement(grammarAccess.getInstanceRefRule());
					}
				}
				otherlv_0=RULE_ID
				{
					newLeafNode(otherlv_0, grammarAccess.getInstanceRefAccess().getInstanceEntityCrossReference_0_0());
				}
			)
		)
		(
			otherlv_1='.'
			{
				newLeafNode(otherlv_1, grammarAccess.getInstanceRefAccess().getFullStopKeyword_1_0());
			}
			(
				(
					{
						newCompositeNode(grammarAccess.getInstanceRefAccess().getTailHierInstanceRefParserRuleCall_1_1_0());
					}
					lv_tail_2_0=ruleHierInstanceRef
					{
						if ($current==null) {
							$current = createModelElementForParent(grammarAccess.getInstanceRefRule());
						}
						set(
							$current,
							"tail",
							lv_tail_2_0,
							"com.minres.rdl.RDL.HierInstanceRef");
						afterParserOrEnumRuleCall();
					}
				)
			)
		)?
	)
;

// Entry rule entryRuleHierInstanceRef
entryRuleHierInstanceRef returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getHierInstanceRefRule()); }
	iv_ruleHierInstanceRef=ruleHierInstanceRef
	{ $current=$iv_ruleHierInstanceRef.current; }
	EOF;

// Rule HierInstanceRef
ruleHierInstanceRef returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		(
			(
				{
					/* */
				}
				{
					if ($current==null) {
						$current = createModelElement(grammarAccess.getHierInstanceRefRule());
					}
				}
				otherlv_0=RULE_ID
				{
					newLeafNode(otherlv_0, grammarAccess.getHierInstanceRefAccess().getInstanceComponentInstanceCrossReference_0_0());
				}
			)
		)
		(
			otherlv_1='.'
			{
				newLeafNode(otherlv_1, grammarAccess.getHierInstanceRefAccess().getFullStopKeyword_1_0());
			}
			(
				(
					{
						newCompositeNode(grammarAccess.getHierInstanceRefAccess().getTailHierInstanceRefParserRuleCall_1_1_0());
					}
					lv_tail_2_0=ruleHierInstanceRef
					{
						if ($current==null) {
							$current = createModelElementForParent(grammarAccess.getHierInstanceRefRule());
						}
						set(
							$current,
							"tail",
							lv_tail_2_0,
							"com.minres.rdl.RDL.HierInstanceRef");
						afterParserOrEnumRuleCall();
					}
				)
			)
		)?
	)
;

// Entry rule entryRulePropertyAssignmentRhs
entryRulePropertyAssignmentRhs returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getPropertyAssignmentRhsRule()); }
	iv_rulePropertyAssignmentRhs=rulePropertyAssignmentRhs
	{ $current=$iv_rulePropertyAssignmentRhs.current; }
	EOF;

// Rule PropertyAssignmentRhs
rulePropertyAssignmentRhs returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		(
			(
				{
					newCompositeNode(grammarAccess.getPropertyAssignmentRhsAccess().getValuePropertyRvalueConstantParserRuleCall_0_0());
				}
				lv_value_0_0=rulePropertyRvalueConstant
				{
					if ($current==null) {
						$current = createModelElementForParent(grammarAccess.getPropertyAssignmentRhsRule());
					}
					set(
						$current,
						"value",
						lv_value_0_0,
						"com.minres.rdl.RDL.PropertyRvalueConstant");
					afterParserOrEnumRuleCall();
				}
			)
		)
		    |
		(
			(
				{
					newCompositeNode(grammarAccess.getPropertyAssignmentRhsAccess().getInstPropRefInstancePropertyRefParserRuleCall_1_0());
				}
				lv_instPropRef_1_0=ruleInstancePropertyRef
				{
					if ($current==null) {
						$current = createModelElementForParent(grammarAccess.getPropertyAssignmentRhsRule());
					}
					set(
						$current,
						"instPropRef",
						lv_instPropRef_1_0,
						"com.minres.rdl.RDL.InstancePropertyRef");
					afterParserOrEnumRuleCall();
				}
			)
		)
		    |
		(
			(
				(
					{
						/* */
					}
					{
						if ($current==null) {
							$current = createModelElement(grammarAccess.getPropertyAssignmentRhsRule());
						}
					}
					otherlv_2=RULE_ID
					{
						newLeafNode(otherlv_2, grammarAccess.getPropertyAssignmentRhsAccess().getEnumRefEnumDefinitionCrossReference_2_0_0());
					}
				)
			)
			otherlv_3='enum'
			{
				newLeafNode(otherlv_3, grammarAccess.getPropertyAssignmentRhsAccess().getEnumKeyword_2_1());
			}
			(
				(
					{
						newCompositeNode(grammarAccess.getPropertyAssignmentRhsAccess().getEnumsEnumBodyParserRuleCall_2_2_0());
					}
					lv_enums_4_0=ruleEnumBody
					{
						if ($current==null) {
							$current = createModelElementForParent(grammarAccess.getPropertyAssignmentRhsRule());
						}
						set(
							$current,
							"enums",
							lv_enums_4_0,
							"com.minres.rdl.RDL.EnumBody");
						afterParserOrEnumRuleCall();
					}
				)
			)
		)
		    |
		(
			(
				{
					newCompositeNode(grammarAccess.getPropertyAssignmentRhsAccess().getElementsConcatParserRuleCall_3_0());
				}
				lv_elements_5_0=ruleConcat
				{
					if ($current==null) {
						$current = createModelElementForParent(grammarAccess.getPropertyAssignmentRhsRule());
					}
					set(
						$current,
						"elements",
						lv_elements_5_0,
						"com.minres.rdl.RDL.Concat");
					afterParserOrEnumRuleCall();
				}
			)
		)
	)
;

// Entry rule entryRuleConcat
entryRuleConcat returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getConcatRule()); }
	iv_ruleConcat=ruleConcat
	{ $current=$iv_ruleConcat.current; }
	EOF;

// Rule Concat
ruleConcat returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		otherlv_0='{'
		{
			newLeafNode(otherlv_0, grammarAccess.getConcatAccess().getLeftCurlyBracketKeyword_0());
		}
		(
			(
				{
					newCompositeNode(grammarAccess.getConcatAccess().getElementsConcatElemParserRuleCall_1_0());
				}
				lv_elements_1_0=ruleConcatElem
				{
					if ($current==null) {
						$current = createModelElementForParent(grammarAccess.getConcatRule());
					}
					add(
						$current,
						"elements",
						lv_elements_1_0,
						"com.minres.rdl.RDL.ConcatElem");
					afterParserOrEnumRuleCall();
				}
			)
		)
		(
			otherlv_2=','
			{
				newLeafNode(otherlv_2, grammarAccess.getConcatAccess().getCommaKeyword_2_0());
			}
			(
				(
					{
						newCompositeNode(grammarAccess.getConcatAccess().getElementsConcatElemParserRuleCall_2_1_0());
					}
					lv_elements_3_0=ruleConcatElem
					{
						if ($current==null) {
							$current = createModelElementForParent(grammarAccess.getConcatRule());
						}
						add(
							$current,
							"elements",
							lv_elements_3_0,
							"com.minres.rdl.RDL.ConcatElem");
						afterParserOrEnumRuleCall();
					}
				)
			)
		)*
		otherlv_4='}'
		{
			newLeafNode(otherlv_4, grammarAccess.getConcatAccess().getRightCurlyBracketKeyword_3());
		}
	)
;

// Entry rule entryRuleConcatElem
entryRuleConcatElem returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getConcatElemRule()); }
	iv_ruleConcatElem=ruleConcatElem
	{ $current=$iv_ruleConcatElem.current; }
	EOF;

// Rule ConcatElem
ruleConcatElem returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		(
			(
				{
					newCompositeNode(grammarAccess.getConcatElemAccess().getInstPropRefInstancePropertyRefParserRuleCall_0_0());
				}
				lv_instPropRef_0_0=ruleInstancePropertyRef
				{
					if ($current==null) {
						$current = createModelElementForParent(grammarAccess.getConcatElemRule());
					}
					set(
						$current,
						"instPropRef",
						lv_instPropRef_0_0,
						"com.minres.rdl.RDL.InstancePropertyRef");
					afterParserOrEnumRuleCall();
				}
			)
		)
		    |
		(
			(
				lv_value_1_0=RULE_NUM
				{
					newLeafNode(lv_value_1_0, grammarAccess.getConcatElemAccess().getValueNUMTerminalRuleCall_1_0());
				}
				{
					if ($current==null) {
						$current = createModelElement(grammarAccess.getConcatElemRule());
					}
					setWithLastConsumed(
						$current,
						"value",
						lv_value_1_0,
						"com.minres.rdl.RDL.NUM");
				}
			)
		)
	)
;

// Entry rule entryRulePropertyRvalueConstant
entryRulePropertyRvalueConstant returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getPropertyRvalueConstantRule()); }
	iv_rulePropertyRvalueConstant=rulePropertyRvalueConstant
	{ $current=$iv_rulePropertyRvalueConstant.current; }
	EOF;

// Rule PropertyRvalueConstant
rulePropertyRvalueConstant returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		(
			(
				{
					newCompositeNode(grammarAccess.getPropertyRvalueConstantAccess().getValRValueConstantEnumRuleCall_0_0());
				}
				lv_val_0_0=ruleRValueConstant
				{
					if ($current==null) {
						$current = createModelElementForParent(grammarAccess.getPropertyRvalueConstantRule());
					}
					set(
						$current,
						"val",
						lv_val_0_0,
						"com.minres.rdl.RDL.RValueConstant");
					afterParserOrEnumRuleCall();
				}
			)
		)
		    |
		(
			(
				lv_num_1_0=RULE_NUM
				{
					newLeafNode(lv_num_1_0, grammarAccess.getPropertyRvalueConstantAccess().getNumNUMTerminalRuleCall_1_0());
				}
				{
					if ($current==null) {
						$current = createModelElement(grammarAccess.getPropertyRvalueConstantRule());
					}
					setWithLastConsumed(
						$current,
						"num",
						lv_num_1_0,
						"com.minres.rdl.RDL.NUM");
				}
			)
		)
		    |
		(
			(
				lv_str_2_0=RULE_STR
				{
					newLeafNode(lv_str_2_0, grammarAccess.getPropertyRvalueConstantAccess().getStrSTRTerminalRuleCall_2_0());
				}
				{
					if ($current==null) {
						$current = createModelElement(grammarAccess.getPropertyRvalueConstantRule());
					}
					setWithLastConsumed(
						$current,
						"str",
						lv_str_2_0,
						"com.minres.rdl.RDL.STR");
				}
			)
		)
	)
;

// Entry rule entryRuleEnumDefinition
entryRuleEnumDefinition returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getEnumDefinitionRule()); }
	iv_ruleEnumDefinition=ruleEnumDefinition
	{ $current=$iv_ruleEnumDefinition.current; }
	EOF;

// Rule EnumDefinition
ruleEnumDefinition returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		otherlv_0='enum'
		{
			newLeafNode(otherlv_0, grammarAccess.getEnumDefinitionAccess().getEnumKeyword_0());
		}
		(
			(
				lv_name_1_0=RULE_ID
				{
					newLeafNode(lv_name_1_0, grammarAccess.getEnumDefinitionAccess().getNameIDTerminalRuleCall_1_0());
				}
				{
					if ($current==null) {
						$current = createModelElement(grammarAccess.getEnumDefinitionRule());
					}
					setWithLastConsumed(
						$current,
						"name",
						lv_name_1_0,
						"com.minres.rdl.RDL.ID");
				}
			)
		)
		(
			(
				{
					newCompositeNode(grammarAccess.getEnumDefinitionAccess().getBodyEnumBodyParserRuleCall_2_0());
				}
				lv_body_2_0=ruleEnumBody
				{
					if ($current==null) {
						$current = createModelElementForParent(grammarAccess.getEnumDefinitionRule());
					}
					set(
						$current,
						"body",
						lv_body_2_0,
						"com.minres.rdl.RDL.EnumBody");
					afterParserOrEnumRuleCall();
				}
			)
		)
	)
;

// Entry rule entryRuleEnumBody
entryRuleEnumBody returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getEnumBodyRule()); }
	iv_ruleEnumBody=ruleEnumBody
	{ $current=$iv_ruleEnumBody.current; }
	EOF;

// Rule EnumBody
ruleEnumBody returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		otherlv_0='{'
		{
			newLeafNode(otherlv_0, grammarAccess.getEnumBodyAccess().getLeftCurlyBracketKeyword_0());
		}
		(
			{
				/* */
			}
			{
				$current = forceCreateModelElement(
					grammarAccess.getEnumBodyAccess().getEnumBodyAction_1(),
					$current);
			}
		)
		(
			(
				{
					newCompositeNode(grammarAccess.getEnumBodyAccess().getEntriesEnumEntryParserRuleCall_2_0());
				}
				lv_entries_2_0=ruleEnumEntry
				{
					if ($current==null) {
						$current = createModelElementForParent(grammarAccess.getEnumBodyRule());
					}
					add(
						$current,
						"entries",
						lv_entries_2_0,
						"com.minres.rdl.RDL.EnumEntry");
					afterParserOrEnumRuleCall();
				}
			)
		)*
		otherlv_3='}'
		{
			newLeafNode(otherlv_3, grammarAccess.getEnumBodyAccess().getRightCurlyBracketKeyword_3());
		}
	)
;

// Entry rule entryRuleEnumEntry
entryRuleEnumEntry returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getEnumEntryRule()); }
	iv_ruleEnumEntry=ruleEnumEntry
	{ $current=$iv_ruleEnumEntry.current; }
	EOF;

// Rule EnumEntry
ruleEnumEntry returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		(
			(
				lv_name_0_0=RULE_ID
				{
					newLeafNode(lv_name_0_0, grammarAccess.getEnumEntryAccess().getNameIDTerminalRuleCall_0_0());
				}
				{
					if ($current==null) {
						$current = createModelElement(grammarAccess.getEnumEntryRule());
					}
					setWithLastConsumed(
						$current,
						"name",
						lv_name_0_0,
						"com.minres.rdl.RDL.ID");
				}
			)
		)
		otherlv_1='='
		{
			newLeafNode(otherlv_1, grammarAccess.getEnumEntryAccess().getEqualsSignKeyword_1());
		}
		(
			(
				lv_index_2_0=RULE_NUM
				{
					newLeafNode(lv_index_2_0, grammarAccess.getEnumEntryAccess().getIndexNUMTerminalRuleCall_2_0());
				}
				{
					if ($current==null) {
						$current = createModelElement(grammarAccess.getEnumEntryRule());
					}
					setWithLastConsumed(
						$current,
						"index",
						lv_index_2_0,
						"com.minres.rdl.RDL.NUM");
				}
			)
		)
		(
			otherlv_3='{'
			{
				newLeafNode(otherlv_3, grammarAccess.getEnumEntryAccess().getLeftCurlyBracketKeyword_3_0());
			}
			(
				(
					{
						newCompositeNode(grammarAccess.getEnumEntryAccess().getPropertiesEnumPropertyParserRuleCall_3_1_0());
					}
					lv_properties_4_0=ruleEnumProperty
					{
						if ($current==null) {
							$current = createModelElementForParent(grammarAccess.getEnumEntryRule());
						}
						add(
							$current,
							"properties",
							lv_properties_4_0,
							"com.minres.rdl.RDL.EnumProperty");
						afterParserOrEnumRuleCall();
					}
				)
			)*
			otherlv_5='}'
			{
				newLeafNode(otherlv_5, grammarAccess.getEnumEntryAccess().getRightCurlyBracketKeyword_3_2());
			}
		)?
		otherlv_6=';'
		{
			newLeafNode(otherlv_6, grammarAccess.getEnumEntryAccess().getSemicolonKeyword_4());
		}
	)
;

// Entry rule entryRuleEnumProperty
entryRuleEnumProperty returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getEnumPropertyRule()); }
	iv_ruleEnumProperty=ruleEnumProperty
	{ $current=$iv_ruleEnumProperty.current; }
	EOF;

// Rule EnumProperty
ruleEnumProperty returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		(
			(
				(
					(
						lv_name_0_0='name'
						{
							newLeafNode(lv_name_0_0, grammarAccess.getEnumPropertyAccess().getNameNameKeyword_0_0_0_0());
						}
						{
							if ($current==null) {
								$current = createModelElement(grammarAccess.getEnumPropertyRule());
							}
							setWithLastConsumed($current, "name", lv_name_0_0, "name");
						}
					)
				)
				otherlv_1='='
				{
					newLeafNode(otherlv_1, grammarAccess.getEnumPropertyAccess().getEqualsSignKeyword_0_0_1());
				}
				(
					(
						lv_value_2_0=RULE_STR
						{
							newLeafNode(lv_value_2_0, grammarAccess.getEnumPropertyAccess().getValueSTRTerminalRuleCall_0_0_2_0());
						}
						{
							if ($current==null) {
								$current = createModelElement(grammarAccess.getEnumPropertyRule());
							}
							setWithLastConsumed(
								$current,
								"value",
								lv_value_2_0,
								"com.minres.rdl.RDL.STR");
						}
					)
				)
			)
			    |
			(
				(
					(
						lv_name_3_0='desc'
						{
							newLeafNode(lv_name_3_0, grammarAccess.getEnumPropertyAccess().getNameDescKeyword_0_1_0_0());
						}
						{
							if ($current==null) {
								$current = createModelElement(grammarAccess.getEnumPropertyRule());
							}
							setWithLastConsumed($current, "name", lv_name_3_0, "desc");
						}
					)
				)
				otherlv_4='='
				{
					newLeafNode(otherlv_4, grammarAccess.getEnumPropertyAccess().getEqualsSignKeyword_0_1_1());
				}
				(
					(
						lv_value_5_0=RULE_STR
						{
							newLeafNode(lv_value_5_0, grammarAccess.getEnumPropertyAccess().getValueSTRTerminalRuleCall_0_1_2_0());
						}
						{
							if ($current==null) {
								$current = createModelElement(grammarAccess.getEnumPropertyRule());
							}
							setWithLastConsumed(
								$current,
								"value",
								lv_value_5_0,
								"com.minres.rdl.RDL.STR");
						}
					)
				)
			)
		)
		otherlv_6=';'
		{
			newLeafNode(otherlv_6, grammarAccess.getEnumPropertyAccess().getSemicolonKeyword_1());
		}
	)
;

// Entry rule entryRuleEnumInstanceType
entryRuleEnumInstanceType returns [EObject current=null]:
	{ newCompositeNode(grammarAccess.getEnumInstanceTypeRule()); }
	iv_ruleEnumInstanceType=ruleEnumInstanceType
	{ $current=$iv_ruleEnumInstanceType.current; }
	EOF;

// Rule EnumInstanceType
ruleEnumInstanceType returns [EObject current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		(
			(
				lv_EXTERNAL_0_0='external'
				{
					newLeafNode(lv_EXTERNAL_0_0, grammarAccess.getEnumInstanceTypeAccess().getEXTERNALExternalKeyword_0_0());
				}
				{
					if ($current==null) {
						$current = createModelElement(grammarAccess.getEnumInstanceTypeRule());
					}
					setWithLastConsumed($current, "EXTERNAL", lv_EXTERNAL_0_0, "external");
				}
			)
		)
		    |
		(
			(
				lv_INTERNAL_1_0='internal'
				{
					newLeafNode(lv_INTERNAL_1_0, grammarAccess.getEnumInstanceTypeAccess().getINTERNALInternalKeyword_1_0());
				}
				{
					if ($current==null) {
						$current = createModelElement(grammarAccess.getEnumInstanceTypeRule());
					}
					setWithLastConsumed($current, "INTERNAL", lv_INTERNAL_1_0, "internal");
				}
			)
		)
	)
;

// Rule PropertyTypeName
rulePropertyTypeName returns [Enumerator current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		(
			enumLiteral_0='string'
			{
				$current = grammarAccess.getPropertyTypeNameAccess().getSTRINGEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_0, grammarAccess.getPropertyTypeNameAccess().getSTRINGEnumLiteralDeclaration_0());
			}
		)
		    |
		(
			enumLiteral_1='number'
			{
				$current = grammarAccess.getPropertyTypeNameAccess().getNUMBEREnumLiteralDeclaration_1().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_1, grammarAccess.getPropertyTypeNameAccess().getNUMBEREnumLiteralDeclaration_1());
			}
		)
		    |
		(
			enumLiteral_2='boolean'
			{
				$current = grammarAccess.getPropertyTypeNameAccess().getBOOLEANEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_2, grammarAccess.getPropertyTypeNameAccess().getBOOLEANEnumLiteralDeclaration_2());
			}
		)
		    |
		(
			enumLiteral_3='addrmap'
			{
				$current = grammarAccess.getPropertyTypeNameAccess().getADDRMAPEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_3, grammarAccess.getPropertyTypeNameAccess().getADDRMAPEnumLiteralDeclaration_3());
			}
		)
		    |
		(
			enumLiteral_4='reg'
			{
				$current = grammarAccess.getPropertyTypeNameAccess().getREGEnumLiteralDeclaration_4().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_4, grammarAccess.getPropertyTypeNameAccess().getREGEnumLiteralDeclaration_4());
			}
		)
		    |
		(
			enumLiteral_5='regfile'
			{
				$current = grammarAccess.getPropertyTypeNameAccess().getREGFILEEnumLiteralDeclaration_5().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_5, grammarAccess.getPropertyTypeNameAccess().getREGFILEEnumLiteralDeclaration_5());
			}
		)
		    |
		(
			enumLiteral_6='field'
			{
				$current = grammarAccess.getPropertyTypeNameAccess().getFIELDEnumLiteralDeclaration_6().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_6, grammarAccess.getPropertyTypeNameAccess().getFIELDEnumLiteralDeclaration_6());
			}
		)
		    |
		(
			enumLiteral_7='ref'
			{
				$current = grammarAccess.getPropertyTypeNameAccess().getREFEnumLiteralDeclaration_7().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_7, grammarAccess.getPropertyTypeNameAccess().getREFEnumLiteralDeclaration_7());
			}
		)
	)
;

// Rule PropertyComponent
rulePropertyComponent returns [Enumerator current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		(
			enumLiteral_0='signal'
			{
				$current = grammarAccess.getPropertyComponentAccess().getSIGNALEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_0, grammarAccess.getPropertyComponentAccess().getSIGNALEnumLiteralDeclaration_0());
			}
		)
		    |
		(
			enumLiteral_1='addrmap'
			{
				$current = grammarAccess.getPropertyComponentAccess().getADDRMAPEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_1, grammarAccess.getPropertyComponentAccess().getADDRMAPEnumLiteralDeclaration_1());
			}
		)
		    |
		(
			enumLiteral_2='reg'
			{
				$current = grammarAccess.getPropertyComponentAccess().getREGEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_2, grammarAccess.getPropertyComponentAccess().getREGEnumLiteralDeclaration_2());
			}
		)
		    |
		(
			enumLiteral_3='regfile'
			{
				$current = grammarAccess.getPropertyComponentAccess().getREGFILEEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_3, grammarAccess.getPropertyComponentAccess().getREGFILEEnumLiteralDeclaration_3());
			}
		)
		    |
		(
			enumLiteral_4='field'
			{
				$current = grammarAccess.getPropertyComponentAccess().getFIELDEnumLiteralDeclaration_4().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_4, grammarAccess.getPropertyComponentAccess().getFIELDEnumLiteralDeclaration_4());
			}
		)
		    |
		(
			enumLiteral_5='all'
			{
				$current = grammarAccess.getPropertyComponentAccess().getALLEnumLiteralDeclaration_5().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_5, grammarAccess.getPropertyComponentAccess().getALLEnumLiteralDeclaration_5());
			}
		)
	)
;

// Rule ComponentDefinitionType
ruleComponentDefinitionType returns [Enumerator current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		(
			enumLiteral_0='signal'
			{
				$current = grammarAccess.getComponentDefinitionTypeAccess().getSIGNALEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_0, grammarAccess.getComponentDefinitionTypeAccess().getSIGNALEnumLiteralDeclaration_0());
			}
		)
		    |
		(
			enumLiteral_1='addrmap'
			{
				$current = grammarAccess.getComponentDefinitionTypeAccess().getADDRMAPEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_1, grammarAccess.getComponentDefinitionTypeAccess().getADDRMAPEnumLiteralDeclaration_1());
			}
		)
		    |
		(
			enumLiteral_2='regfile'
			{
				$current = grammarAccess.getComponentDefinitionTypeAccess().getREGFILEEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_2, grammarAccess.getComponentDefinitionTypeAccess().getREGFILEEnumLiteralDeclaration_2());
			}
		)
		    |
		(
			enumLiteral_3='reg'
			{
				$current = grammarAccess.getComponentDefinitionTypeAccess().getREGEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_3, grammarAccess.getComponentDefinitionTypeAccess().getREGEnumLiteralDeclaration_3());
			}
		)
		    |
		(
			enumLiteral_4='field'
			{
				$current = grammarAccess.getComponentDefinitionTypeAccess().getFIELDEnumLiteralDeclaration_4().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_4, grammarAccess.getComponentDefinitionTypeAccess().getFIELDEnumLiteralDeclaration_4());
			}
		)
	)
;

// Rule Property
ruleProperty returns [Enumerator current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		(
			enumLiteral_0='name'
			{
				$current = grammarAccess.getPropertyAccess().getNAMEEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_0, grammarAccess.getPropertyAccess().getNAMEEnumLiteralDeclaration_0());
			}
		)
		    |
		(
			enumLiteral_1='desc'
			{
				$current = grammarAccess.getPropertyAccess().getDESCEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_1, grammarAccess.getPropertyAccess().getDESCEnumLiteralDeclaration_1());
			}
		)
		    |
		(
			enumLiteral_2='arbiter'
			{
				$current = grammarAccess.getPropertyAccess().getARBITEREnumLiteralDeclaration_2().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_2, grammarAccess.getPropertyAccess().getARBITEREnumLiteralDeclaration_2());
			}
		)
		    |
		(
			enumLiteral_3='rset'
			{
				$current = grammarAccess.getPropertyAccess().getRSETEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_3, grammarAccess.getPropertyAccess().getRSETEnumLiteralDeclaration_3());
			}
		)
		    |
		(
			enumLiteral_4='rclr'
			{
				$current = grammarAccess.getPropertyAccess().getRCLREnumLiteralDeclaration_4().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_4, grammarAccess.getPropertyAccess().getRCLREnumLiteralDeclaration_4());
			}
		)
		    |
		(
			enumLiteral_5='woclr'
			{
				$current = grammarAccess.getPropertyAccess().getWOCLREnumLiteralDeclaration_5().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_5, grammarAccess.getPropertyAccess().getWOCLREnumLiteralDeclaration_5());
			}
		)
		    |
		(
			enumLiteral_6='woset'
			{
				$current = grammarAccess.getPropertyAccess().getWOSETEnumLiteralDeclaration_6().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_6, grammarAccess.getPropertyAccess().getWOSETEnumLiteralDeclaration_6());
			}
		)
		    |
		(
			enumLiteral_7='we'
			{
				$current = grammarAccess.getPropertyAccess().getWEEnumLiteralDeclaration_7().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_7, grammarAccess.getPropertyAccess().getWEEnumLiteralDeclaration_7());
			}
		)
		    |
		(
			enumLiteral_8='wel'
			{
				$current = grammarAccess.getPropertyAccess().getWELEnumLiteralDeclaration_8().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_8, grammarAccess.getPropertyAccess().getWELEnumLiteralDeclaration_8());
			}
		)
		    |
		(
			enumLiteral_9='swwe'
			{
				$current = grammarAccess.getPropertyAccess().getSWWEEnumLiteralDeclaration_9().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_9, grammarAccess.getPropertyAccess().getSWWEEnumLiteralDeclaration_9());
			}
		)
		    |
		(
			enumLiteral_10='swwel'
			{
				$current = grammarAccess.getPropertyAccess().getSWWELEnumLiteralDeclaration_10().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_10, grammarAccess.getPropertyAccess().getSWWELEnumLiteralDeclaration_10());
			}
		)
		    |
		(
			enumLiteral_11='hwset'
			{
				$current = grammarAccess.getPropertyAccess().getHWSETEnumLiteralDeclaration_11().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_11, grammarAccess.getPropertyAccess().getHWSETEnumLiteralDeclaration_11());
			}
		)
		    |
		(
			enumLiteral_12='hwclr'
			{
				$current = grammarAccess.getPropertyAccess().getHWCLREnumLiteralDeclaration_12().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_12, grammarAccess.getPropertyAccess().getHWCLREnumLiteralDeclaration_12());
			}
		)
		    |
		(
			enumLiteral_13='swmod'
			{
				$current = grammarAccess.getPropertyAccess().getSWMODEnumLiteralDeclaration_13().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_13, grammarAccess.getPropertyAccess().getSWMODEnumLiteralDeclaration_13());
			}
		)
		    |
		(
			enumLiteral_14='swacc'
			{
				$current = grammarAccess.getPropertyAccess().getSWACCEnumLiteralDeclaration_14().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_14, grammarAccess.getPropertyAccess().getSWACCEnumLiteralDeclaration_14());
			}
		)
		    |
		(
			enumLiteral_15='sticky'
			{
				$current = grammarAccess.getPropertyAccess().getSTICKYEnumLiteralDeclaration_15().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_15, grammarAccess.getPropertyAccess().getSTICKYEnumLiteralDeclaration_15());
			}
		)
		    |
		(
			enumLiteral_16='stickybit'
			{
				$current = grammarAccess.getPropertyAccess().getSTICKYBITEnumLiteralDeclaration_16().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_16, grammarAccess.getPropertyAccess().getSTICKYBITEnumLiteralDeclaration_16());
			}
		)
		    |
		(
			enumLiteral_17='intr'
			{
				$current = grammarAccess.getPropertyAccess().getINTREnumLiteralDeclaration_17().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_17, grammarAccess.getPropertyAccess().getINTREnumLiteralDeclaration_17());
			}
		)
		    |
		(
			enumLiteral_18='anded'
			{
				$current = grammarAccess.getPropertyAccess().getANDEDEnumLiteralDeclaration_18().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_18, grammarAccess.getPropertyAccess().getANDEDEnumLiteralDeclaration_18());
			}
		)
		    |
		(
			enumLiteral_19='ored'
			{
				$current = grammarAccess.getPropertyAccess().getOREDEnumLiteralDeclaration_19().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_19, grammarAccess.getPropertyAccess().getOREDEnumLiteralDeclaration_19());
			}
		)
		    |
		(
			enumLiteral_20='xored'
			{
				$current = grammarAccess.getPropertyAccess().getXOREDEnumLiteralDeclaration_20().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_20, grammarAccess.getPropertyAccess().getXOREDEnumLiteralDeclaration_20());
			}
		)
		    |
		(
			enumLiteral_21='counter'
			{
				$current = grammarAccess.getPropertyAccess().getCOUNTEREnumLiteralDeclaration_21().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_21, grammarAccess.getPropertyAccess().getCOUNTEREnumLiteralDeclaration_21());
			}
		)
		    |
		(
			enumLiteral_22='overflow'
			{
				$current = grammarAccess.getPropertyAccess().getOVERFLOWEnumLiteralDeclaration_22().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_22, grammarAccess.getPropertyAccess().getOVERFLOWEnumLiteralDeclaration_22());
			}
		)
		    |
		(
			enumLiteral_23='sharedextbus'
			{
				$current = grammarAccess.getPropertyAccess().getSHAREDEXTBUSEnumLiteralDeclaration_23().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_23, grammarAccess.getPropertyAccess().getSHAREDEXTBUSEnumLiteralDeclaration_23());
			}
		)
		    |
		(
			enumLiteral_24='errextbus'
			{
				$current = grammarAccess.getPropertyAccess().getERREXTBUSEnumLiteralDeclaration_24().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_24, grammarAccess.getPropertyAccess().getERREXTBUSEnumLiteralDeclaration_24());
			}
		)
		    |
		(
			enumLiteral_25='reset'
			{
				$current = grammarAccess.getPropertyAccess().getRESETEnumLiteralDeclaration_25().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_25, grammarAccess.getPropertyAccess().getRESETEnumLiteralDeclaration_25());
			}
		)
		    |
		(
			enumLiteral_26='littleendian'
			{
				$current = grammarAccess.getPropertyAccess().getLITTLEENDIANEnumLiteralDeclaration_26().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_26, grammarAccess.getPropertyAccess().getLITTLEENDIANEnumLiteralDeclaration_26());
			}
		)
		    |
		(
			enumLiteral_27='bigendian'
			{
				$current = grammarAccess.getPropertyAccess().getBIGENDIANEnumLiteralDeclaration_27().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_27, grammarAccess.getPropertyAccess().getBIGENDIANEnumLiteralDeclaration_27());
			}
		)
		    |
		(
			enumLiteral_28='rsvdset'
			{
				$current = grammarAccess.getPropertyAccess().getRSVDSETEnumLiteralDeclaration_28().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_28, grammarAccess.getPropertyAccess().getRSVDSETEnumLiteralDeclaration_28());
			}
		)
		    |
		(
			enumLiteral_29='rsvdsetX'
			{
				$current = grammarAccess.getPropertyAccess().getRSVDSETXEnumLiteralDeclaration_29().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_29, grammarAccess.getPropertyAccess().getRSVDSETXEnumLiteralDeclaration_29());
			}
		)
		    |
		(
			enumLiteral_30='bridge'
			{
				$current = grammarAccess.getPropertyAccess().getBRIDGEEnumLiteralDeclaration_30().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_30, grammarAccess.getPropertyAccess().getBRIDGEEnumLiteralDeclaration_30());
			}
		)
		    |
		(
			enumLiteral_31='shared'
			{
				$current = grammarAccess.getPropertyAccess().getSHAREDEnumLiteralDeclaration_31().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_31, grammarAccess.getPropertyAccess().getSHAREDEnumLiteralDeclaration_31());
			}
		)
		    |
		(
			enumLiteral_32='msb0'
			{
				$current = grammarAccess.getPropertyAccess().getMSB0EnumLiteralDeclaration_32().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_32, grammarAccess.getPropertyAccess().getMSB0EnumLiteralDeclaration_32());
			}
		)
		    |
		(
			enumLiteral_33='lsb0'
			{
				$current = grammarAccess.getPropertyAccess().getLSB0EnumLiteralDeclaration_33().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_33, grammarAccess.getPropertyAccess().getLSB0EnumLiteralDeclaration_33());
			}
		)
		    |
		(
			enumLiteral_34='sync'
			{
				$current = grammarAccess.getPropertyAccess().getSYNCEnumLiteralDeclaration_34().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_34, grammarAccess.getPropertyAccess().getSYNCEnumLiteralDeclaration_34());
			}
		)
		    |
		(
			enumLiteral_35='async'
			{
				$current = grammarAccess.getPropertyAccess().getASYNCEnumLiteralDeclaration_35().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_35, grammarAccess.getPropertyAccess().getASYNCEnumLiteralDeclaration_35());
			}
		)
		    |
		(
			enumLiteral_36='cpuif_reset'
			{
				$current = grammarAccess.getPropertyAccess().getCPUIF_RESETEnumLiteralDeclaration_36().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_36, grammarAccess.getPropertyAccess().getCPUIF_RESETEnumLiteralDeclaration_36());
			}
		)
		    |
		(
			enumLiteral_37='field_reset'
			{
				$current = grammarAccess.getPropertyAccess().getFIELD_RESETEnumLiteralDeclaration_37().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_37, grammarAccess.getPropertyAccess().getFIELD_RESETEnumLiteralDeclaration_37());
			}
		)
		    |
		(
			enumLiteral_38='activehigh'
			{
				$current = grammarAccess.getPropertyAccess().getACTIVEHIGHEnumLiteralDeclaration_38().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_38, grammarAccess.getPropertyAccess().getACTIVEHIGHEnumLiteralDeclaration_38());
			}
		)
		    |
		(
			enumLiteral_39='activelow'
			{
				$current = grammarAccess.getPropertyAccess().getACTIVELOWEnumLiteralDeclaration_39().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_39, grammarAccess.getPropertyAccess().getACTIVELOWEnumLiteralDeclaration_39());
			}
		)
		    |
		(
			enumLiteral_40='singlepulse'
			{
				$current = grammarAccess.getPropertyAccess().getSINGLEPULSEEnumLiteralDeclaration_40().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_40, grammarAccess.getPropertyAccess().getSINGLEPULSEEnumLiteralDeclaration_40());
			}
		)
		    |
		(
			enumLiteral_41='underflow'
			{
				$current = grammarAccess.getPropertyAccess().getUNDERFLOWEnumLiteralDeclaration_41().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_41, grammarAccess.getPropertyAccess().getUNDERFLOWEnumLiteralDeclaration_41());
			}
		)
		    |
		(
			enumLiteral_42='incr'
			{
				$current = grammarAccess.getPropertyAccess().getINCREnumLiteralDeclaration_42().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_42, grammarAccess.getPropertyAccess().getINCREnumLiteralDeclaration_42());
			}
		)
		    |
		(
			enumLiteral_43='decr'
			{
				$current = grammarAccess.getPropertyAccess().getDECREnumLiteralDeclaration_43().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_43, grammarAccess.getPropertyAccess().getDECREnumLiteralDeclaration_43());
			}
		)
		    |
		(
			enumLiteral_44='incrwidth'
			{
				$current = grammarAccess.getPropertyAccess().getINCRWIDTHEnumLiteralDeclaration_44().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_44, grammarAccess.getPropertyAccess().getINCRWIDTHEnumLiteralDeclaration_44());
			}
		)
		    |
		(
			enumLiteral_45='decrwidth'
			{
				$current = grammarAccess.getPropertyAccess().getDECRWIDTHEnumLiteralDeclaration_45().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_45, grammarAccess.getPropertyAccess().getDECRWIDTHEnumLiteralDeclaration_45());
			}
		)
		    |
		(
			enumLiteral_46='incrvalue'
			{
				$current = grammarAccess.getPropertyAccess().getINCRVALUEEnumLiteralDeclaration_46().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_46, grammarAccess.getPropertyAccess().getINCRVALUEEnumLiteralDeclaration_46());
			}
		)
		    |
		(
			enumLiteral_47='decrvalue'
			{
				$current = grammarAccess.getPropertyAccess().getDECRVALUEEnumLiteralDeclaration_47().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_47, grammarAccess.getPropertyAccess().getDECRVALUEEnumLiteralDeclaration_47());
			}
		)
		    |
		(
			enumLiteral_48='saturate'
			{
				$current = grammarAccess.getPropertyAccess().getSATURATEEnumLiteralDeclaration_48().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_48, grammarAccess.getPropertyAccess().getSATURATEEnumLiteralDeclaration_48());
			}
		)
		    |
		(
			enumLiteral_49='decrsaturate'
			{
				$current = grammarAccess.getPropertyAccess().getDECRSATURATEEnumLiteralDeclaration_49().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_49, grammarAccess.getPropertyAccess().getDECRSATURATEEnumLiteralDeclaration_49());
			}
		)
		    |
		(
			enumLiteral_50='threshold'
			{
				$current = grammarAccess.getPropertyAccess().getTHRESHOLDEnumLiteralDeclaration_50().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_50, grammarAccess.getPropertyAccess().getTHRESHOLDEnumLiteralDeclaration_50());
			}
		)
		    |
		(
			enumLiteral_51='decrthreshold'
			{
				$current = grammarAccess.getPropertyAccess().getDECRTHRESHOLDEnumLiteralDeclaration_51().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_51, grammarAccess.getPropertyAccess().getDECRTHRESHOLDEnumLiteralDeclaration_51());
			}
		)
		    |
		(
			enumLiteral_52='dontcompare'
			{
				$current = grammarAccess.getPropertyAccess().getDONTCOMPAREEnumLiteralDeclaration_52().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_52, grammarAccess.getPropertyAccess().getDONTCOMPAREEnumLiteralDeclaration_52());
			}
		)
		    |
		(
			enumLiteral_53='donttest'
			{
				$current = grammarAccess.getPropertyAccess().getDONTTESTEnumLiteralDeclaration_53().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_53, grammarAccess.getPropertyAccess().getDONTTESTEnumLiteralDeclaration_53());
			}
		)
		    |
		(
			enumLiteral_54='internal'
			{
				$current = grammarAccess.getPropertyAccess().getINTERNALEnumLiteralDeclaration_54().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_54, grammarAccess.getPropertyAccess().getINTERNALEnumLiteralDeclaration_54());
			}
		)
		    |
		(
			enumLiteral_55='alignment'
			{
				$current = grammarAccess.getPropertyAccess().getALIGNMENTEnumLiteralDeclaration_55().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_55, grammarAccess.getPropertyAccess().getALIGNMENTEnumLiteralDeclaration_55());
			}
		)
		    |
		(
			enumLiteral_56='regwidth'
			{
				$current = grammarAccess.getPropertyAccess().getREGWIDTHEnumLiteralDeclaration_56().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_56, grammarAccess.getPropertyAccess().getREGWIDTHEnumLiteralDeclaration_56());
			}
		)
		    |
		(
			enumLiteral_57='fieldwidth'
			{
				$current = grammarAccess.getPropertyAccess().getFIELDWIDTHEnumLiteralDeclaration_57().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_57, grammarAccess.getPropertyAccess().getFIELDWIDTHEnumLiteralDeclaration_57());
			}
		)
		    |
		(
			enumLiteral_58='signalwidth'
			{
				$current = grammarAccess.getPropertyAccess().getSIGNALWIDTHEnumLiteralDeclaration_58().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_58, grammarAccess.getPropertyAccess().getSIGNALWIDTHEnumLiteralDeclaration_58());
			}
		)
		    |
		(
			enumLiteral_59='accesswidth'
			{
				$current = grammarAccess.getPropertyAccess().getACCESSWIDTHEnumLiteralDeclaration_59().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_59, grammarAccess.getPropertyAccess().getACCESSWIDTHEnumLiteralDeclaration_59());
			}
		)
		    |
		(
			enumLiteral_60='sw'
			{
				$current = grammarAccess.getPropertyAccess().getSWEnumLiteralDeclaration_60().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_60, grammarAccess.getPropertyAccess().getSWEnumLiteralDeclaration_60());
			}
		)
		    |
		(
			enumLiteral_61='hw'
			{
				$current = grammarAccess.getPropertyAccess().getHWEnumLiteralDeclaration_61().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_61, grammarAccess.getPropertyAccess().getHWEnumLiteralDeclaration_61());
			}
		)
		    |
		(
			enumLiteral_62='addressing'
			{
				$current = grammarAccess.getPropertyAccess().getADDRESSINGEnumLiteralDeclaration_62().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_62, grammarAccess.getPropertyAccess().getADDRESSINGEnumLiteralDeclaration_62());
			}
		)
		    |
		(
			enumLiteral_63='precedence'
			{
				$current = grammarAccess.getPropertyAccess().getPRECEDENCEEnumLiteralDeclaration_63().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_63, grammarAccess.getPropertyAccess().getPRECEDENCEEnumLiteralDeclaration_63());
			}
		)
		    |
		(
			enumLiteral_64='encode'
			{
				$current = grammarAccess.getPropertyAccess().getENCODEEnumLiteralDeclaration_64().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_64, grammarAccess.getPropertyAccess().getENCODEEnumLiteralDeclaration_64());
			}
		)
		    |
		(
			enumLiteral_65='resetsignal'
			{
				$current = grammarAccess.getPropertyAccess().getRESETSIGNALEnumLiteralDeclaration_65().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_65, grammarAccess.getPropertyAccess().getRESETSIGNALEnumLiteralDeclaration_65());
			}
		)
		    |
		(
			enumLiteral_66='clock'
			{
				$current = grammarAccess.getPropertyAccess().getCLOCKEnumLiteralDeclaration_66().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_66, grammarAccess.getPropertyAccess().getCLOCKEnumLiteralDeclaration_66());
			}
		)
		    |
		(
			enumLiteral_67='mask'
			{
				$current = grammarAccess.getPropertyAccess().getMASKEnumLiteralDeclaration_67().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_67, grammarAccess.getPropertyAccess().getMASKEnumLiteralDeclaration_67());
			}
		)
		    |
		(
			enumLiteral_68='enable'
			{
				$current = grammarAccess.getPropertyAccess().getENABLEEnumLiteralDeclaration_68().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_68, grammarAccess.getPropertyAccess().getENABLEEnumLiteralDeclaration_68());
			}
		)
		    |
		(
			enumLiteral_69='hwenable'
			{
				$current = grammarAccess.getPropertyAccess().getHWENABLEEnumLiteralDeclaration_69().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_69, grammarAccess.getPropertyAccess().getHWENABLEEnumLiteralDeclaration_69());
			}
		)
		    |
		(
			enumLiteral_70='hwmask'
			{
				$current = grammarAccess.getPropertyAccess().getHWMASKEnumLiteralDeclaration_70().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_70, grammarAccess.getPropertyAccess().getHWMASKEnumLiteralDeclaration_70());
			}
		)
		    |
		(
			enumLiteral_71='haltmask'
			{
				$current = grammarAccess.getPropertyAccess().getHALTMASKEnumLiteralDeclaration_71().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_71, grammarAccess.getPropertyAccess().getHALTMASKEnumLiteralDeclaration_71());
			}
		)
		    |
		(
			enumLiteral_72='haltenable'
			{
				$current = grammarAccess.getPropertyAccess().getHALTENABLEEnumLiteralDeclaration_72().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_72, grammarAccess.getPropertyAccess().getHALTENABLEEnumLiteralDeclaration_72());
			}
		)
		    |
		(
			enumLiteral_73='halt'
			{
				$current = grammarAccess.getPropertyAccess().getHALTEnumLiteralDeclaration_73().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_73, grammarAccess.getPropertyAccess().getHALTEnumLiteralDeclaration_73());
			}
		)
		    |
		(
			enumLiteral_74='next'
			{
				$current = grammarAccess.getPropertyAccess().getNEXTEnumLiteralDeclaration_74().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_74, grammarAccess.getPropertyAccess().getNEXTEnumLiteralDeclaration_74());
			}
		)
	)
;

// Rule RValueConstant
ruleRValueConstant returns [Enumerator current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		(
			enumLiteral_0='UNDEFINED'
			{
				$current = grammarAccess.getRValueConstantAccess().getUNDEFINEDEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_0, grammarAccess.getRValueConstantAccess().getUNDEFINEDEnumLiteralDeclaration_0());
			}
		)
		    |
		(
			enumLiteral_1='true'
			{
				$current = grammarAccess.getRValueConstantAccess().getTRUEEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_1, grammarAccess.getRValueConstantAccess().getTRUEEnumLiteralDeclaration_1());
			}
		)
		    |
		(
			enumLiteral_2='false'
			{
				$current = grammarAccess.getRValueConstantAccess().getFALSEEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_2, grammarAccess.getRValueConstantAccess().getFALSEEnumLiteralDeclaration_2());
			}
		)
		    |
		(
			enumLiteral_3='rw'
			{
				$current = grammarAccess.getRValueConstantAccess().getRWEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_3, grammarAccess.getRValueConstantAccess().getRWEnumLiteralDeclaration_3());
			}
		)
		    |
		(
			enumLiteral_4='wr'
			{
				$current = grammarAccess.getRValueConstantAccess().getWREnumLiteralDeclaration_4().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_4, grammarAccess.getRValueConstantAccess().getWREnumLiteralDeclaration_4());
			}
		)
		    |
		(
			enumLiteral_5='r'
			{
				$current = grammarAccess.getRValueConstantAccess().getREnumLiteralDeclaration_5().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_5, grammarAccess.getRValueConstantAccess().getREnumLiteralDeclaration_5());
			}
		)
		    |
		(
			enumLiteral_6='w'
			{
				$current = grammarAccess.getRValueConstantAccess().getWEnumLiteralDeclaration_6().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_6, grammarAccess.getRValueConstantAccess().getWEnumLiteralDeclaration_6());
			}
		)
		    |
		(
			enumLiteral_7='na'
			{
				$current = grammarAccess.getRValueConstantAccess().getNAEnumLiteralDeclaration_7().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_7, grammarAccess.getRValueConstantAccess().getNAEnumLiteralDeclaration_7());
			}
		)
		    |
		(
			enumLiteral_8='compact'
			{
				$current = grammarAccess.getRValueConstantAccess().getCOMPACTEnumLiteralDeclaration_8().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_8, grammarAccess.getRValueConstantAccess().getCOMPACTEnumLiteralDeclaration_8());
			}
		)
		    |
		(
			enumLiteral_9='regalign'
			{
				$current = grammarAccess.getRValueConstantAccess().getREGALIGNEnumLiteralDeclaration_9().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_9, grammarAccess.getRValueConstantAccess().getREGALIGNEnumLiteralDeclaration_9());
			}
		)
		    |
		(
			enumLiteral_10='fullalign'
			{
				$current = grammarAccess.getRValueConstantAccess().getFULLALIGNEnumLiteralDeclaration_10().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_10, grammarAccess.getRValueConstantAccess().getFULLALIGNEnumLiteralDeclaration_10());
			}
		)
		    |
		(
			enumLiteral_11='hw'
			{
				$current = grammarAccess.getRValueConstantAccess().getHWEnumLiteralDeclaration_11().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_11, grammarAccess.getRValueConstantAccess().getHWEnumLiteralDeclaration_11());
			}
		)
		    |
		(
			enumLiteral_12='sw'
			{
				$current = grammarAccess.getRValueConstantAccess().getSWEnumLiteralDeclaration_12().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_12, grammarAccess.getRValueConstantAccess().getSWEnumLiteralDeclaration_12());
			}
		)
	)
;

// Rule PropertyModifier
rulePropertyModifier returns [Enumerator current=null]
@init {
	enterRule();
}
@after {
	leaveRule();
}:
	(
		(
			enumLiteral_0='UNDEFINED'
			{
				$current = grammarAccess.getPropertyModifierAccess().getUNDEFINEDEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_0, grammarAccess.getPropertyModifierAccess().getUNDEFINEDEnumLiteralDeclaration_0());
			}
		)
		    |
		(
			enumLiteral_1='posedge'
			{
				$current = grammarAccess.getPropertyModifierAccess().getPOSEDGEEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_1, grammarAccess.getPropertyModifierAccess().getPOSEDGEEnumLiteralDeclaration_1());
			}
		)
		    |
		(
			enumLiteral_2='negedge'
			{
				$current = grammarAccess.getPropertyModifierAccess().getNEGEDGEEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_2, grammarAccess.getPropertyModifierAccess().getNEGEDGEEnumLiteralDeclaration_2());
			}
		)
		    |
		(
			enumLiteral_3='bothedge'
			{
				$current = grammarAccess.getPropertyModifierAccess().getBOTHEDGEEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_3, grammarAccess.getPropertyModifierAccess().getBOTHEDGEEnumLiteralDeclaration_3());
			}
		)
		    |
		(
			enumLiteral_4='level'
			{
				$current = grammarAccess.getPropertyModifierAccess().getLEVELEnumLiteralDeclaration_4().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_4, grammarAccess.getPropertyModifierAccess().getLEVELEnumLiteralDeclaration_4());
			}
		)
		    |
		(
			enumLiteral_5='nonsticky'
			{
				$current = grammarAccess.getPropertyModifierAccess().getNONSTICKYEnumLiteralDeclaration_5().getEnumLiteral().getInstance();
				newLeafNode(enumLiteral_5, grammarAccess.getPropertyModifierAccess().getNONSTICKYEnumLiteralDeclaration_5());
			}
		)
	)
;

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

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

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

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

RULE_ESCAPE_JSP : '<%' ( options {greedy=false;} : . )*'%>';

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

RULE_NUM : (('0'..'9')+ '\'b' ('0'|'1'|'_')+|('0'..'9')+ '\'o' ('0'..'7'|'_')+|('0'..'9')+ '\'h' ('0'..'9'|'a'..'f'|'A'..'F'|'_')+|('0'..'9')+ '\'d' ('0'..'9'|'_')+|'0x' ('0'..'9'|'a'..'f'|'A'..'F')+|('0'..'9')+);

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