Initial commit
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/.classpath b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/.classpath
new file mode 100644
index 0000000..59cf397
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/.project b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/.project
new file mode 100644
index 0000000..f454577
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/.settings/org.eclipse.core.resources.prefs b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..52164b2
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Tue Aug 18 18:37:57 CEST 2009
+eclipse.preferences.version=1
+encoding/<project>=ISO-8859-1
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/.settings/org.eclipse.jdt.core.prefs b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0804042
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,366 @@
+#Wed Oct 14 22:36:22 CEST 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=false
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=false
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=120
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/.settings/org.eclipse.jdt.launching.prefs b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..cd7271f
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Wed Aug 12 21:10:17 CEST 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=warning
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/.settings/org.eclipse.jdt.ui.prefs b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..f6caf59
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,118 @@
+#Wed Oct 14 22:36:24 CEST 2009
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=false
+cleanup.format_source_code=false
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=false
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=false
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=false
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_Xtext
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_'Xtext'
+formatter_settings_version=11
+org.eclipse.jdt.ui.exception.name=e
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=java;javax;org;com;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=1
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"></template><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"></template><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"></template><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*******************************************************************************\n * Copyright (c) ${year} itemis AG (http\://www.itemis.eu) and others.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http\://www.eclipse.org/legal/epl-v10.html\n *******************************************************************************/</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\n * @author ${user} - Initial contribution and API\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"></template><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"></template><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"></template><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"></template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter function" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\n * @return the ${bare_field_name}\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter function" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\n * @param ${param} the ${bare_field_name} to set\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\n * ${tags}\n */</template><template autoinsert\="true" context\="filecomment_context" deleted\="false" description\="Comment for created JavaScript files" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.filecomment" name\="filecomment">/**\n * \n */</template><template autoinsert\="true" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\n * @author ${user}\n *\n * ${tags}\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for vars" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\n * \n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding function" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\n * ${tags}\n */</template><template autoinsert\="true" context\="overridecomment_context" deleted\="false" description\="Comment for overriding functions" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/* (non-JSDoc)\n * ${see_to_overridden}\n */</template><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate functions" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\n * ${tags}\n * ${see_to_target}\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.classbody" name\="classbody">\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created function stubs" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated function stub\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=false
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=false
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/.settings/org.eclipse.pde.prefs b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000..2bd5814
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,25 @@
+#Wed Aug 12 21:14:13 CEST 2009
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=2
+compilers.p.missing-version-export-package=2
+compilers.p.missing-version-import-package=2
+compilers.p.missing-version-require-bundle=2
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/META-INF/MANIFEST.MF b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..a512d49
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,17 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: EclipseCon 2011 Tutorial Xtext States with Embedded OCL Editor UI
+Bundle-SymbolicName: org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui;singleton:=true
+Bundle-Vendor: Eclipse Modeling Project
+Bundle-Version: 1.0.0
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.eclipse.ocl.tutorial.eclipsecon2011.oclstates,
+ org.eclipse.xtext.ui;bundle-version="2.0.0",
+ org.eclipse.ui.editors,
+ org.eclipse.ui,
+ org.eclipse.xtext.ui.shared;bundle-version="2.0.0",
+ org.antlr.runtime
+Bundle-Activator: org.eclipse.ocl.tutorial.eclipsecon2011.OCLStatesActivator
+Bundle-ActivationPolicy: lazy
+Import-Package: org.apache.log4j
+Export-Package: org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist.antlr
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/about.html b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/about.html
new file mode 100644
index 0000000..1b8f940
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/build.properties b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/build.properties
new file mode 100644
index 0000000..6beed05
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/build.properties
@@ -0,0 +1,9 @@
+source.. = src/,\
+           src-gen/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               icons/,\
+               templates/,\
+               about.html
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/icons/editor.gif b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/icons/editor.gif
new file mode 100644
index 0000000..2a2b4b6
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/icons/editor.gif
Binary files differ
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/plugin.xml b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/plugin.xml
new file mode 100644
index 0000000..9d6cf03
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/plugin.xml
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<plugin>
+
+    <extension
+            point="org.eclipse.ui.editors">
+        <editor
+            class="org.eclipse.ocl.tutorial.eclipsecon2011.ui.OCLStatesExecutableExtensionFactory:org.eclipse.xtext.ui.editor.XtextEditor"
+            contributorClass="org.eclipse.ui.editors.text.TextEditorActionContributor"
+            default="true"
+            extensions="oclstates"
+            id="org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates"
+            name="OCLStates Editor">
+        </editor>
+    </extension>
+    <extension
+        point="org.eclipse.ui.handlers">
+        <handler
+            class="org.eclipse.ocl.tutorial.eclipsecon2011.ui.OCLStatesExecutableExtensionFactory:org.eclipse.xtext.ui.editor.hyperlinking.OpenDeclarationHandler"
+            commandId="org.eclipse.xtext.ui.editor.hyperlinking.OpenDeclaration">
+            <activeWhen>
+                <reference
+                    definitionId="org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates.Editor.opened">
+                </reference>
+            </activeWhen>
+        </handler>
+        <handler
+            class="org.eclipse.ocl.tutorial.eclipsecon2011.ui.OCLStatesExecutableExtensionFactory:org.eclipse.xtext.ui.editor.handler.ValidateActionHandler"
+            commandId="org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates.validate">
+         <activeWhen>
+            <reference
+                    definitionId="org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates.Editor.opened">
+            </reference>
+         </activeWhen>
+      </handler>
+    </extension>
+    <extension point="org.eclipse.core.expressions.definitions">
+        <definition id="org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates.Editor.opened">
+            <and>
+                <reference definitionId="isActiveEditorAnInstanceOfXtextEditor"/>
+                <with variable="activeEditor">
+                    <test property="org.eclipse.xtext.ui.editor.XtextEditor.languageName" 
+                        value="org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates" 
+                        forcePluginActivation="true"/>
+                </with>        
+            </and>
+        </definition>
+    </extension>
+    <extension
+            point="org.eclipse.ui.preferencePages">
+        <page
+            class="org.eclipse.ocl.tutorial.eclipsecon2011.ui.OCLStatesExecutableExtensionFactory:org.eclipse.xtext.ui.editor.preferences.LanguageRootPreferencePage"
+            id="org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates"
+            name="OCLStates">
+            <keywordReference id="org.eclipse.ocl.tutorial.eclipsecon2011.ui.keyword_OCLStates"/>
+        </page>
+        <page
+            category="org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates"
+            class="org.eclipse.ocl.tutorial.eclipsecon2011.ui.OCLStatesExecutableExtensionFactory:org.eclipse.xtext.ui.editor.syntaxcoloring.SyntaxColoringPreferencePage"
+            id="org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates.coloring"
+            name="Syntax Coloring">
+            <keywordReference id="org.eclipse.ocl.tutorial.eclipsecon2011.ui.keyword_OCLStates"/>
+        </page>
+        <page
+            category="org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates"
+            class="org.eclipse.ocl.tutorial.eclipsecon2011.ui.OCLStatesExecutableExtensionFactory:org.eclipse.xtext.ui.editor.templates.XtextTemplatePreferencePage"
+            id="org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates.templates"
+            name="Templates">
+            <keywordReference id="org.eclipse.ocl.tutorial.eclipsecon2011.ui.keyword_OCLStates"/>
+        </page>
+    </extension>
+    <extension
+        point="org.eclipse.ui.keywords">
+        <keyword
+            id="org.eclipse.ocl.tutorial.eclipsecon2011.ui.keyword_OCLStates"
+            label="OCLStates"/>
+    </extension>
+    <extension
+         point="org.eclipse.ui.commands">
+      <command
+            description="Trigger expensive validation"
+            id="org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates.validate"
+            name="Validate">
+      </command>
+    </extension>
+    <extension point="org.eclipse.ui.menus">
+        <menuContribution
+            locationURI="popup:#TextEditorContext?after=group.edit">
+             <command
+                 commandId="org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates.validate"
+                 style="push"
+                 tooltip="Trigger expensive validation">
+            <visibleWhen checkEnabled="false">
+                <reference
+                    definitionId="org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates.Editor.opened">
+                </reference>
+            </visibleWhen>
+         </command>  
+         </menuContribution>
+    </extension>
+    <extension point="org.eclipse.ui.menus">
+		<menuContribution locationURI="popup:#TextEditorContext?endof=group.find">
+			<command commandId="org.eclipse.xtext.ui.editor.FindReferences">
+				<visibleWhen checkEnabled="false">
+                	<reference definitionId="org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates.Editor.opened">
+                	</reference>
+            	</visibleWhen>
+			</command>
+		</menuContribution>
+	</extension>
+	<extension point="org.eclipse.ui.handlers">
+	    <handler
+            class="org.eclipse.ocl.tutorial.eclipsecon2011.ui.OCLStatesExecutableExtensionFactory:org.eclipse.xtext.ui.editor.findrefs.FindReferencesHandler"
+            commandId="org.eclipse.xtext.ui.editor.FindReferences">
+            <activeWhen>
+                <reference
+                    definitionId="org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates.Editor.opened">
+                </reference>
+            </activeWhen>
+        </handler>
+    </extension>   
+
+<!-- adding resource factories -->
+
+	<extension
+		point="org.eclipse.emf.ecore.extension_parser">
+		<parser
+			class="org.eclipse.ocl.tutorial.eclipsecon2011.ui.OCLStatesExecutableExtensionFactory:org.eclipse.xtext.resource.IResourceFactory"
+			type="oclstates">
+		</parser>
+	</extension>
+	<extension point="org.eclipse.xtext.extension_resourceServiceProvider">
+        <resourceServiceProvider
+            class="org.eclipse.ocl.tutorial.eclipsecon2011.ui.OCLStatesExecutableExtensionFactory:org.eclipse.xtext.ui.resource.IResourceUIServiceProvider"
+            uriExtension="oclstates">
+        </resourceServiceProvider>
+    </extension>
+
+
+
+	<!-- Quick Outline -->
+	<extension
+		point="org.eclipse.ui.handlers">
+		<handler 
+			class="org.eclipse.ocl.tutorial.eclipsecon2011.ui.OCLStatesExecutableExtensionFactory:org.eclipse.xtext.ui.editor.outline.quickoutline.ShowQuickOutlineActionHandler"
+			commandId="org.eclipse.xtext.ui.editor.outline.QuickOutline">
+			<activeWhen>
+				<reference
+					definitionId="org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates.Editor.opened">
+				</reference>
+			</activeWhen>
+		</handler>
+	</extension>
+	<extension
+		point="org.eclipse.ui.commands">
+		<command
+			description="Open the quick outline."
+			id="org.eclipse.xtext.ui.editor.outline.QuickOutline"
+			name="Quick Outline">
+		</command>
+	</extension>
+	<extension point="org.eclipse.ui.menus">
+		<menuContribution
+			locationURI="popup:#TextEditorContext?after=group.open">
+			<command commandId="org.eclipse.xtext.ui.editor.outline.QuickOutline"
+				style="push"
+				tooltip="Open Quick Outline">
+				<visibleWhen checkEnabled="false">
+					<reference definitionId="org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates.Editor.opened"/>
+				</visibleWhen>
+			</command>
+		</menuContribution>
+	</extension>
+
+</plugin>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/AbstractOCLStatesUiModule.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/AbstractOCLStatesUiModule.java
new file mode 100644
index 0000000..b30d9f6
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/AbstractOCLStatesUiModule.java
@@ -0,0 +1,87 @@
+
+/*
+ * generated by Xtext
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.ui;
+
+import org.eclipse.xtext.ui.DefaultUiModule;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+/**
+ * Manual modifications go to {org.eclipse.ocl.tutorial.eclipsecon2011.ui.OCLStatesUiModule}
+ */
+@SuppressWarnings("all")
+public abstract class AbstractOCLStatesUiModule extends DefaultUiModule {
+	
+	public AbstractOCLStatesUiModule(AbstractUIPlugin plugin) {
+		super(plugin);
+	}
+	
+	
+	// contributed by org.eclipse.xtext.ui.generator.ImplicitUiFragment
+	public com.google.inject.Provider<org.eclipse.xtext.resource.containers.IAllContainersState> provideIAllContainersState() {
+		return org.eclipse.xtext.ui.shared.Access.getJavaProjectsState();
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.contentassist.IProposalConflictHelper> bindIProposalConflictHelper() {
+		return org.eclipse.xtext.ui.editor.contentassist.antlr.AntlrProposalConflictHelper.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public void configureHighlightingLexer(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.parser.antlr.Lexer.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.ui.LexerUIBindings.HIGHLIGHTING)).to(org.eclipse.ocl.tutorial.eclipsecon2011.parser.antlr.internal.InternalOCLStatesLexer.class);
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public void configureHighlightingTokenDefProvider(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.parser.antlr.ITokenDefProvider.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.ui.LexerUIBindings.HIGHLIGHTING)).to(org.eclipse.xtext.parser.antlr.AntlrTokenDefProvider.class);
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.labeling.LabelProviderFragment
+	public Class<? extends org.eclipse.jface.viewers.ILabelProvider> bindILabelProvider() {
+		return org.eclipse.ocl.tutorial.eclipsecon2011.ui.labeling.OCLStatesLabelProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.labeling.LabelProviderFragment
+	public void configureResourceUIServiceLabelProvider(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.jface.viewers.ILabelProvider.class).annotatedWith(org.eclipse.xtext.ui.resource.ResourceServiceDescriptionLabelProvider.class).to(org.eclipse.ocl.tutorial.eclipsecon2011.ui.labeling.OCLStatesDescriptionLabelProvider.class);
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.outline.OutlineTreeProviderFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.outline.IOutlineTreeProvider> bindIOutlineTreeProvider() {
+		return org.eclipse.ocl.tutorial.eclipsecon2011.ui.outline.OCLStatesOutlineTreeProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.outline.OutlineTreeProviderFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.outline.impl.IOutlineTreeStructureProvider> bindIOutlineTreeStructureProvider() {
+		return org.eclipse.ocl.tutorial.eclipsecon2011.ui.outline.OCLStatesOutlineTreeProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.contentAssist.JavaBasedContentAssistFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.contentassist.IContentProposalProvider> bindIContentProposalProvider() {
+		return org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist.OCLStatesProposalProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrUiGeneratorFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext.Factory> bindContentAssistContext$Factory() {
+		return org.eclipse.xtext.ui.editor.contentassist.antlr.ParserBasedContentAssistContextFactory.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrUiGeneratorFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.contentassist.antlr.IContentAssistParser> bindIContentAssistParser() {
+		return org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist.antlr.OCLStatesParser.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrUiGeneratorFragment
+	public void configureContentAssistLexerProvider(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist.antlr.internal.InternalOCLStatesLexer.class).toProvider(org.eclipse.xtext.parser.antlr.LexerProvider.create(org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist.antlr.internal.InternalOCLStatesLexer.class));
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrUiGeneratorFragment
+	public void configureContentAssistLexer(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.ui.editor.contentassist.antlr.internal.Lexer.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.ui.LexerUIBindings.CONTENT_ASSIST)).to(org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist.antlr.internal.InternalOCLStatesLexer.class);
+	}
+
+
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/OCLStatesExecutableExtensionFactory.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/OCLStatesExecutableExtensionFactory.java
new file mode 100644
index 0000000..38731c3
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/OCLStatesExecutableExtensionFactory.java
@@ -0,0 +1,27 @@
+/*
+ * generated by Xtext
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.ui;
+
+import org.eclipse.xtext.ui.guice.AbstractGuiceAwareExecutableExtensionFactory;
+import org.osgi.framework.Bundle;
+
+import com.google.inject.Injector;
+
+/**
+ * This class was generated. Customizations should only happen in a newly
+ * introduced subclass. 
+ */
+public class OCLStatesExecutableExtensionFactory extends AbstractGuiceAwareExecutableExtensionFactory {
+
+	@Override
+	protected Bundle getBundle() {
+		return org.eclipse.ocl.tutorial.eclipsecon2011.ui.internal.OCLStatesActivator.getInstance().getBundle();
+	}
+	
+	@Override
+	protected Injector getInjector() {
+		return org.eclipse.ocl.tutorial.eclipsecon2011.ui.internal.OCLStatesActivator.getInstance().getInjector("org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates");
+	}
+	
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/AbstractOCLStatesProposalProvider.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/AbstractOCLStatesProposalProvider.java
new file mode 100644
index 0000000..7cd9de0
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/AbstractOCLStatesProposalProvider.java
@@ -0,0 +1,96 @@
+/*
+* generated by Xtext
+*/
+package org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.common.ui.contentassist.TerminalsProposalProvider;
+import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor;
+import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
+
+/**
+ * Represents a generated, default implementation of interface {@link IProposalProvider}.
+ * Methods are dynamically dispatched on the first parameter, i.e., you can override them 
+ * with a more concrete subtype. 
+ */
+@SuppressWarnings("all")
+public class AbstractOCLStatesProposalProvider extends TerminalsProposalProvider {
+		
+	public void completeModule_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeModule_Machines(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeStatemachine_Initial(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeStatemachine_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeStatemachine_Value(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeStatemachine_Events(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeStatemachine_States(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeEvent_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeSimpleState_Initial(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeSimpleState_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeSimpleState_Value(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeSimpleState_Transitions(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeCompoundState_Initial(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeCompoundState_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeCompoundState_Machine(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		lookupCrossReference(((CrossReference)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeCompoundState_Transitions(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeTransition_Event(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		lookupCrossReference(((CrossReference)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeTransition_State(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		lookupCrossReference(((CrossReference)assignment.getTerminal()), context, acceptor);
+	}
+    
+	public void complete_Module(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Statemachine(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Event(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_State(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_SimpleState(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_CompoundState(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Transition(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/OCLStatesParser.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/OCLStatesParser.java
new file mode 100644
index 0000000..90d6feb
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/OCLStatesParser.java
@@ -0,0 +1,95 @@
+/*
+* generated by Xtext
+*/
+package org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist.antlr;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.HashMap;
+
+import org.antlr.runtime.RecognitionException;
+import org.eclipse.xtext.AbstractElement;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.AbstractContentAssistParser;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.FollowElement;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
+
+import com.google.inject.Inject;
+
+import org.eclipse.ocl.tutorial.eclipsecon2011.services.OCLStatesGrammarAccess;
+
+public class OCLStatesParser extends AbstractContentAssistParser {
+	
+	@Inject
+	private OCLStatesGrammarAccess grammarAccess;
+	
+	private Map<AbstractElement, String> nameMappings;
+	
+	@Override
+	protected org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist.antlr.internal.InternalOCLStatesParser createParser() {
+		org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist.antlr.internal.InternalOCLStatesParser result = new org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist.antlr.internal.InternalOCLStatesParser(null);
+		result.setGrammarAccess(grammarAccess);
+		return result;
+	}
+	
+	@Override
+	protected String getRuleName(AbstractElement element) {
+		if (nameMappings == null) {
+			nameMappings = new HashMap<AbstractElement, String>() {
+				private static final long serialVersionUID = 1L;
+				{
+					put(grammarAccess.getStateAccess().getAlternatives(), "rule__State__Alternatives");
+					put(grammarAccess.getModuleAccess().getGroup(), "rule__Module__Group__0");
+					put(grammarAccess.getStatemachineAccess().getGroup(), "rule__Statemachine__Group__0");
+					put(grammarAccess.getStatemachineAccess().getGroup_3(), "rule__Statemachine__Group_3__0");
+					put(grammarAccess.getSimpleStateAccess().getGroup(), "rule__SimpleState__Group__0");
+					put(grammarAccess.getSimpleStateAccess().getGroup_3(), "rule__SimpleState__Group_3__0");
+					put(grammarAccess.getCompoundStateAccess().getGroup(), "rule__CompoundState__Group__0");
+					put(grammarAccess.getTransitionAccess().getGroup(), "rule__Transition__Group__0");
+					put(grammarAccess.getModuleAccess().getNameAssignment_1(), "rule__Module__NameAssignment_1");
+					put(grammarAccess.getModuleAccess().getMachinesAssignment_2(), "rule__Module__MachinesAssignment_2");
+					put(grammarAccess.getStatemachineAccess().getInitialAssignment_0(), "rule__Statemachine__InitialAssignment_0");
+					put(grammarAccess.getStatemachineAccess().getNameAssignment_2(), "rule__Statemachine__NameAssignment_2");
+					put(grammarAccess.getStatemachineAccess().getValueAssignment_3_1(), "rule__Statemachine__ValueAssignment_3_1");
+					put(grammarAccess.getStatemachineAccess().getEventsAssignment_6(), "rule__Statemachine__EventsAssignment_6");
+					put(grammarAccess.getStatemachineAccess().getStatesAssignment_8(), "rule__Statemachine__StatesAssignment_8");
+					put(grammarAccess.getEventAccess().getNameAssignment(), "rule__Event__NameAssignment");
+					put(grammarAccess.getSimpleStateAccess().getInitialAssignment_0(), "rule__SimpleState__InitialAssignment_0");
+					put(grammarAccess.getSimpleStateAccess().getNameAssignment_2(), "rule__SimpleState__NameAssignment_2");
+					put(grammarAccess.getSimpleStateAccess().getValueAssignment_3_1(), "rule__SimpleState__ValueAssignment_3_1");
+					put(grammarAccess.getSimpleStateAccess().getTransitionsAssignment_5(), "rule__SimpleState__TransitionsAssignment_5");
+					put(grammarAccess.getCompoundStateAccess().getInitialAssignment_1(), "rule__CompoundState__InitialAssignment_1");
+					put(grammarAccess.getCompoundStateAccess().getNameAssignment_3(), "rule__CompoundState__NameAssignment_3");
+					put(grammarAccess.getCompoundStateAccess().getMachineAssignment_5(), "rule__CompoundState__MachineAssignment_5");
+					put(grammarAccess.getCompoundStateAccess().getTransitionsAssignment_7(), "rule__CompoundState__TransitionsAssignment_7");
+					put(grammarAccess.getTransitionAccess().getEventAssignment_0(), "rule__Transition__EventAssignment_0");
+					put(grammarAccess.getTransitionAccess().getStateAssignment_2(), "rule__Transition__StateAssignment_2");
+				}
+			};
+		}
+		return nameMappings.get(element);
+	}
+	
+	@Override
+	protected Collection<FollowElement> getFollowElements(AbstractInternalContentAssistParser parser) {
+		try {
+			org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist.antlr.internal.InternalOCLStatesParser typedParser = (org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist.antlr.internal.InternalOCLStatesParser) parser;
+			typedParser.entryRuleModule();
+			return typedParser.getFollowElements();
+		} catch(RecognitionException ex) {
+			throw new RuntimeException(ex);
+		}		
+	}
+	
+	@Override
+	protected String[] getInitialHiddenTokens() {
+		return new String[] { "RULE_WS", "RULE_ML_COMMENT", "RULE_SL_COMMENT" };
+	}
+	
+	public OCLStatesGrammarAccess getGrammarAccess() {
+		return this.grammarAccess;
+	}
+	
+	public void setGrammarAccess(OCLStatesGrammarAccess grammarAccess) {
+		this.grammarAccess = grammarAccess;
+	}
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g
new file mode 100644
index 0000000..4469b08
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g
@@ -0,0 +1,1746 @@
+/*
+* generated by Xtext
+*/
+grammar InternalOCLStates;
+
+options {
+	superClass=AbstractInternalContentAssistParser;
+	
+}
+
+@lexer::header {
+package org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist.antlr.internal;
+
+// Hack: Use our own Lexer superclass by means of import. 
+// Currently there is no other way to specify the superclass for the lexer.
+import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.Lexer;
+}
+
+@parser::header {
+package org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist.antlr.internal; 
+
+import java.io.InputStream;
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.parser.*;
+import org.eclipse.xtext.parser.impl.*;
+import org.eclipse.xtext.parsetree.*;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.DFA;
+import org.eclipse.ocl.tutorial.eclipsecon2011.services.OCLStatesGrammarAccess;
+
+}
+
+@parser::members {
+ 
+ 	private OCLStatesGrammarAccess grammarAccess;
+ 	
+    public void setGrammarAccess(OCLStatesGrammarAccess grammarAccess) {
+    	this.grammarAccess = grammarAccess;
+    }
+    
+    @Override
+    protected Grammar getGrammar() {
+    	return grammarAccess.getGrammar();
+    }
+    
+    @Override
+    protected String getValueForTokenName(String tokenName) {
+    	return tokenName;
+    }
+
+}
+
+
+
+
+// Entry rule entryRuleModule
+entryRuleModule 
+:
+{ before(grammarAccess.getModuleRule()); }
+	 ruleModule
+{ after(grammarAccess.getModuleRule()); } 
+	 EOF 
+;
+
+// Rule Module
+ruleModule
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getModuleAccess().getGroup()); }
+(rule__Module__Group__0)
+{ after(grammarAccess.getModuleAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleStatemachine
+entryRuleStatemachine 
+:
+{ before(grammarAccess.getStatemachineRule()); }
+	 ruleStatemachine
+{ after(grammarAccess.getStatemachineRule()); } 
+	 EOF 
+;
+
+// Rule Statemachine
+ruleStatemachine
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getStatemachineAccess().getGroup()); }
+(rule__Statemachine__Group__0)
+{ after(grammarAccess.getStatemachineAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleEvent
+entryRuleEvent 
+:
+{ before(grammarAccess.getEventRule()); }
+	 ruleEvent
+{ after(grammarAccess.getEventRule()); } 
+	 EOF 
+;
+
+// Rule Event
+ruleEvent
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getEventAccess().getNameAssignment()); }
+(rule__Event__NameAssignment)
+{ after(grammarAccess.getEventAccess().getNameAssignment()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleState
+entryRuleState 
+:
+{ before(grammarAccess.getStateRule()); }
+	 ruleState
+{ after(grammarAccess.getStateRule()); } 
+	 EOF 
+;
+
+// Rule State
+ruleState
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getStateAccess().getAlternatives()); }
+(rule__State__Alternatives)
+{ after(grammarAccess.getStateAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleSimpleState
+entryRuleSimpleState 
+:
+{ before(grammarAccess.getSimpleStateRule()); }
+	 ruleSimpleState
+{ after(grammarAccess.getSimpleStateRule()); } 
+	 EOF 
+;
+
+// Rule SimpleState
+ruleSimpleState
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getSimpleStateAccess().getGroup()); }
+(rule__SimpleState__Group__0)
+{ after(grammarAccess.getSimpleStateAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleCompoundState
+entryRuleCompoundState 
+:
+{ before(grammarAccess.getCompoundStateRule()); }
+	 ruleCompoundState
+{ after(grammarAccess.getCompoundStateRule()); } 
+	 EOF 
+;
+
+// Rule CompoundState
+ruleCompoundState
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getCompoundStateAccess().getGroup()); }
+(rule__CompoundState__Group__0)
+{ after(grammarAccess.getCompoundStateAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleTransition
+entryRuleTransition 
+:
+{ before(grammarAccess.getTransitionRule()); }
+	 ruleTransition
+{ after(grammarAccess.getTransitionRule()); } 
+	 EOF 
+;
+
+// Rule Transition
+ruleTransition
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getTransitionAccess().getGroup()); }
+(rule__Transition__Group__0)
+{ after(grammarAccess.getTransitionAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+rule__State__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStateAccess().getSimpleStateParserRuleCall_0()); }
+	ruleSimpleState
+{ after(grammarAccess.getStateAccess().getSimpleStateParserRuleCall_0()); }
+)
+
+    |(
+{ before(grammarAccess.getStateAccess().getCompoundStateParserRuleCall_1()); }
+	ruleCompoundState
+{ after(grammarAccess.getStateAccess().getCompoundStateParserRuleCall_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+rule__Module__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Module__Group__0__Impl
+	rule__Module__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Module__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getModuleAccess().getModuleKeyword_0()); }
+
+	'module' 
+
+{ after(grammarAccess.getModuleAccess().getModuleKeyword_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Module__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Module__Group__1__Impl
+	rule__Module__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Module__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getModuleAccess().getNameAssignment_1()); }
+(rule__Module__NameAssignment_1)
+{ after(grammarAccess.getModuleAccess().getNameAssignment_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Module__Group__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Module__Group__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Module__Group__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getModuleAccess().getMachinesAssignment_2()); }
+(rule__Module__MachinesAssignment_2)*
+{ after(grammarAccess.getModuleAccess().getMachinesAssignment_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+rule__Statemachine__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Statemachine__Group__0__Impl
+	rule__Statemachine__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Statemachine__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStatemachineAccess().getInitialAssignment_0()); }
+(rule__Statemachine__InitialAssignment_0)?
+{ after(grammarAccess.getStatemachineAccess().getInitialAssignment_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Statemachine__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Statemachine__Group__1__Impl
+	rule__Statemachine__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Statemachine__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStatemachineAccess().getStatemachineKeyword_1()); }
+
+	'statemachine' 
+
+{ after(grammarAccess.getStatemachineAccess().getStatemachineKeyword_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Statemachine__Group__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Statemachine__Group__2__Impl
+	rule__Statemachine__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Statemachine__Group__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStatemachineAccess().getNameAssignment_2()); }
+(rule__Statemachine__NameAssignment_2)
+{ after(grammarAccess.getStatemachineAccess().getNameAssignment_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Statemachine__Group__3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Statemachine__Group__3__Impl
+	rule__Statemachine__Group__4
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Statemachine__Group__3__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStatemachineAccess().getGroup_3()); }
+(rule__Statemachine__Group_3__0)?
+{ after(grammarAccess.getStatemachineAccess().getGroup_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Statemachine__Group__4
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Statemachine__Group__4__Impl
+	rule__Statemachine__Group__5
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Statemachine__Group__4__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStatemachineAccess().getLeftCurlyBracketKeyword_4()); }
+
+	'{' 
+
+{ after(grammarAccess.getStatemachineAccess().getLeftCurlyBracketKeyword_4()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Statemachine__Group__5
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Statemachine__Group__5__Impl
+	rule__Statemachine__Group__6
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Statemachine__Group__5__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStatemachineAccess().getEventsKeyword_5()); }
+
+	'events' 
+
+{ after(grammarAccess.getStatemachineAccess().getEventsKeyword_5()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Statemachine__Group__6
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Statemachine__Group__6__Impl
+	rule__Statemachine__Group__7
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Statemachine__Group__6__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStatemachineAccess().getEventsAssignment_6()); }
+(rule__Statemachine__EventsAssignment_6)*
+{ after(grammarAccess.getStatemachineAccess().getEventsAssignment_6()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Statemachine__Group__7
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Statemachine__Group__7__Impl
+	rule__Statemachine__Group__8
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Statemachine__Group__7__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStatemachineAccess().getSemicolonKeyword_7()); }
+
+	';' 
+
+{ after(grammarAccess.getStatemachineAccess().getSemicolonKeyword_7()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Statemachine__Group__8
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Statemachine__Group__8__Impl
+	rule__Statemachine__Group__9
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Statemachine__Group__8__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStatemachineAccess().getStatesAssignment_8()); }
+(rule__Statemachine__StatesAssignment_8)*
+{ after(grammarAccess.getStatemachineAccess().getStatesAssignment_8()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Statemachine__Group__9
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Statemachine__Group__9__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Statemachine__Group__9__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStatemachineAccess().getRightCurlyBracketKeyword_9()); }
+
+	'}' 
+
+{ after(grammarAccess.getStatemachineAccess().getRightCurlyBracketKeyword_9()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+rule__Statemachine__Group_3__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Statemachine__Group_3__0__Impl
+	rule__Statemachine__Group_3__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Statemachine__Group_3__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStatemachineAccess().getValueKeyword_3_0()); }
+
+	'value' 
+
+{ after(grammarAccess.getStatemachineAccess().getValueKeyword_3_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Statemachine__Group_3__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Statemachine__Group_3__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Statemachine__Group_3__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStatemachineAccess().getValueAssignment_3_1()); }
+(rule__Statemachine__ValueAssignment_3_1)
+{ after(grammarAccess.getStatemachineAccess().getValueAssignment_3_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__SimpleState__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__SimpleState__Group__0__Impl
+	rule__SimpleState__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__SimpleState__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getSimpleStateAccess().getInitialAssignment_0()); }
+(rule__SimpleState__InitialAssignment_0)?
+{ after(grammarAccess.getSimpleStateAccess().getInitialAssignment_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__SimpleState__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__SimpleState__Group__1__Impl
+	rule__SimpleState__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__SimpleState__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getSimpleStateAccess().getStateKeyword_1()); }
+
+	'state' 
+
+{ after(grammarAccess.getSimpleStateAccess().getStateKeyword_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__SimpleState__Group__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__SimpleState__Group__2__Impl
+	rule__SimpleState__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__SimpleState__Group__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getSimpleStateAccess().getNameAssignment_2()); }
+(rule__SimpleState__NameAssignment_2)
+{ after(grammarAccess.getSimpleStateAccess().getNameAssignment_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__SimpleState__Group__3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__SimpleState__Group__3__Impl
+	rule__SimpleState__Group__4
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__SimpleState__Group__3__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getSimpleStateAccess().getGroup_3()); }
+(rule__SimpleState__Group_3__0)?
+{ after(grammarAccess.getSimpleStateAccess().getGroup_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__SimpleState__Group__4
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__SimpleState__Group__4__Impl
+	rule__SimpleState__Group__5
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__SimpleState__Group__4__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getSimpleStateAccess().getLeftCurlyBracketKeyword_4()); }
+
+	'{' 
+
+{ after(grammarAccess.getSimpleStateAccess().getLeftCurlyBracketKeyword_4()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__SimpleState__Group__5
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__SimpleState__Group__5__Impl
+	rule__SimpleState__Group__6
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__SimpleState__Group__5__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getSimpleStateAccess().getTransitionsAssignment_5()); }
+(rule__SimpleState__TransitionsAssignment_5)*
+{ after(grammarAccess.getSimpleStateAccess().getTransitionsAssignment_5()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__SimpleState__Group__6
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__SimpleState__Group__6__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__SimpleState__Group__6__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getSimpleStateAccess().getRightCurlyBracketKeyword_6()); }
+
+	'}' 
+
+{ after(grammarAccess.getSimpleStateAccess().getRightCurlyBracketKeyword_6()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+rule__SimpleState__Group_3__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__SimpleState__Group_3__0__Impl
+	rule__SimpleState__Group_3__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__SimpleState__Group_3__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getSimpleStateAccess().getValueKeyword_3_0()); }
+
+	'value' 
+
+{ after(grammarAccess.getSimpleStateAccess().getValueKeyword_3_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__SimpleState__Group_3__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__SimpleState__Group_3__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__SimpleState__Group_3__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getSimpleStateAccess().getValueAssignment_3_1()); }
+(rule__SimpleState__ValueAssignment_3_1)
+{ after(grammarAccess.getSimpleStateAccess().getValueAssignment_3_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__CompoundState__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__CompoundState__Group__0__Impl
+	rule__CompoundState__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CompoundState__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getCompoundStateAccess().getCompoundKeyword_0()); }
+
+	'compound' 
+
+{ after(grammarAccess.getCompoundStateAccess().getCompoundKeyword_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__CompoundState__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__CompoundState__Group__1__Impl
+	rule__CompoundState__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CompoundState__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getCompoundStateAccess().getInitialAssignment_1()); }
+(rule__CompoundState__InitialAssignment_1)?
+{ after(grammarAccess.getCompoundStateAccess().getInitialAssignment_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__CompoundState__Group__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__CompoundState__Group__2__Impl
+	rule__CompoundState__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CompoundState__Group__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getCompoundStateAccess().getStateKeyword_2()); }
+
+	'state' 
+
+{ after(grammarAccess.getCompoundStateAccess().getStateKeyword_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__CompoundState__Group__3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__CompoundState__Group__3__Impl
+	rule__CompoundState__Group__4
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CompoundState__Group__3__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getCompoundStateAccess().getNameAssignment_3()); }
+(rule__CompoundState__NameAssignment_3)
+{ after(grammarAccess.getCompoundStateAccess().getNameAssignment_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__CompoundState__Group__4
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__CompoundState__Group__4__Impl
+	rule__CompoundState__Group__5
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CompoundState__Group__4__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getCompoundStateAccess().getMachineKeyword_4()); }
+
+	'machine' 
+
+{ after(grammarAccess.getCompoundStateAccess().getMachineKeyword_4()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__CompoundState__Group__5
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__CompoundState__Group__5__Impl
+	rule__CompoundState__Group__6
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CompoundState__Group__5__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getCompoundStateAccess().getMachineAssignment_5()); }
+(rule__CompoundState__MachineAssignment_5)
+{ after(grammarAccess.getCompoundStateAccess().getMachineAssignment_5()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__CompoundState__Group__6
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__CompoundState__Group__6__Impl
+	rule__CompoundState__Group__7
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CompoundState__Group__6__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getCompoundStateAccess().getLeftCurlyBracketKeyword_6()); }
+
+	'{' 
+
+{ after(grammarAccess.getCompoundStateAccess().getLeftCurlyBracketKeyword_6()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__CompoundState__Group__7
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__CompoundState__Group__7__Impl
+	rule__CompoundState__Group__8
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CompoundState__Group__7__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getCompoundStateAccess().getTransitionsAssignment_7()); }
+(rule__CompoundState__TransitionsAssignment_7)*
+{ after(grammarAccess.getCompoundStateAccess().getTransitionsAssignment_7()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__CompoundState__Group__8
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__CompoundState__Group__8__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CompoundState__Group__8__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getCompoundStateAccess().getRightCurlyBracketKeyword_8()); }
+
+	'}' 
+
+{ after(grammarAccess.getCompoundStateAccess().getRightCurlyBracketKeyword_8()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+rule__Transition__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Transition__Group__0__Impl
+	rule__Transition__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getTransitionAccess().getEventAssignment_0()); }
+(rule__Transition__EventAssignment_0)
+{ after(grammarAccess.getTransitionAccess().getEventAssignment_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Transition__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Transition__Group__1__Impl
+	rule__Transition__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getTransitionAccess().getEqualsSignGreaterThanSignKeyword_1()); }
+
+	'=>' 
+
+{ after(grammarAccess.getTransitionAccess().getEqualsSignGreaterThanSignKeyword_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Transition__Group__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Transition__Group__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getTransitionAccess().getStateAssignment_2()); }
+(rule__Transition__StateAssignment_2)
+{ after(grammarAccess.getTransitionAccess().getStateAssignment_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+rule__Module__NameAssignment_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getModuleAccess().getNameSTRINGTerminalRuleCall_1_0()); }
+	RULE_STRING{ after(grammarAccess.getModuleAccess().getNameSTRINGTerminalRuleCall_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Module__MachinesAssignment_2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getModuleAccess().getMachinesStatemachineParserRuleCall_2_0()); }
+	ruleStatemachine{ after(grammarAccess.getModuleAccess().getMachinesStatemachineParserRuleCall_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Statemachine__InitialAssignment_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStatemachineAccess().getInitialInitialKeyword_0_0()); }
+(
+{ before(grammarAccess.getStatemachineAccess().getInitialInitialKeyword_0_0()); }
+
+	'initial' 
+
+{ after(grammarAccess.getStatemachineAccess().getInitialInitialKeyword_0_0()); }
+)
+
+{ after(grammarAccess.getStatemachineAccess().getInitialInitialKeyword_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Statemachine__NameAssignment_2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStatemachineAccess().getNameIDTerminalRuleCall_2_0()); }
+	RULE_ID{ after(grammarAccess.getStatemachineAccess().getNameIDTerminalRuleCall_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Statemachine__ValueAssignment_3_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStatemachineAccess().getValueINTTerminalRuleCall_3_1_0()); }
+	RULE_INT{ after(grammarAccess.getStatemachineAccess().getValueINTTerminalRuleCall_3_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Statemachine__EventsAssignment_6
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStatemachineAccess().getEventsEventParserRuleCall_6_0()); }
+	ruleEvent{ after(grammarAccess.getStatemachineAccess().getEventsEventParserRuleCall_6_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Statemachine__StatesAssignment_8
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStatemachineAccess().getStatesStateParserRuleCall_8_0()); }
+	ruleState{ after(grammarAccess.getStatemachineAccess().getStatesStateParserRuleCall_8_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Event__NameAssignment
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEventAccess().getNameIDTerminalRuleCall_0()); }
+	RULE_ID{ after(grammarAccess.getEventAccess().getNameIDTerminalRuleCall_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__SimpleState__InitialAssignment_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getSimpleStateAccess().getInitialInitialKeyword_0_0()); }
+(
+{ before(grammarAccess.getSimpleStateAccess().getInitialInitialKeyword_0_0()); }
+
+	'initial' 
+
+{ after(grammarAccess.getSimpleStateAccess().getInitialInitialKeyword_0_0()); }
+)
+
+{ after(grammarAccess.getSimpleStateAccess().getInitialInitialKeyword_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__SimpleState__NameAssignment_2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getSimpleStateAccess().getNameIDTerminalRuleCall_2_0()); }
+	RULE_ID{ after(grammarAccess.getSimpleStateAccess().getNameIDTerminalRuleCall_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__SimpleState__ValueAssignment_3_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getSimpleStateAccess().getValueINTTerminalRuleCall_3_1_0()); }
+	RULE_INT{ after(grammarAccess.getSimpleStateAccess().getValueINTTerminalRuleCall_3_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__SimpleState__TransitionsAssignment_5
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getSimpleStateAccess().getTransitionsTransitionParserRuleCall_5_0()); }
+	ruleTransition{ after(grammarAccess.getSimpleStateAccess().getTransitionsTransitionParserRuleCall_5_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CompoundState__InitialAssignment_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getCompoundStateAccess().getInitialInitialKeyword_1_0()); }
+(
+{ before(grammarAccess.getCompoundStateAccess().getInitialInitialKeyword_1_0()); }
+
+	'initial' 
+
+{ after(grammarAccess.getCompoundStateAccess().getInitialInitialKeyword_1_0()); }
+)
+
+{ after(grammarAccess.getCompoundStateAccess().getInitialInitialKeyword_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CompoundState__NameAssignment_3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getCompoundStateAccess().getNameIDTerminalRuleCall_3_0()); }
+	RULE_ID{ after(grammarAccess.getCompoundStateAccess().getNameIDTerminalRuleCall_3_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CompoundState__MachineAssignment_5
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getCompoundStateAccess().getMachineStatemachineCrossReference_5_0()); }
+(
+{ before(grammarAccess.getCompoundStateAccess().getMachineStatemachineIDTerminalRuleCall_5_0_1()); }
+	RULE_ID{ after(grammarAccess.getCompoundStateAccess().getMachineStatemachineIDTerminalRuleCall_5_0_1()); }
+)
+{ after(grammarAccess.getCompoundStateAccess().getMachineStatemachineCrossReference_5_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CompoundState__TransitionsAssignment_7
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getCompoundStateAccess().getTransitionsTransitionParserRuleCall_7_0()); }
+	ruleTransition{ after(grammarAccess.getCompoundStateAccess().getTransitionsTransitionParserRuleCall_7_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__EventAssignment_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getTransitionAccess().getEventEventCrossReference_0_0()); }
+(
+{ before(grammarAccess.getTransitionAccess().getEventEventIDTerminalRuleCall_0_0_1()); }
+	RULE_ID{ after(grammarAccess.getTransitionAccess().getEventEventIDTerminalRuleCall_0_0_1()); }
+)
+{ after(grammarAccess.getTransitionAccess().getEventEventCrossReference_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__StateAssignment_2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getTransitionAccess().getStateStateCrossReference_2_0()); }
+(
+{ before(grammarAccess.getTransitionAccess().getStateStateIDTerminalRuleCall_2_0_1()); }
+	RULE_ID{ after(grammarAccess.getTransitionAccess().getStateStateIDTerminalRuleCall_2_0_1()); }
+)
+{ after(grammarAccess.getTransitionAccess().getStateStateCrossReference_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+RULE_ID : '^'? ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
+
+RULE_INT : ('0'..'9')+;
+
+RULE_STRING : ('"' ('\\' ('b'|'t'|'n'|'f'|'r'|'u'|'"'|'\''|'\\')|~(('\\'|'"')))* '"'|'\'' ('\\' ('b'|'t'|'n'|'f'|'r'|'u'|'"'|'\''|'\\')|~(('\\'|'\'')))* '\'');
+
+RULE_ML_COMMENT : '/*' ( options {greedy=false;} : . )*'*/';
+
+RULE_SL_COMMENT : '//' ~(('\n'|'\r'))* ('\r'? '\n')?;
+
+RULE_WS : (' '|'\t'|'\r'|'\n')+;
+
+RULE_ANY_OTHER : .;
+
+
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.tokens b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.tokens
new file mode 100644
index 0000000..3b8877f
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.tokens
@@ -0,0 +1,31 @@
+RULE_ML_COMMENT=7
+T__12=12
+RULE_ID=5
+T__20=20
+T__13=13
+RULE_STRING=4
+T__21=21
+T__19=19
+T__14=14
+T__11=11
+T__22=22
+RULE_WS=9
+T__17=17
+RULE_INT=6
+T__16=16
+RULE_ANY_OTHER=10
+RULE_SL_COMMENT=8
+T__18=18
+T__15=15
+'statemachine'=12
+'module'=11
+'initial'=22
+'value'=17
+'compound'=19
+'events'=14
+'=>'=21
+'state'=18
+'machine'=20
+'}'=16
+';'=15
+'{'=13
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStatesLexer.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStatesLexer.java
new file mode 100644
index 0000000..ab50c40
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStatesLexer.java
@@ -0,0 +1,1183 @@
+package org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist.antlr.internal;
+
+// Hack: Use our own Lexer superclass by means of import. 
+// Currently there is no other way to specify the superclass for the lexer.
+import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.Lexer;
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+@SuppressWarnings("all")
+public class InternalOCLStatesLexer extends Lexer {
+    public static final int RULE_ML_COMMENT=7;
+    public static final int RULE_ID=5;
+    public static final int T__12=12;
+    public static final int T__20=20;
+    public static final int T__13=13;
+    public static final int RULE_STRING=4;
+    public static final int T__21=21;
+    public static final int T__19=19;
+    public static final int T__14=14;
+    public static final int T__11=11;
+    public static final int T__22=22;
+    public static final int RULE_WS=9;
+    public static final int T__17=17;
+    public static final int EOF=-1;
+    public static final int RULE_INT=6;
+    public static final int T__16=16;
+    public static final int RULE_ANY_OTHER=10;
+    public static final int RULE_SL_COMMENT=8;
+    public static final int T__18=18;
+    public static final int T__15=15;
+
+    // delegates
+    // delegators
+
+    public InternalOCLStatesLexer() {;} 
+    public InternalOCLStatesLexer(CharStream input) {
+        this(input, new RecognizerSharedState());
+    }
+    public InternalOCLStatesLexer(CharStream input, RecognizerSharedState state) {
+        super(input,state);
+
+    }
+    public String getGrammarFileName() { return "../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g"; }
+
+    // $ANTLR start "T__11"
+    public final void mT__11() throws RecognitionException {
+        try {
+            int _type = T__11;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:11:7: ( 'module' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:11:9: 'module'
+            {
+            match("module"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__11"
+
+    // $ANTLR start "T__12"
+    public final void mT__12() throws RecognitionException {
+        try {
+            int _type = T__12;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:12:7: ( 'statemachine' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:12:9: 'statemachine'
+            {
+            match("statemachine"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__12"
+
+    // $ANTLR start "T__13"
+    public final void mT__13() throws RecognitionException {
+        try {
+            int _type = T__13;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:13:7: ( '{' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:13:9: '{'
+            {
+            match('{'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__13"
+
+    // $ANTLR start "T__14"
+    public final void mT__14() throws RecognitionException {
+        try {
+            int _type = T__14;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:14:7: ( 'events' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:14:9: 'events'
+            {
+            match("events"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__14"
+
+    // $ANTLR start "T__15"
+    public final void mT__15() throws RecognitionException {
+        try {
+            int _type = T__15;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:15:7: ( ';' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:15:9: ';'
+            {
+            match(';'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__15"
+
+    // $ANTLR start "T__16"
+    public final void mT__16() throws RecognitionException {
+        try {
+            int _type = T__16;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:16:7: ( '}' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:16:9: '}'
+            {
+            match('}'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__16"
+
+    // $ANTLR start "T__17"
+    public final void mT__17() throws RecognitionException {
+        try {
+            int _type = T__17;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:17:7: ( 'value' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:17:9: 'value'
+            {
+            match("value"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__17"
+
+    // $ANTLR start "T__18"
+    public final void mT__18() throws RecognitionException {
+        try {
+            int _type = T__18;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:18:7: ( 'state' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:18:9: 'state'
+            {
+            match("state"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__18"
+
+    // $ANTLR start "T__19"
+    public final void mT__19() throws RecognitionException {
+        try {
+            int _type = T__19;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:19:7: ( 'compound' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:19:9: 'compound'
+            {
+            match("compound"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__19"
+
+    // $ANTLR start "T__20"
+    public final void mT__20() throws RecognitionException {
+        try {
+            int _type = T__20;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:20:7: ( 'machine' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:20:9: 'machine'
+            {
+            match("machine"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__20"
+
+    // $ANTLR start "T__21"
+    public final void mT__21() throws RecognitionException {
+        try {
+            int _type = T__21;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:21:7: ( '=>' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:21:9: '=>'
+            {
+            match("=>"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__21"
+
+    // $ANTLR start "T__22"
+    public final void mT__22() throws RecognitionException {
+        try {
+            int _type = T__22;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:22:7: ( 'initial' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:22:9: 'initial'
+            {
+            match("initial"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__22"
+
+    // $ANTLR start "RULE_ID"
+    public final void mRULE_ID() throws RecognitionException {
+        try {
+            int _type = RULE_ID;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1732:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1732:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1732:11: ( '^' )?
+            int alt1=2;
+            int LA1_0 = input.LA(1);
+
+            if ( (LA1_0=='^') ) {
+                alt1=1;
+            }
+            switch (alt1) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1732:11: '^'
+                    {
+                    match('^'); 
+
+                    }
+                    break;
+
+            }
+
+            if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
+                input.consume();
+
+            }
+            else {
+                MismatchedSetException mse = new MismatchedSetException(null,input);
+                recover(mse);
+                throw mse;}
+
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1732:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            loop2:
+            do {
+                int alt2=2;
+                int LA2_0 = input.LA(1);
+
+                if ( ((LA2_0>='0' && LA2_0<='9')||(LA2_0>='A' && LA2_0<='Z')||LA2_0=='_'||(LA2_0>='a' && LA2_0<='z')) ) {
+                    alt2=1;
+                }
+
+
+                switch (alt2) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:
+            	    {
+            	    if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;}
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop2;
+                }
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ID"
+
+    // $ANTLR start "RULE_INT"
+    public final void mRULE_INT() throws RecognitionException {
+        try {
+            int _type = RULE_INT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1734:10: ( ( '0' .. '9' )+ )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1734:12: ( '0' .. '9' )+
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1734:12: ( '0' .. '9' )+
+            int cnt3=0;
+            loop3:
+            do {
+                int alt3=2;
+                int LA3_0 = input.LA(1);
+
+                if ( ((LA3_0>='0' && LA3_0<='9')) ) {
+                    alt3=1;
+                }
+
+
+                switch (alt3) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1734:13: '0' .. '9'
+            	    {
+            	    matchRange('0','9'); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt3 >= 1 ) break loop3;
+                        EarlyExitException eee =
+                            new EarlyExitException(3, input);
+                        throw eee;
+                }
+                cnt3++;
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_INT"
+
+    // $ANTLR start "RULE_STRING"
+    public final void mRULE_STRING() throws RecognitionException {
+        try {
+            int _type = RULE_STRING;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1736:13: ( ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1736:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1736:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            int alt6=2;
+            int LA6_0 = input.LA(1);
+
+            if ( (LA6_0=='\"') ) {
+                alt6=1;
+            }
+            else if ( (LA6_0=='\'') ) {
+                alt6=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 6, 0, input);
+
+                throw nvae;
+            }
+            switch (alt6) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1736:16: '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
+                    {
+                    match('\"'); 
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1736:20: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )*
+                    loop4:
+                    do {
+                        int alt4=3;
+                        int LA4_0 = input.LA(1);
+
+                        if ( (LA4_0=='\\') ) {
+                            alt4=1;
+                        }
+                        else if ( ((LA4_0>='\u0000' && LA4_0<='!')||(LA4_0>='#' && LA4_0<='[')||(LA4_0>=']' && LA4_0<='\uFFFF')) ) {
+                            alt4=2;
+                        }
+
+
+                        switch (alt4) {
+                    	case 1 :
+                    	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1736:21: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' )
+                    	    {
+                    	    match('\\'); 
+                    	    if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='\\'||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||(input.LA(1)>='t' && input.LA(1)<='u') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse = new MismatchedSetException(null,input);
+                    	        recover(mse);
+                    	        throw mse;}
+
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1736:66: ~ ( ( '\\\\' | '\"' ) )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse = new MismatchedSetException(null,input);
+                    	        recover(mse);
+                    	        throw mse;}
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop4;
+                        }
+                    } while (true);
+
+                    match('\"'); 
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1736:86: '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
+                    {
+                    match('\''); 
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1736:91: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )*
+                    loop5:
+                    do {
+                        int alt5=3;
+                        int LA5_0 = input.LA(1);
+
+                        if ( (LA5_0=='\\') ) {
+                            alt5=1;
+                        }
+                        else if ( ((LA5_0>='\u0000' && LA5_0<='&')||(LA5_0>='(' && LA5_0<='[')||(LA5_0>=']' && LA5_0<='\uFFFF')) ) {
+                            alt5=2;
+                        }
+
+
+                        switch (alt5) {
+                    	case 1 :
+                    	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1736:92: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' )
+                    	    {
+                    	    match('\\'); 
+                    	    if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='\\'||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||(input.LA(1)>='t' && input.LA(1)<='u') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse = new MismatchedSetException(null,input);
+                    	        recover(mse);
+                    	        throw mse;}
+
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1736:137: ~ ( ( '\\\\' | '\\'' ) )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse = new MismatchedSetException(null,input);
+                    	        recover(mse);
+                    	        throw mse;}
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop5;
+                        }
+                    } while (true);
+
+                    match('\''); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_STRING"
+
+    // $ANTLR start "RULE_ML_COMMENT"
+    public final void mRULE_ML_COMMENT() throws RecognitionException {
+        try {
+            int _type = RULE_ML_COMMENT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1738:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1738:19: '/*' ( options {greedy=false; } : . )* '*/'
+            {
+            match("/*"); 
+
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1738:24: ( options {greedy=false; } : . )*
+            loop7:
+            do {
+                int alt7=2;
+                int LA7_0 = input.LA(1);
+
+                if ( (LA7_0=='*') ) {
+                    int LA7_1 = input.LA(2);
+
+                    if ( (LA7_1=='/') ) {
+                        alt7=2;
+                    }
+                    else if ( ((LA7_1>='\u0000' && LA7_1<='.')||(LA7_1>='0' && LA7_1<='\uFFFF')) ) {
+                        alt7=1;
+                    }
+
+
+                }
+                else if ( ((LA7_0>='\u0000' && LA7_0<=')')||(LA7_0>='+' && LA7_0<='\uFFFF')) ) {
+                    alt7=1;
+                }
+
+
+                switch (alt7) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1738:52: .
+            	    {
+            	    matchAny(); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop7;
+                }
+            } while (true);
+
+            match("*/"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ML_COMMENT"
+
+    // $ANTLR start "RULE_SL_COMMENT"
+    public final void mRULE_SL_COMMENT() throws RecognitionException {
+        try {
+            int _type = RULE_SL_COMMENT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1740:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1740:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            {
+            match("//"); 
+
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1740:24: (~ ( ( '\\n' | '\\r' ) ) )*
+            loop8:
+            do {
+                int alt8=2;
+                int LA8_0 = input.LA(1);
+
+                if ( ((LA8_0>='\u0000' && LA8_0<='\t')||(LA8_0>='\u000B' && LA8_0<='\f')||(LA8_0>='\u000E' && LA8_0<='\uFFFF')) ) {
+                    alt8=1;
+                }
+
+
+                switch (alt8) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1740:24: ~ ( ( '\\n' | '\\r' ) )
+            	    {
+            	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFF') ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;}
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop8;
+                }
+            } while (true);
+
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1740:40: ( ( '\\r' )? '\\n' )?
+            int alt10=2;
+            int LA10_0 = input.LA(1);
+
+            if ( (LA10_0=='\n'||LA10_0=='\r') ) {
+                alt10=1;
+            }
+            switch (alt10) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1740:41: ( '\\r' )? '\\n'
+                    {
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1740:41: ( '\\r' )?
+                    int alt9=2;
+                    int LA9_0 = input.LA(1);
+
+                    if ( (LA9_0=='\r') ) {
+                        alt9=1;
+                    }
+                    switch (alt9) {
+                        case 1 :
+                            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1740:41: '\\r'
+                            {
+                            match('\r'); 
+
+                            }
+                            break;
+
+                    }
+
+                    match('\n'); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_SL_COMMENT"
+
+    // $ANTLR start "RULE_WS"
+    public final void mRULE_WS() throws RecognitionException {
+        try {
+            int _type = RULE_WS;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1742:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1742:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1742:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            int cnt11=0;
+            loop11:
+            do {
+                int alt11=2;
+                int LA11_0 = input.LA(1);
+
+                if ( ((LA11_0>='\t' && LA11_0<='\n')||LA11_0=='\r'||LA11_0==' ') ) {
+                    alt11=1;
+                }
+
+
+                switch (alt11) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:
+            	    {
+            	    if ( (input.LA(1)>='\t' && input.LA(1)<='\n')||input.LA(1)=='\r'||input.LA(1)==' ' ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;}
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt11 >= 1 ) break loop11;
+                        EarlyExitException eee =
+                            new EarlyExitException(11, input);
+                        throw eee;
+                }
+                cnt11++;
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_WS"
+
+    // $ANTLR start "RULE_ANY_OTHER"
+    public final void mRULE_ANY_OTHER() throws RecognitionException {
+        try {
+            int _type = RULE_ANY_OTHER;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1744:16: ( . )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1744:18: .
+            {
+            matchAny(); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ANY_OTHER"
+
+    public void mTokens() throws RecognitionException {
+        // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1:8: ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
+        int alt12=19;
+        alt12 = dfa12.predict(input);
+        switch (alt12) {
+            case 1 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1:10: T__11
+                {
+                mT__11(); 
+
+                }
+                break;
+            case 2 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1:16: T__12
+                {
+                mT__12(); 
+
+                }
+                break;
+            case 3 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1:22: T__13
+                {
+                mT__13(); 
+
+                }
+                break;
+            case 4 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1:28: T__14
+                {
+                mT__14(); 
+
+                }
+                break;
+            case 5 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1:34: T__15
+                {
+                mT__15(); 
+
+                }
+                break;
+            case 6 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1:40: T__16
+                {
+                mT__16(); 
+
+                }
+                break;
+            case 7 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1:46: T__17
+                {
+                mT__17(); 
+
+                }
+                break;
+            case 8 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1:52: T__18
+                {
+                mT__18(); 
+
+                }
+                break;
+            case 9 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1:58: T__19
+                {
+                mT__19(); 
+
+                }
+                break;
+            case 10 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1:64: T__20
+                {
+                mT__20(); 
+
+                }
+                break;
+            case 11 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1:70: T__21
+                {
+                mT__21(); 
+
+                }
+                break;
+            case 12 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1:76: T__22
+                {
+                mT__22(); 
+
+                }
+                break;
+            case 13 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1:82: RULE_ID
+                {
+                mRULE_ID(); 
+
+                }
+                break;
+            case 14 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1:90: RULE_INT
+                {
+                mRULE_INT(); 
+
+                }
+                break;
+            case 15 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1:99: RULE_STRING
+                {
+                mRULE_STRING(); 
+
+                }
+                break;
+            case 16 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1:111: RULE_ML_COMMENT
+                {
+                mRULE_ML_COMMENT(); 
+
+                }
+                break;
+            case 17 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1:127: RULE_SL_COMMENT
+                {
+                mRULE_SL_COMMENT(); 
+
+                }
+                break;
+            case 18 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1:143: RULE_WS
+                {
+                mRULE_WS(); 
+
+                }
+                break;
+            case 19 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1:151: RULE_ANY_OTHER
+                {
+                mRULE_ANY_OTHER(); 
+
+                }
+                break;
+
+        }
+
+    }
+
+
+    protected DFA12 dfa12 = new DFA12(this);
+    static final String DFA12_eotS =
+        "\1\uffff\2\25\1\uffff\1\25\2\uffff\2\25\1\22\1\25\1\22\2\uffff"+
+        "\3\22\2\uffff\2\25\1\uffff\1\25\1\uffff\1\25\2\uffff\2\25\1\uffff"+
+        "\1\25\5\uffff\20\25\1\74\1\25\1\76\2\25\1\101\2\25\1\uffff\1\104"+
+        "\1\uffff\2\25\1\uffff\1\107\1\25\1\uffff\1\25\1\112\1\uffff\1\25"+
+        "\1\114\1\uffff\1\25\1\uffff\2\25\1\120\1\uffff";
+    static final String DFA12_eofS =
+        "\121\uffff";
+    static final String DFA12_minS =
+        "\1\0\1\141\1\164\1\uffff\1\166\2\uffff\1\141\1\157\1\76\1\156\1"+
+        "\101\2\uffff\2\0\1\52\2\uffff\1\144\1\143\1\uffff\1\141\1\uffff"+
+        "\1\145\2\uffff\1\154\1\155\1\uffff\1\151\5\uffff\1\165\1\150\1\164"+
+        "\1\156\1\165\1\160\1\164\1\154\1\151\1\145\1\164\1\145\1\157\1\151"+
+        "\1\145\1\156\1\60\1\163\1\60\1\165\1\141\1\60\1\145\1\141\1\uffff"+
+        "\1\60\1\uffff\1\156\1\154\1\uffff\1\60\1\143\1\uffff\1\144\1\60"+
+        "\1\uffff\1\150\1\60\1\uffff\1\151\1\uffff\1\156\1\145\1\60\1\uffff";
+    static final String DFA12_maxS =
+        "\1\uffff\1\157\1\164\1\uffff\1\166\2\uffff\1\141\1\157\1\76\1\156"+
+        "\1\172\2\uffff\2\uffff\1\57\2\uffff\1\144\1\143\1\uffff\1\141\1"+
+        "\uffff\1\145\2\uffff\1\154\1\155\1\uffff\1\151\5\uffff\1\165\1\150"+
+        "\1\164\1\156\1\165\1\160\1\164\1\154\1\151\1\145\1\164\1\145\1\157"+
+        "\1\151\1\145\1\156\1\172\1\163\1\172\1\165\1\141\1\172\1\145\1\141"+
+        "\1\uffff\1\172\1\uffff\1\156\1\154\1\uffff\1\172\1\143\1\uffff\1"+
+        "\144\1\172\1\uffff\1\150\1\172\1\uffff\1\151\1\uffff\1\156\1\145"+
+        "\1\172\1\uffff";
+    static final String DFA12_acceptS =
+        "\3\uffff\1\3\1\uffff\1\5\1\6\5\uffff\1\15\1\16\3\uffff\1\22\1\23"+
+        "\2\uffff\1\15\1\uffff\1\3\1\uffff\1\5\1\6\2\uffff\1\13\1\uffff\1"+
+        "\16\1\17\1\20\1\21\1\22\30\uffff\1\10\1\uffff\1\7\2\uffff\1\1\2"+
+        "\uffff\1\4\2\uffff\1\12\2\uffff\1\14\1\uffff\1\11\3\uffff\1\2";
+    static final String DFA12_specialS =
+        "\1\1\15\uffff\1\2\1\0\101\uffff}>";
+    static final String[] DFA12_transitionS = {
+            "\11\22\2\21\2\22\1\21\22\22\1\21\1\22\1\16\4\22\1\17\7\22\1"+
+            "\20\12\15\1\22\1\5\1\22\1\11\3\22\32\14\3\22\1\13\1\14\1\22"+
+            "\2\14\1\10\1\14\1\4\3\14\1\12\3\14\1\1\5\14\1\2\2\14\1\7\4\14"+
+            "\1\3\1\22\1\6\uff82\22",
+            "\1\24\15\uffff\1\23",
+            "\1\26",
+            "",
+            "\1\30",
+            "",
+            "",
+            "\1\33",
+            "\1\34",
+            "\1\35",
+            "\1\36",
+            "\32\25\4\uffff\1\25\1\uffff\32\25",
+            "",
+            "",
+            "\0\40",
+            "\0\40",
+            "\1\41\4\uffff\1\42",
+            "",
+            "",
+            "\1\44",
+            "\1\45",
+            "",
+            "\1\46",
+            "",
+            "\1\47",
+            "",
+            "",
+            "\1\50",
+            "\1\51",
+            "",
+            "\1\52",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\53",
+            "\1\54",
+            "\1\55",
+            "\1\56",
+            "\1\57",
+            "\1\60",
+            "\1\61",
+            "\1\62",
+            "\1\63",
+            "\1\64",
+            "\1\65",
+            "\1\66",
+            "\1\67",
+            "\1\70",
+            "\1\71",
+            "\1\72",
+            "\12\25\7\uffff\32\25\4\uffff\1\25\1\uffff\14\25\1\73\15\25",
+            "\1\75",
+            "\12\25\7\uffff\32\25\4\uffff\1\25\1\uffff\32\25",
+            "\1\77",
+            "\1\100",
+            "\12\25\7\uffff\32\25\4\uffff\1\25\1\uffff\32\25",
+            "\1\102",
+            "\1\103",
+            "",
+            "\12\25\7\uffff\32\25\4\uffff\1\25\1\uffff\32\25",
+            "",
+            "\1\105",
+            "\1\106",
+            "",
+            "\12\25\7\uffff\32\25\4\uffff\1\25\1\uffff\32\25",
+            "\1\110",
+            "",
+            "\1\111",
+            "\12\25\7\uffff\32\25\4\uffff\1\25\1\uffff\32\25",
+            "",
+            "\1\113",
+            "\12\25\7\uffff\32\25\4\uffff\1\25\1\uffff\32\25",
+            "",
+            "\1\115",
+            "",
+            "\1\116",
+            "\1\117",
+            "\12\25\7\uffff\32\25\4\uffff\1\25\1\uffff\32\25",
+            ""
+    };
+
+    static final short[] DFA12_eot = DFA.unpackEncodedString(DFA12_eotS);
+    static final short[] DFA12_eof = DFA.unpackEncodedString(DFA12_eofS);
+    static final char[] DFA12_min = DFA.unpackEncodedStringToUnsignedChars(DFA12_minS);
+    static final char[] DFA12_max = DFA.unpackEncodedStringToUnsignedChars(DFA12_maxS);
+    static final short[] DFA12_accept = DFA.unpackEncodedString(DFA12_acceptS);
+    static final short[] DFA12_special = DFA.unpackEncodedString(DFA12_specialS);
+    static final short[][] DFA12_transition;
+
+    static {
+        int numStates = DFA12_transitionS.length;
+        DFA12_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA12_transition[i] = DFA.unpackEncodedString(DFA12_transitionS[i]);
+        }
+    }
+
+    class DFA12 extends DFA {
+
+        public DFA12(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 12;
+            this.eot = DFA12_eot;
+            this.eof = DFA12_eof;
+            this.min = DFA12_min;
+            this.max = DFA12_max;
+            this.accept = DFA12_accept;
+            this.special = DFA12_special;
+            this.transition = DFA12_transition;
+        }
+        public String getDescription() {
+            return "1:1: Tokens : ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            IntStream input = _input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA12_15 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA12_15>='\u0000' && LA12_15<='\uFFFF')) ) {s = 32;}
+
+                        else s = 18;
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA12_0 = input.LA(1);
+
+                        s = -1;
+                        if ( (LA12_0=='m') ) {s = 1;}
+
+                        else if ( (LA12_0=='s') ) {s = 2;}
+
+                        else if ( (LA12_0=='{') ) {s = 3;}
+
+                        else if ( (LA12_0=='e') ) {s = 4;}
+
+                        else if ( (LA12_0==';') ) {s = 5;}
+
+                        else if ( (LA12_0=='}') ) {s = 6;}
+
+                        else if ( (LA12_0=='v') ) {s = 7;}
+
+                        else if ( (LA12_0=='c') ) {s = 8;}
+
+                        else if ( (LA12_0=='=') ) {s = 9;}
+
+                        else if ( (LA12_0=='i') ) {s = 10;}
+
+                        else if ( (LA12_0=='^') ) {s = 11;}
+
+                        else if ( ((LA12_0>='A' && LA12_0<='Z')||LA12_0=='_'||(LA12_0>='a' && LA12_0<='b')||LA12_0=='d'||(LA12_0>='f' && LA12_0<='h')||(LA12_0>='j' && LA12_0<='l')||(LA12_0>='n' && LA12_0<='r')||(LA12_0>='t' && LA12_0<='u')||(LA12_0>='w' && LA12_0<='z')) ) {s = 12;}
+
+                        else if ( ((LA12_0>='0' && LA12_0<='9')) ) {s = 13;}
+
+                        else if ( (LA12_0=='\"') ) {s = 14;}
+
+                        else if ( (LA12_0=='\'') ) {s = 15;}
+
+                        else if ( (LA12_0=='/') ) {s = 16;}
+
+                        else if ( ((LA12_0>='\t' && LA12_0<='\n')||LA12_0=='\r'||LA12_0==' ') ) {s = 17;}
+
+                        else if ( ((LA12_0>='\u0000' && LA12_0<='\b')||(LA12_0>='\u000B' && LA12_0<='\f')||(LA12_0>='\u000E' && LA12_0<='\u001F')||LA12_0=='!'||(LA12_0>='#' && LA12_0<='&')||(LA12_0>='(' && LA12_0<='.')||LA12_0==':'||LA12_0=='<'||(LA12_0>='>' && LA12_0<='@')||(LA12_0>='[' && LA12_0<=']')||LA12_0=='`'||LA12_0=='|'||(LA12_0>='~' && LA12_0<='\uFFFF')) ) {s = 18;}
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA12_14 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA12_14>='\u0000' && LA12_14<='\uFFFF')) ) {s = 32;}
+
+                        else s = 18;
+
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 12, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+ 
+
+}
\ No newline at end of file
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStatesParser.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStatesParser.java
new file mode 100644
index 0000000..635c012
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStatesParser.java
@@ -0,0 +1,4585 @@
+package org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist.antlr.internal; 
+
+import java.io.InputStream;
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.parser.*;
+import org.eclipse.xtext.parser.impl.*;
+import org.eclipse.xtext.parsetree.*;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.DFA;
+import org.eclipse.ocl.tutorial.eclipsecon2011.services.OCLStatesGrammarAccess;
+
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+@SuppressWarnings("all")
+public class InternalOCLStatesParser extends AbstractInternalContentAssistParser {
+    public static final String[] tokenNames = new String[] {
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_STRING", "RULE_ID", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'module'", "'statemachine'", "'{'", "'events'", "';'", "'}'", "'value'", "'state'", "'compound'", "'machine'", "'=>'", "'initial'"
+    };
+    public static final int RULE_ML_COMMENT=7;
+    public static final int T__12=12;
+    public static final int RULE_ID=5;
+    public static final int T__20=20;
+    public static final int T__13=13;
+    public static final int RULE_STRING=4;
+    public static final int T__21=21;
+    public static final int T__19=19;
+    public static final int T__14=14;
+    public static final int T__11=11;
+    public static final int T__22=22;
+    public static final int RULE_WS=9;
+    public static final int T__17=17;
+    public static final int EOF=-1;
+    public static final int RULE_INT=6;
+    public static final int T__16=16;
+    public static final int RULE_ANY_OTHER=10;
+    public static final int RULE_SL_COMMENT=8;
+    public static final int T__18=18;
+    public static final int T__15=15;
+
+    // delegates
+    // delegators
+
+
+        public InternalOCLStatesParser(TokenStream input) {
+            this(input, new RecognizerSharedState());
+        }
+        public InternalOCLStatesParser(TokenStream input, RecognizerSharedState state) {
+            super(input, state);
+             
+        }
+        
+
+    public String[] getTokenNames() { return InternalOCLStatesParser.tokenNames; }
+    public String getGrammarFileName() { return "../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g"; }
+
+
+     
+     	private OCLStatesGrammarAccess grammarAccess;
+     	
+        public void setGrammarAccess(OCLStatesGrammarAccess grammarAccess) {
+        	this.grammarAccess = grammarAccess;
+        }
+        
+        @Override
+        protected Grammar getGrammar() {
+        	return grammarAccess.getGrammar();
+        }
+        
+        @Override
+        protected String getValueForTokenName(String tokenName) {
+        	return tokenName;
+        }
+
+
+
+
+    // $ANTLR start "entryRuleModule"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:61:1: entryRuleModule : ruleModule EOF ;
+    public final void entryRuleModule() throws RecognitionException {
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:62:1: ( ruleModule EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:63:1: ruleModule EOF
+            {
+             before(grammarAccess.getModuleRule()); 
+            pushFollow(FOLLOW_ruleModule_in_entryRuleModule61);
+            ruleModule();
+
+            state._fsp--;
+
+             after(grammarAccess.getModuleRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleModule68); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleModule"
+
+
+    // $ANTLR start "ruleModule"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:70:1: ruleModule : ( ( rule__Module__Group__0 ) ) ;
+    public final void ruleModule() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:74:2: ( ( ( rule__Module__Group__0 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:75:1: ( ( rule__Module__Group__0 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:75:1: ( ( rule__Module__Group__0 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:76:1: ( rule__Module__Group__0 )
+            {
+             before(grammarAccess.getModuleAccess().getGroup()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:77:1: ( rule__Module__Group__0 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:77:2: rule__Module__Group__0
+            {
+            pushFollow(FOLLOW_rule__Module__Group__0_in_ruleModule94);
+            rule__Module__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getModuleAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleModule"
+
+
+    // $ANTLR start "entryRuleStatemachine"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:89:1: entryRuleStatemachine : ruleStatemachine EOF ;
+    public final void entryRuleStatemachine() throws RecognitionException {
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:90:1: ( ruleStatemachine EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:91:1: ruleStatemachine EOF
+            {
+             before(grammarAccess.getStatemachineRule()); 
+            pushFollow(FOLLOW_ruleStatemachine_in_entryRuleStatemachine121);
+            ruleStatemachine();
+
+            state._fsp--;
+
+             after(grammarAccess.getStatemachineRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleStatemachine128); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleStatemachine"
+
+
+    // $ANTLR start "ruleStatemachine"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:98:1: ruleStatemachine : ( ( rule__Statemachine__Group__0 ) ) ;
+    public final void ruleStatemachine() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:102:2: ( ( ( rule__Statemachine__Group__0 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:103:1: ( ( rule__Statemachine__Group__0 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:103:1: ( ( rule__Statemachine__Group__0 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:104:1: ( rule__Statemachine__Group__0 )
+            {
+             before(grammarAccess.getStatemachineAccess().getGroup()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:105:1: ( rule__Statemachine__Group__0 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:105:2: rule__Statemachine__Group__0
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group__0_in_ruleStatemachine154);
+            rule__Statemachine__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getStatemachineAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleStatemachine"
+
+
+    // $ANTLR start "entryRuleEvent"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:117:1: entryRuleEvent : ruleEvent EOF ;
+    public final void entryRuleEvent() throws RecognitionException {
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:118:1: ( ruleEvent EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:119:1: ruleEvent EOF
+            {
+             before(grammarAccess.getEventRule()); 
+            pushFollow(FOLLOW_ruleEvent_in_entryRuleEvent181);
+            ruleEvent();
+
+            state._fsp--;
+
+             after(grammarAccess.getEventRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleEvent188); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleEvent"
+
+
+    // $ANTLR start "ruleEvent"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:126:1: ruleEvent : ( ( rule__Event__NameAssignment ) ) ;
+    public final void ruleEvent() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:130:2: ( ( ( rule__Event__NameAssignment ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:131:1: ( ( rule__Event__NameAssignment ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:131:1: ( ( rule__Event__NameAssignment ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:132:1: ( rule__Event__NameAssignment )
+            {
+             before(grammarAccess.getEventAccess().getNameAssignment()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:133:1: ( rule__Event__NameAssignment )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:133:2: rule__Event__NameAssignment
+            {
+            pushFollow(FOLLOW_rule__Event__NameAssignment_in_ruleEvent214);
+            rule__Event__NameAssignment();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getEventAccess().getNameAssignment()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleEvent"
+
+
+    // $ANTLR start "entryRuleState"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:145:1: entryRuleState : ruleState EOF ;
+    public final void entryRuleState() throws RecognitionException {
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:146:1: ( ruleState EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:147:1: ruleState EOF
+            {
+             before(grammarAccess.getStateRule()); 
+            pushFollow(FOLLOW_ruleState_in_entryRuleState241);
+            ruleState();
+
+            state._fsp--;
+
+             after(grammarAccess.getStateRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleState248); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleState"
+
+
+    // $ANTLR start "ruleState"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:154:1: ruleState : ( ( rule__State__Alternatives ) ) ;
+    public final void ruleState() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:158:2: ( ( ( rule__State__Alternatives ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:159:1: ( ( rule__State__Alternatives ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:159:1: ( ( rule__State__Alternatives ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:160:1: ( rule__State__Alternatives )
+            {
+             before(grammarAccess.getStateAccess().getAlternatives()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:161:1: ( rule__State__Alternatives )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:161:2: rule__State__Alternatives
+            {
+            pushFollow(FOLLOW_rule__State__Alternatives_in_ruleState274);
+            rule__State__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getStateAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleState"
+
+
+    // $ANTLR start "entryRuleSimpleState"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:173:1: entryRuleSimpleState : ruleSimpleState EOF ;
+    public final void entryRuleSimpleState() throws RecognitionException {
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:174:1: ( ruleSimpleState EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:175:1: ruleSimpleState EOF
+            {
+             before(grammarAccess.getSimpleStateRule()); 
+            pushFollow(FOLLOW_ruleSimpleState_in_entryRuleSimpleState301);
+            ruleSimpleState();
+
+            state._fsp--;
+
+             after(grammarAccess.getSimpleStateRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleSimpleState308); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleSimpleState"
+
+
+    // $ANTLR start "ruleSimpleState"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:182:1: ruleSimpleState : ( ( rule__SimpleState__Group__0 ) ) ;
+    public final void ruleSimpleState() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:186:2: ( ( ( rule__SimpleState__Group__0 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:187:1: ( ( rule__SimpleState__Group__0 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:187:1: ( ( rule__SimpleState__Group__0 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:188:1: ( rule__SimpleState__Group__0 )
+            {
+             before(grammarAccess.getSimpleStateAccess().getGroup()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:189:1: ( rule__SimpleState__Group__0 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:189:2: rule__SimpleState__Group__0
+            {
+            pushFollow(FOLLOW_rule__SimpleState__Group__0_in_ruleSimpleState334);
+            rule__SimpleState__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getSimpleStateAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleSimpleState"
+
+
+    // $ANTLR start "entryRuleCompoundState"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:201:1: entryRuleCompoundState : ruleCompoundState EOF ;
+    public final void entryRuleCompoundState() throws RecognitionException {
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:202:1: ( ruleCompoundState EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:203:1: ruleCompoundState EOF
+            {
+             before(grammarAccess.getCompoundStateRule()); 
+            pushFollow(FOLLOW_ruleCompoundState_in_entryRuleCompoundState361);
+            ruleCompoundState();
+
+            state._fsp--;
+
+             after(grammarAccess.getCompoundStateRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleCompoundState368); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleCompoundState"
+
+
+    // $ANTLR start "ruleCompoundState"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:210:1: ruleCompoundState : ( ( rule__CompoundState__Group__0 ) ) ;
+    public final void ruleCompoundState() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:214:2: ( ( ( rule__CompoundState__Group__0 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:215:1: ( ( rule__CompoundState__Group__0 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:215:1: ( ( rule__CompoundState__Group__0 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:216:1: ( rule__CompoundState__Group__0 )
+            {
+             before(grammarAccess.getCompoundStateAccess().getGroup()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:217:1: ( rule__CompoundState__Group__0 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:217:2: rule__CompoundState__Group__0
+            {
+            pushFollow(FOLLOW_rule__CompoundState__Group__0_in_ruleCompoundState394);
+            rule__CompoundState__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getCompoundStateAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleCompoundState"
+
+
+    // $ANTLR start "entryRuleTransition"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:229:1: entryRuleTransition : ruleTransition EOF ;
+    public final void entryRuleTransition() throws RecognitionException {
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:230:1: ( ruleTransition EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:231:1: ruleTransition EOF
+            {
+             before(grammarAccess.getTransitionRule()); 
+            pushFollow(FOLLOW_ruleTransition_in_entryRuleTransition421);
+            ruleTransition();
+
+            state._fsp--;
+
+             after(grammarAccess.getTransitionRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleTransition428); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleTransition"
+
+
+    // $ANTLR start "ruleTransition"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:238:1: ruleTransition : ( ( rule__Transition__Group__0 ) ) ;
+    public final void ruleTransition() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:242:2: ( ( ( rule__Transition__Group__0 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:243:1: ( ( rule__Transition__Group__0 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:243:1: ( ( rule__Transition__Group__0 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:244:1: ( rule__Transition__Group__0 )
+            {
+             before(grammarAccess.getTransitionAccess().getGroup()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:245:1: ( rule__Transition__Group__0 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:245:2: rule__Transition__Group__0
+            {
+            pushFollow(FOLLOW_rule__Transition__Group__0_in_ruleTransition454);
+            rule__Transition__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getTransitionAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleTransition"
+
+
+    // $ANTLR start "rule__State__Alternatives"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:257:1: rule__State__Alternatives : ( ( ruleSimpleState ) | ( ruleCompoundState ) );
+    public final void rule__State__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:261:1: ( ( ruleSimpleState ) | ( ruleCompoundState ) )
+            int alt1=2;
+            int LA1_0 = input.LA(1);
+
+            if ( (LA1_0==18||LA1_0==22) ) {
+                alt1=1;
+            }
+            else if ( (LA1_0==19) ) {
+                alt1=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 1, 0, input);
+
+                throw nvae;
+            }
+            switch (alt1) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:262:1: ( ruleSimpleState )
+                    {
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:262:1: ( ruleSimpleState )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:263:1: ruleSimpleState
+                    {
+                     before(grammarAccess.getStateAccess().getSimpleStateParserRuleCall_0()); 
+                    pushFollow(FOLLOW_ruleSimpleState_in_rule__State__Alternatives490);
+                    ruleSimpleState();
+
+                    state._fsp--;
+
+                     after(grammarAccess.getStateAccess().getSimpleStateParserRuleCall_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:268:6: ( ruleCompoundState )
+                    {
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:268:6: ( ruleCompoundState )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:269:1: ruleCompoundState
+                    {
+                     before(grammarAccess.getStateAccess().getCompoundStateParserRuleCall_1()); 
+                    pushFollow(FOLLOW_ruleCompoundState_in_rule__State__Alternatives507);
+                    ruleCompoundState();
+
+                    state._fsp--;
+
+                     after(grammarAccess.getStateAccess().getCompoundStateParserRuleCall_1()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__State__Alternatives"
+
+
+    // $ANTLR start "rule__Module__Group__0"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:281:1: rule__Module__Group__0 : rule__Module__Group__0__Impl rule__Module__Group__1 ;
+    public final void rule__Module__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:285:1: ( rule__Module__Group__0__Impl rule__Module__Group__1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:286:2: rule__Module__Group__0__Impl rule__Module__Group__1
+            {
+            pushFollow(FOLLOW_rule__Module__Group__0__Impl_in_rule__Module__Group__0537);
+            rule__Module__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Module__Group__1_in_rule__Module__Group__0540);
+            rule__Module__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Module__Group__0"
+
+
+    // $ANTLR start "rule__Module__Group__0__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:293:1: rule__Module__Group__0__Impl : ( 'module' ) ;
+    public final void rule__Module__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:297:1: ( ( 'module' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:298:1: ( 'module' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:298:1: ( 'module' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:299:1: 'module'
+            {
+             before(grammarAccess.getModuleAccess().getModuleKeyword_0()); 
+            match(input,11,FOLLOW_11_in_rule__Module__Group__0__Impl568); 
+             after(grammarAccess.getModuleAccess().getModuleKeyword_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Module__Group__0__Impl"
+
+
+    // $ANTLR start "rule__Module__Group__1"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:312:1: rule__Module__Group__1 : rule__Module__Group__1__Impl rule__Module__Group__2 ;
+    public final void rule__Module__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:316:1: ( rule__Module__Group__1__Impl rule__Module__Group__2 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:317:2: rule__Module__Group__1__Impl rule__Module__Group__2
+            {
+            pushFollow(FOLLOW_rule__Module__Group__1__Impl_in_rule__Module__Group__1599);
+            rule__Module__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Module__Group__2_in_rule__Module__Group__1602);
+            rule__Module__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Module__Group__1"
+
+
+    // $ANTLR start "rule__Module__Group__1__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:324:1: rule__Module__Group__1__Impl : ( ( rule__Module__NameAssignment_1 ) ) ;
+    public final void rule__Module__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:328:1: ( ( ( rule__Module__NameAssignment_1 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:329:1: ( ( rule__Module__NameAssignment_1 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:329:1: ( ( rule__Module__NameAssignment_1 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:330:1: ( rule__Module__NameAssignment_1 )
+            {
+             before(grammarAccess.getModuleAccess().getNameAssignment_1()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:331:1: ( rule__Module__NameAssignment_1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:331:2: rule__Module__NameAssignment_1
+            {
+            pushFollow(FOLLOW_rule__Module__NameAssignment_1_in_rule__Module__Group__1__Impl629);
+            rule__Module__NameAssignment_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getModuleAccess().getNameAssignment_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Module__Group__1__Impl"
+
+
+    // $ANTLR start "rule__Module__Group__2"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:341:1: rule__Module__Group__2 : rule__Module__Group__2__Impl ;
+    public final void rule__Module__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:345:1: ( rule__Module__Group__2__Impl )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:346:2: rule__Module__Group__2__Impl
+            {
+            pushFollow(FOLLOW_rule__Module__Group__2__Impl_in_rule__Module__Group__2659);
+            rule__Module__Group__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Module__Group__2"
+
+
+    // $ANTLR start "rule__Module__Group__2__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:352:1: rule__Module__Group__2__Impl : ( ( rule__Module__MachinesAssignment_2 )* ) ;
+    public final void rule__Module__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:356:1: ( ( ( rule__Module__MachinesAssignment_2 )* ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:357:1: ( ( rule__Module__MachinesAssignment_2 )* )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:357:1: ( ( rule__Module__MachinesAssignment_2 )* )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:358:1: ( rule__Module__MachinesAssignment_2 )*
+            {
+             before(grammarAccess.getModuleAccess().getMachinesAssignment_2()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:359:1: ( rule__Module__MachinesAssignment_2 )*
+            loop2:
+            do {
+                int alt2=2;
+                int LA2_0 = input.LA(1);
+
+                if ( (LA2_0==12||LA2_0==22) ) {
+                    alt2=1;
+                }
+
+
+                switch (alt2) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:359:2: rule__Module__MachinesAssignment_2
+            	    {
+            	    pushFollow(FOLLOW_rule__Module__MachinesAssignment_2_in_rule__Module__Group__2__Impl686);
+            	    rule__Module__MachinesAssignment_2();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop2;
+                }
+            } while (true);
+
+             after(grammarAccess.getModuleAccess().getMachinesAssignment_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Module__Group__2__Impl"
+
+
+    // $ANTLR start "rule__Statemachine__Group__0"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:375:1: rule__Statemachine__Group__0 : rule__Statemachine__Group__0__Impl rule__Statemachine__Group__1 ;
+    public final void rule__Statemachine__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:379:1: ( rule__Statemachine__Group__0__Impl rule__Statemachine__Group__1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:380:2: rule__Statemachine__Group__0__Impl rule__Statemachine__Group__1
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group__0__Impl_in_rule__Statemachine__Group__0723);
+            rule__Statemachine__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Statemachine__Group__1_in_rule__Statemachine__Group__0726);
+            rule__Statemachine__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group__0"
+
+
+    // $ANTLR start "rule__Statemachine__Group__0__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:387:1: rule__Statemachine__Group__0__Impl : ( ( rule__Statemachine__InitialAssignment_0 )? ) ;
+    public final void rule__Statemachine__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:391:1: ( ( ( rule__Statemachine__InitialAssignment_0 )? ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:392:1: ( ( rule__Statemachine__InitialAssignment_0 )? )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:392:1: ( ( rule__Statemachine__InitialAssignment_0 )? )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:393:1: ( rule__Statemachine__InitialAssignment_0 )?
+            {
+             before(grammarAccess.getStatemachineAccess().getInitialAssignment_0()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:394:1: ( rule__Statemachine__InitialAssignment_0 )?
+            int alt3=2;
+            int LA3_0 = input.LA(1);
+
+            if ( (LA3_0==22) ) {
+                alt3=1;
+            }
+            switch (alt3) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:394:2: rule__Statemachine__InitialAssignment_0
+                    {
+                    pushFollow(FOLLOW_rule__Statemachine__InitialAssignment_0_in_rule__Statemachine__Group__0__Impl753);
+                    rule__Statemachine__InitialAssignment_0();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getStatemachineAccess().getInitialAssignment_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group__0__Impl"
+
+
+    // $ANTLR start "rule__Statemachine__Group__1"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:404:1: rule__Statemachine__Group__1 : rule__Statemachine__Group__1__Impl rule__Statemachine__Group__2 ;
+    public final void rule__Statemachine__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:408:1: ( rule__Statemachine__Group__1__Impl rule__Statemachine__Group__2 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:409:2: rule__Statemachine__Group__1__Impl rule__Statemachine__Group__2
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group__1__Impl_in_rule__Statemachine__Group__1784);
+            rule__Statemachine__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Statemachine__Group__2_in_rule__Statemachine__Group__1787);
+            rule__Statemachine__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group__1"
+
+
+    // $ANTLR start "rule__Statemachine__Group__1__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:416:1: rule__Statemachine__Group__1__Impl : ( 'statemachine' ) ;
+    public final void rule__Statemachine__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:420:1: ( ( 'statemachine' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:421:1: ( 'statemachine' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:421:1: ( 'statemachine' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:422:1: 'statemachine'
+            {
+             before(grammarAccess.getStatemachineAccess().getStatemachineKeyword_1()); 
+            match(input,12,FOLLOW_12_in_rule__Statemachine__Group__1__Impl815); 
+             after(grammarAccess.getStatemachineAccess().getStatemachineKeyword_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group__1__Impl"
+
+
+    // $ANTLR start "rule__Statemachine__Group__2"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:435:1: rule__Statemachine__Group__2 : rule__Statemachine__Group__2__Impl rule__Statemachine__Group__3 ;
+    public final void rule__Statemachine__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:439:1: ( rule__Statemachine__Group__2__Impl rule__Statemachine__Group__3 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:440:2: rule__Statemachine__Group__2__Impl rule__Statemachine__Group__3
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group__2__Impl_in_rule__Statemachine__Group__2846);
+            rule__Statemachine__Group__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Statemachine__Group__3_in_rule__Statemachine__Group__2849);
+            rule__Statemachine__Group__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group__2"
+
+
+    // $ANTLR start "rule__Statemachine__Group__2__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:447:1: rule__Statemachine__Group__2__Impl : ( ( rule__Statemachine__NameAssignment_2 ) ) ;
+    public final void rule__Statemachine__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:451:1: ( ( ( rule__Statemachine__NameAssignment_2 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:452:1: ( ( rule__Statemachine__NameAssignment_2 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:452:1: ( ( rule__Statemachine__NameAssignment_2 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:453:1: ( rule__Statemachine__NameAssignment_2 )
+            {
+             before(grammarAccess.getStatemachineAccess().getNameAssignment_2()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:454:1: ( rule__Statemachine__NameAssignment_2 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:454:2: rule__Statemachine__NameAssignment_2
+            {
+            pushFollow(FOLLOW_rule__Statemachine__NameAssignment_2_in_rule__Statemachine__Group__2__Impl876);
+            rule__Statemachine__NameAssignment_2();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getStatemachineAccess().getNameAssignment_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group__2__Impl"
+
+
+    // $ANTLR start "rule__Statemachine__Group__3"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:464:1: rule__Statemachine__Group__3 : rule__Statemachine__Group__3__Impl rule__Statemachine__Group__4 ;
+    public final void rule__Statemachine__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:468:1: ( rule__Statemachine__Group__3__Impl rule__Statemachine__Group__4 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:469:2: rule__Statemachine__Group__3__Impl rule__Statemachine__Group__4
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group__3__Impl_in_rule__Statemachine__Group__3906);
+            rule__Statemachine__Group__3__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Statemachine__Group__4_in_rule__Statemachine__Group__3909);
+            rule__Statemachine__Group__4();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group__3"
+
+
+    // $ANTLR start "rule__Statemachine__Group__3__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:476:1: rule__Statemachine__Group__3__Impl : ( ( rule__Statemachine__Group_3__0 )? ) ;
+    public final void rule__Statemachine__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:480:1: ( ( ( rule__Statemachine__Group_3__0 )? ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:481:1: ( ( rule__Statemachine__Group_3__0 )? )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:481:1: ( ( rule__Statemachine__Group_3__0 )? )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:482:1: ( rule__Statemachine__Group_3__0 )?
+            {
+             before(grammarAccess.getStatemachineAccess().getGroup_3()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:483:1: ( rule__Statemachine__Group_3__0 )?
+            int alt4=2;
+            int LA4_0 = input.LA(1);
+
+            if ( (LA4_0==17) ) {
+                alt4=1;
+            }
+            switch (alt4) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:483:2: rule__Statemachine__Group_3__0
+                    {
+                    pushFollow(FOLLOW_rule__Statemachine__Group_3__0_in_rule__Statemachine__Group__3__Impl936);
+                    rule__Statemachine__Group_3__0();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getStatemachineAccess().getGroup_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group__3__Impl"
+
+
+    // $ANTLR start "rule__Statemachine__Group__4"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:493:1: rule__Statemachine__Group__4 : rule__Statemachine__Group__4__Impl rule__Statemachine__Group__5 ;
+    public final void rule__Statemachine__Group__4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:497:1: ( rule__Statemachine__Group__4__Impl rule__Statemachine__Group__5 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:498:2: rule__Statemachine__Group__4__Impl rule__Statemachine__Group__5
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group__4__Impl_in_rule__Statemachine__Group__4967);
+            rule__Statemachine__Group__4__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Statemachine__Group__5_in_rule__Statemachine__Group__4970);
+            rule__Statemachine__Group__5();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group__4"
+
+
+    // $ANTLR start "rule__Statemachine__Group__4__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:505:1: rule__Statemachine__Group__4__Impl : ( '{' ) ;
+    public final void rule__Statemachine__Group__4__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:509:1: ( ( '{' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:510:1: ( '{' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:510:1: ( '{' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:511:1: '{'
+            {
+             before(grammarAccess.getStatemachineAccess().getLeftCurlyBracketKeyword_4()); 
+            match(input,13,FOLLOW_13_in_rule__Statemachine__Group__4__Impl998); 
+             after(grammarAccess.getStatemachineAccess().getLeftCurlyBracketKeyword_4()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group__4__Impl"
+
+
+    // $ANTLR start "rule__Statemachine__Group__5"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:524:1: rule__Statemachine__Group__5 : rule__Statemachine__Group__5__Impl rule__Statemachine__Group__6 ;
+    public final void rule__Statemachine__Group__5() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:528:1: ( rule__Statemachine__Group__5__Impl rule__Statemachine__Group__6 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:529:2: rule__Statemachine__Group__5__Impl rule__Statemachine__Group__6
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group__5__Impl_in_rule__Statemachine__Group__51029);
+            rule__Statemachine__Group__5__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Statemachine__Group__6_in_rule__Statemachine__Group__51032);
+            rule__Statemachine__Group__6();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group__5"
+
+
+    // $ANTLR start "rule__Statemachine__Group__5__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:536:1: rule__Statemachine__Group__5__Impl : ( 'events' ) ;
+    public final void rule__Statemachine__Group__5__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:540:1: ( ( 'events' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:541:1: ( 'events' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:541:1: ( 'events' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:542:1: 'events'
+            {
+             before(grammarAccess.getStatemachineAccess().getEventsKeyword_5()); 
+            match(input,14,FOLLOW_14_in_rule__Statemachine__Group__5__Impl1060); 
+             after(grammarAccess.getStatemachineAccess().getEventsKeyword_5()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group__5__Impl"
+
+
+    // $ANTLR start "rule__Statemachine__Group__6"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:555:1: rule__Statemachine__Group__6 : rule__Statemachine__Group__6__Impl rule__Statemachine__Group__7 ;
+    public final void rule__Statemachine__Group__6() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:559:1: ( rule__Statemachine__Group__6__Impl rule__Statemachine__Group__7 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:560:2: rule__Statemachine__Group__6__Impl rule__Statemachine__Group__7
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group__6__Impl_in_rule__Statemachine__Group__61091);
+            rule__Statemachine__Group__6__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Statemachine__Group__7_in_rule__Statemachine__Group__61094);
+            rule__Statemachine__Group__7();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group__6"
+
+
+    // $ANTLR start "rule__Statemachine__Group__6__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:567:1: rule__Statemachine__Group__6__Impl : ( ( rule__Statemachine__EventsAssignment_6 )* ) ;
+    public final void rule__Statemachine__Group__6__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:571:1: ( ( ( rule__Statemachine__EventsAssignment_6 )* ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:572:1: ( ( rule__Statemachine__EventsAssignment_6 )* )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:572:1: ( ( rule__Statemachine__EventsAssignment_6 )* )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:573:1: ( rule__Statemachine__EventsAssignment_6 )*
+            {
+             before(grammarAccess.getStatemachineAccess().getEventsAssignment_6()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:574:1: ( rule__Statemachine__EventsAssignment_6 )*
+            loop5:
+            do {
+                int alt5=2;
+                int LA5_0 = input.LA(1);
+
+                if ( (LA5_0==RULE_ID) ) {
+                    alt5=1;
+                }
+
+
+                switch (alt5) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:574:2: rule__Statemachine__EventsAssignment_6
+            	    {
+            	    pushFollow(FOLLOW_rule__Statemachine__EventsAssignment_6_in_rule__Statemachine__Group__6__Impl1121);
+            	    rule__Statemachine__EventsAssignment_6();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop5;
+                }
+            } while (true);
+
+             after(grammarAccess.getStatemachineAccess().getEventsAssignment_6()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group__6__Impl"
+
+
+    // $ANTLR start "rule__Statemachine__Group__7"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:584:1: rule__Statemachine__Group__7 : rule__Statemachine__Group__7__Impl rule__Statemachine__Group__8 ;
+    public final void rule__Statemachine__Group__7() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:588:1: ( rule__Statemachine__Group__7__Impl rule__Statemachine__Group__8 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:589:2: rule__Statemachine__Group__7__Impl rule__Statemachine__Group__8
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group__7__Impl_in_rule__Statemachine__Group__71152);
+            rule__Statemachine__Group__7__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Statemachine__Group__8_in_rule__Statemachine__Group__71155);
+            rule__Statemachine__Group__8();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group__7"
+
+
+    // $ANTLR start "rule__Statemachine__Group__7__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:596:1: rule__Statemachine__Group__7__Impl : ( ';' ) ;
+    public final void rule__Statemachine__Group__7__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:600:1: ( ( ';' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:601:1: ( ';' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:601:1: ( ';' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:602:1: ';'
+            {
+             before(grammarAccess.getStatemachineAccess().getSemicolonKeyword_7()); 
+            match(input,15,FOLLOW_15_in_rule__Statemachine__Group__7__Impl1183); 
+             after(grammarAccess.getStatemachineAccess().getSemicolonKeyword_7()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group__7__Impl"
+
+
+    // $ANTLR start "rule__Statemachine__Group__8"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:615:1: rule__Statemachine__Group__8 : rule__Statemachine__Group__8__Impl rule__Statemachine__Group__9 ;
+    public final void rule__Statemachine__Group__8() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:619:1: ( rule__Statemachine__Group__8__Impl rule__Statemachine__Group__9 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:620:2: rule__Statemachine__Group__8__Impl rule__Statemachine__Group__9
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group__8__Impl_in_rule__Statemachine__Group__81214);
+            rule__Statemachine__Group__8__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Statemachine__Group__9_in_rule__Statemachine__Group__81217);
+            rule__Statemachine__Group__9();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group__8"
+
+
+    // $ANTLR start "rule__Statemachine__Group__8__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:627:1: rule__Statemachine__Group__8__Impl : ( ( rule__Statemachine__StatesAssignment_8 )* ) ;
+    public final void rule__Statemachine__Group__8__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:631:1: ( ( ( rule__Statemachine__StatesAssignment_8 )* ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:632:1: ( ( rule__Statemachine__StatesAssignment_8 )* )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:632:1: ( ( rule__Statemachine__StatesAssignment_8 )* )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:633:1: ( rule__Statemachine__StatesAssignment_8 )*
+            {
+             before(grammarAccess.getStatemachineAccess().getStatesAssignment_8()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:634:1: ( rule__Statemachine__StatesAssignment_8 )*
+            loop6:
+            do {
+                int alt6=2;
+                int LA6_0 = input.LA(1);
+
+                if ( ((LA6_0>=18 && LA6_0<=19)||LA6_0==22) ) {
+                    alt6=1;
+                }
+
+
+                switch (alt6) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:634:2: rule__Statemachine__StatesAssignment_8
+            	    {
+            	    pushFollow(FOLLOW_rule__Statemachine__StatesAssignment_8_in_rule__Statemachine__Group__8__Impl1244);
+            	    rule__Statemachine__StatesAssignment_8();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop6;
+                }
+            } while (true);
+
+             after(grammarAccess.getStatemachineAccess().getStatesAssignment_8()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group__8__Impl"
+
+
+    // $ANTLR start "rule__Statemachine__Group__9"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:644:1: rule__Statemachine__Group__9 : rule__Statemachine__Group__9__Impl ;
+    public final void rule__Statemachine__Group__9() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:648:1: ( rule__Statemachine__Group__9__Impl )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:649:2: rule__Statemachine__Group__9__Impl
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group__9__Impl_in_rule__Statemachine__Group__91275);
+            rule__Statemachine__Group__9__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group__9"
+
+
+    // $ANTLR start "rule__Statemachine__Group__9__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:655:1: rule__Statemachine__Group__9__Impl : ( '}' ) ;
+    public final void rule__Statemachine__Group__9__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:659:1: ( ( '}' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:660:1: ( '}' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:660:1: ( '}' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:661:1: '}'
+            {
+             before(grammarAccess.getStatemachineAccess().getRightCurlyBracketKeyword_9()); 
+            match(input,16,FOLLOW_16_in_rule__Statemachine__Group__9__Impl1303); 
+             after(grammarAccess.getStatemachineAccess().getRightCurlyBracketKeyword_9()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group__9__Impl"
+
+
+    // $ANTLR start "rule__Statemachine__Group_3__0"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:694:1: rule__Statemachine__Group_3__0 : rule__Statemachine__Group_3__0__Impl rule__Statemachine__Group_3__1 ;
+    public final void rule__Statemachine__Group_3__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:698:1: ( rule__Statemachine__Group_3__0__Impl rule__Statemachine__Group_3__1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:699:2: rule__Statemachine__Group_3__0__Impl rule__Statemachine__Group_3__1
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group_3__0__Impl_in_rule__Statemachine__Group_3__01354);
+            rule__Statemachine__Group_3__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Statemachine__Group_3__1_in_rule__Statemachine__Group_3__01357);
+            rule__Statemachine__Group_3__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group_3__0"
+
+
+    // $ANTLR start "rule__Statemachine__Group_3__0__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:706:1: rule__Statemachine__Group_3__0__Impl : ( 'value' ) ;
+    public final void rule__Statemachine__Group_3__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:710:1: ( ( 'value' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:711:1: ( 'value' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:711:1: ( 'value' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:712:1: 'value'
+            {
+             before(grammarAccess.getStatemachineAccess().getValueKeyword_3_0()); 
+            match(input,17,FOLLOW_17_in_rule__Statemachine__Group_3__0__Impl1385); 
+             after(grammarAccess.getStatemachineAccess().getValueKeyword_3_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group_3__0__Impl"
+
+
+    // $ANTLR start "rule__Statemachine__Group_3__1"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:725:1: rule__Statemachine__Group_3__1 : rule__Statemachine__Group_3__1__Impl ;
+    public final void rule__Statemachine__Group_3__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:729:1: ( rule__Statemachine__Group_3__1__Impl )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:730:2: rule__Statemachine__Group_3__1__Impl
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group_3__1__Impl_in_rule__Statemachine__Group_3__11416);
+            rule__Statemachine__Group_3__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group_3__1"
+
+
+    // $ANTLR start "rule__Statemachine__Group_3__1__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:736:1: rule__Statemachine__Group_3__1__Impl : ( ( rule__Statemachine__ValueAssignment_3_1 ) ) ;
+    public final void rule__Statemachine__Group_3__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:740:1: ( ( ( rule__Statemachine__ValueAssignment_3_1 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:741:1: ( ( rule__Statemachine__ValueAssignment_3_1 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:741:1: ( ( rule__Statemachine__ValueAssignment_3_1 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:742:1: ( rule__Statemachine__ValueAssignment_3_1 )
+            {
+             before(grammarAccess.getStatemachineAccess().getValueAssignment_3_1()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:743:1: ( rule__Statemachine__ValueAssignment_3_1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:743:2: rule__Statemachine__ValueAssignment_3_1
+            {
+            pushFollow(FOLLOW_rule__Statemachine__ValueAssignment_3_1_in_rule__Statemachine__Group_3__1__Impl1443);
+            rule__Statemachine__ValueAssignment_3_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getStatemachineAccess().getValueAssignment_3_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group_3__1__Impl"
+
+
+    // $ANTLR start "rule__SimpleState__Group__0"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:757:1: rule__SimpleState__Group__0 : rule__SimpleState__Group__0__Impl rule__SimpleState__Group__1 ;
+    public final void rule__SimpleState__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:761:1: ( rule__SimpleState__Group__0__Impl rule__SimpleState__Group__1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:762:2: rule__SimpleState__Group__0__Impl rule__SimpleState__Group__1
+            {
+            pushFollow(FOLLOW_rule__SimpleState__Group__0__Impl_in_rule__SimpleState__Group__01477);
+            rule__SimpleState__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__SimpleState__Group__1_in_rule__SimpleState__Group__01480);
+            rule__SimpleState__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__Group__0"
+
+
+    // $ANTLR start "rule__SimpleState__Group__0__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:769:1: rule__SimpleState__Group__0__Impl : ( ( rule__SimpleState__InitialAssignment_0 )? ) ;
+    public final void rule__SimpleState__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:773:1: ( ( ( rule__SimpleState__InitialAssignment_0 )? ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:774:1: ( ( rule__SimpleState__InitialAssignment_0 )? )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:774:1: ( ( rule__SimpleState__InitialAssignment_0 )? )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:775:1: ( rule__SimpleState__InitialAssignment_0 )?
+            {
+             before(grammarAccess.getSimpleStateAccess().getInitialAssignment_0()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:776:1: ( rule__SimpleState__InitialAssignment_0 )?
+            int alt7=2;
+            int LA7_0 = input.LA(1);
+
+            if ( (LA7_0==22) ) {
+                alt7=1;
+            }
+            switch (alt7) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:776:2: rule__SimpleState__InitialAssignment_0
+                    {
+                    pushFollow(FOLLOW_rule__SimpleState__InitialAssignment_0_in_rule__SimpleState__Group__0__Impl1507);
+                    rule__SimpleState__InitialAssignment_0();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getSimpleStateAccess().getInitialAssignment_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__Group__0__Impl"
+
+
+    // $ANTLR start "rule__SimpleState__Group__1"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:786:1: rule__SimpleState__Group__1 : rule__SimpleState__Group__1__Impl rule__SimpleState__Group__2 ;
+    public final void rule__SimpleState__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:790:1: ( rule__SimpleState__Group__1__Impl rule__SimpleState__Group__2 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:791:2: rule__SimpleState__Group__1__Impl rule__SimpleState__Group__2
+            {
+            pushFollow(FOLLOW_rule__SimpleState__Group__1__Impl_in_rule__SimpleState__Group__11538);
+            rule__SimpleState__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__SimpleState__Group__2_in_rule__SimpleState__Group__11541);
+            rule__SimpleState__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__Group__1"
+
+
+    // $ANTLR start "rule__SimpleState__Group__1__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:798:1: rule__SimpleState__Group__1__Impl : ( 'state' ) ;
+    public final void rule__SimpleState__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:802:1: ( ( 'state' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:803:1: ( 'state' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:803:1: ( 'state' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:804:1: 'state'
+            {
+             before(grammarAccess.getSimpleStateAccess().getStateKeyword_1()); 
+            match(input,18,FOLLOW_18_in_rule__SimpleState__Group__1__Impl1569); 
+             after(grammarAccess.getSimpleStateAccess().getStateKeyword_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__Group__1__Impl"
+
+
+    // $ANTLR start "rule__SimpleState__Group__2"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:817:1: rule__SimpleState__Group__2 : rule__SimpleState__Group__2__Impl rule__SimpleState__Group__3 ;
+    public final void rule__SimpleState__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:821:1: ( rule__SimpleState__Group__2__Impl rule__SimpleState__Group__3 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:822:2: rule__SimpleState__Group__2__Impl rule__SimpleState__Group__3
+            {
+            pushFollow(FOLLOW_rule__SimpleState__Group__2__Impl_in_rule__SimpleState__Group__21600);
+            rule__SimpleState__Group__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__SimpleState__Group__3_in_rule__SimpleState__Group__21603);
+            rule__SimpleState__Group__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__Group__2"
+
+
+    // $ANTLR start "rule__SimpleState__Group__2__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:829:1: rule__SimpleState__Group__2__Impl : ( ( rule__SimpleState__NameAssignment_2 ) ) ;
+    public final void rule__SimpleState__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:833:1: ( ( ( rule__SimpleState__NameAssignment_2 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:834:1: ( ( rule__SimpleState__NameAssignment_2 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:834:1: ( ( rule__SimpleState__NameAssignment_2 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:835:1: ( rule__SimpleState__NameAssignment_2 )
+            {
+             before(grammarAccess.getSimpleStateAccess().getNameAssignment_2()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:836:1: ( rule__SimpleState__NameAssignment_2 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:836:2: rule__SimpleState__NameAssignment_2
+            {
+            pushFollow(FOLLOW_rule__SimpleState__NameAssignment_2_in_rule__SimpleState__Group__2__Impl1630);
+            rule__SimpleState__NameAssignment_2();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getSimpleStateAccess().getNameAssignment_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__Group__2__Impl"
+
+
+    // $ANTLR start "rule__SimpleState__Group__3"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:846:1: rule__SimpleState__Group__3 : rule__SimpleState__Group__3__Impl rule__SimpleState__Group__4 ;
+    public final void rule__SimpleState__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:850:1: ( rule__SimpleState__Group__3__Impl rule__SimpleState__Group__4 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:851:2: rule__SimpleState__Group__3__Impl rule__SimpleState__Group__4
+            {
+            pushFollow(FOLLOW_rule__SimpleState__Group__3__Impl_in_rule__SimpleState__Group__31660);
+            rule__SimpleState__Group__3__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__SimpleState__Group__4_in_rule__SimpleState__Group__31663);
+            rule__SimpleState__Group__4();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__Group__3"
+
+
+    // $ANTLR start "rule__SimpleState__Group__3__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:858:1: rule__SimpleState__Group__3__Impl : ( ( rule__SimpleState__Group_3__0 )? ) ;
+    public final void rule__SimpleState__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:862:1: ( ( ( rule__SimpleState__Group_3__0 )? ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:863:1: ( ( rule__SimpleState__Group_3__0 )? )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:863:1: ( ( rule__SimpleState__Group_3__0 )? )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:864:1: ( rule__SimpleState__Group_3__0 )?
+            {
+             before(grammarAccess.getSimpleStateAccess().getGroup_3()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:865:1: ( rule__SimpleState__Group_3__0 )?
+            int alt8=2;
+            int LA8_0 = input.LA(1);
+
+            if ( (LA8_0==17) ) {
+                alt8=1;
+            }
+            switch (alt8) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:865:2: rule__SimpleState__Group_3__0
+                    {
+                    pushFollow(FOLLOW_rule__SimpleState__Group_3__0_in_rule__SimpleState__Group__3__Impl1690);
+                    rule__SimpleState__Group_3__0();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getSimpleStateAccess().getGroup_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__Group__3__Impl"
+
+
+    // $ANTLR start "rule__SimpleState__Group__4"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:875:1: rule__SimpleState__Group__4 : rule__SimpleState__Group__4__Impl rule__SimpleState__Group__5 ;
+    public final void rule__SimpleState__Group__4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:879:1: ( rule__SimpleState__Group__4__Impl rule__SimpleState__Group__5 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:880:2: rule__SimpleState__Group__4__Impl rule__SimpleState__Group__5
+            {
+            pushFollow(FOLLOW_rule__SimpleState__Group__4__Impl_in_rule__SimpleState__Group__41721);
+            rule__SimpleState__Group__4__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__SimpleState__Group__5_in_rule__SimpleState__Group__41724);
+            rule__SimpleState__Group__5();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__Group__4"
+
+
+    // $ANTLR start "rule__SimpleState__Group__4__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:887:1: rule__SimpleState__Group__4__Impl : ( '{' ) ;
+    public final void rule__SimpleState__Group__4__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:891:1: ( ( '{' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:892:1: ( '{' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:892:1: ( '{' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:893:1: '{'
+            {
+             before(grammarAccess.getSimpleStateAccess().getLeftCurlyBracketKeyword_4()); 
+            match(input,13,FOLLOW_13_in_rule__SimpleState__Group__4__Impl1752); 
+             after(grammarAccess.getSimpleStateAccess().getLeftCurlyBracketKeyword_4()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__Group__4__Impl"
+
+
+    // $ANTLR start "rule__SimpleState__Group__5"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:906:1: rule__SimpleState__Group__5 : rule__SimpleState__Group__5__Impl rule__SimpleState__Group__6 ;
+    public final void rule__SimpleState__Group__5() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:910:1: ( rule__SimpleState__Group__5__Impl rule__SimpleState__Group__6 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:911:2: rule__SimpleState__Group__5__Impl rule__SimpleState__Group__6
+            {
+            pushFollow(FOLLOW_rule__SimpleState__Group__5__Impl_in_rule__SimpleState__Group__51783);
+            rule__SimpleState__Group__5__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__SimpleState__Group__6_in_rule__SimpleState__Group__51786);
+            rule__SimpleState__Group__6();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__Group__5"
+
+
+    // $ANTLR start "rule__SimpleState__Group__5__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:918:1: rule__SimpleState__Group__5__Impl : ( ( rule__SimpleState__TransitionsAssignment_5 )* ) ;
+    public final void rule__SimpleState__Group__5__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:922:1: ( ( ( rule__SimpleState__TransitionsAssignment_5 )* ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:923:1: ( ( rule__SimpleState__TransitionsAssignment_5 )* )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:923:1: ( ( rule__SimpleState__TransitionsAssignment_5 )* )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:924:1: ( rule__SimpleState__TransitionsAssignment_5 )*
+            {
+             before(grammarAccess.getSimpleStateAccess().getTransitionsAssignment_5()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:925:1: ( rule__SimpleState__TransitionsAssignment_5 )*
+            loop9:
+            do {
+                int alt9=2;
+                int LA9_0 = input.LA(1);
+
+                if ( (LA9_0==RULE_ID) ) {
+                    alt9=1;
+                }
+
+
+                switch (alt9) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:925:2: rule__SimpleState__TransitionsAssignment_5
+            	    {
+            	    pushFollow(FOLLOW_rule__SimpleState__TransitionsAssignment_5_in_rule__SimpleState__Group__5__Impl1813);
+            	    rule__SimpleState__TransitionsAssignment_5();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop9;
+                }
+            } while (true);
+
+             after(grammarAccess.getSimpleStateAccess().getTransitionsAssignment_5()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__Group__5__Impl"
+
+
+    // $ANTLR start "rule__SimpleState__Group__6"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:935:1: rule__SimpleState__Group__6 : rule__SimpleState__Group__6__Impl ;
+    public final void rule__SimpleState__Group__6() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:939:1: ( rule__SimpleState__Group__6__Impl )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:940:2: rule__SimpleState__Group__6__Impl
+            {
+            pushFollow(FOLLOW_rule__SimpleState__Group__6__Impl_in_rule__SimpleState__Group__61844);
+            rule__SimpleState__Group__6__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__Group__6"
+
+
+    // $ANTLR start "rule__SimpleState__Group__6__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:946:1: rule__SimpleState__Group__6__Impl : ( '}' ) ;
+    public final void rule__SimpleState__Group__6__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:950:1: ( ( '}' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:951:1: ( '}' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:951:1: ( '}' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:952:1: '}'
+            {
+             before(grammarAccess.getSimpleStateAccess().getRightCurlyBracketKeyword_6()); 
+            match(input,16,FOLLOW_16_in_rule__SimpleState__Group__6__Impl1872); 
+             after(grammarAccess.getSimpleStateAccess().getRightCurlyBracketKeyword_6()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__Group__6__Impl"
+
+
+    // $ANTLR start "rule__SimpleState__Group_3__0"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:979:1: rule__SimpleState__Group_3__0 : rule__SimpleState__Group_3__0__Impl rule__SimpleState__Group_3__1 ;
+    public final void rule__SimpleState__Group_3__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:983:1: ( rule__SimpleState__Group_3__0__Impl rule__SimpleState__Group_3__1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:984:2: rule__SimpleState__Group_3__0__Impl rule__SimpleState__Group_3__1
+            {
+            pushFollow(FOLLOW_rule__SimpleState__Group_3__0__Impl_in_rule__SimpleState__Group_3__01917);
+            rule__SimpleState__Group_3__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__SimpleState__Group_3__1_in_rule__SimpleState__Group_3__01920);
+            rule__SimpleState__Group_3__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__Group_3__0"
+
+
+    // $ANTLR start "rule__SimpleState__Group_3__0__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:991:1: rule__SimpleState__Group_3__0__Impl : ( 'value' ) ;
+    public final void rule__SimpleState__Group_3__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:995:1: ( ( 'value' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:996:1: ( 'value' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:996:1: ( 'value' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:997:1: 'value'
+            {
+             before(grammarAccess.getSimpleStateAccess().getValueKeyword_3_0()); 
+            match(input,17,FOLLOW_17_in_rule__SimpleState__Group_3__0__Impl1948); 
+             after(grammarAccess.getSimpleStateAccess().getValueKeyword_3_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__Group_3__0__Impl"
+
+
+    // $ANTLR start "rule__SimpleState__Group_3__1"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1010:1: rule__SimpleState__Group_3__1 : rule__SimpleState__Group_3__1__Impl ;
+    public final void rule__SimpleState__Group_3__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1014:1: ( rule__SimpleState__Group_3__1__Impl )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1015:2: rule__SimpleState__Group_3__1__Impl
+            {
+            pushFollow(FOLLOW_rule__SimpleState__Group_3__1__Impl_in_rule__SimpleState__Group_3__11979);
+            rule__SimpleState__Group_3__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__Group_3__1"
+
+
+    // $ANTLR start "rule__SimpleState__Group_3__1__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1021:1: rule__SimpleState__Group_3__1__Impl : ( ( rule__SimpleState__ValueAssignment_3_1 ) ) ;
+    public final void rule__SimpleState__Group_3__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1025:1: ( ( ( rule__SimpleState__ValueAssignment_3_1 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1026:1: ( ( rule__SimpleState__ValueAssignment_3_1 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1026:1: ( ( rule__SimpleState__ValueAssignment_3_1 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1027:1: ( rule__SimpleState__ValueAssignment_3_1 )
+            {
+             before(grammarAccess.getSimpleStateAccess().getValueAssignment_3_1()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1028:1: ( rule__SimpleState__ValueAssignment_3_1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1028:2: rule__SimpleState__ValueAssignment_3_1
+            {
+            pushFollow(FOLLOW_rule__SimpleState__ValueAssignment_3_1_in_rule__SimpleState__Group_3__1__Impl2006);
+            rule__SimpleState__ValueAssignment_3_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getSimpleStateAccess().getValueAssignment_3_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__Group_3__1__Impl"
+
+
+    // $ANTLR start "rule__CompoundState__Group__0"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1042:1: rule__CompoundState__Group__0 : rule__CompoundState__Group__0__Impl rule__CompoundState__Group__1 ;
+    public final void rule__CompoundState__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1046:1: ( rule__CompoundState__Group__0__Impl rule__CompoundState__Group__1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1047:2: rule__CompoundState__Group__0__Impl rule__CompoundState__Group__1
+            {
+            pushFollow(FOLLOW_rule__CompoundState__Group__0__Impl_in_rule__CompoundState__Group__02040);
+            rule__CompoundState__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__CompoundState__Group__1_in_rule__CompoundState__Group__02043);
+            rule__CompoundState__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__Group__0"
+
+
+    // $ANTLR start "rule__CompoundState__Group__0__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1054:1: rule__CompoundState__Group__0__Impl : ( 'compound' ) ;
+    public final void rule__CompoundState__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1058:1: ( ( 'compound' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1059:1: ( 'compound' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1059:1: ( 'compound' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1060:1: 'compound'
+            {
+             before(grammarAccess.getCompoundStateAccess().getCompoundKeyword_0()); 
+            match(input,19,FOLLOW_19_in_rule__CompoundState__Group__0__Impl2071); 
+             after(grammarAccess.getCompoundStateAccess().getCompoundKeyword_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__Group__0__Impl"
+
+
+    // $ANTLR start "rule__CompoundState__Group__1"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1073:1: rule__CompoundState__Group__1 : rule__CompoundState__Group__1__Impl rule__CompoundState__Group__2 ;
+    public final void rule__CompoundState__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1077:1: ( rule__CompoundState__Group__1__Impl rule__CompoundState__Group__2 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1078:2: rule__CompoundState__Group__1__Impl rule__CompoundState__Group__2
+            {
+            pushFollow(FOLLOW_rule__CompoundState__Group__1__Impl_in_rule__CompoundState__Group__12102);
+            rule__CompoundState__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__CompoundState__Group__2_in_rule__CompoundState__Group__12105);
+            rule__CompoundState__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__Group__1"
+
+
+    // $ANTLR start "rule__CompoundState__Group__1__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1085:1: rule__CompoundState__Group__1__Impl : ( ( rule__CompoundState__InitialAssignment_1 )? ) ;
+    public final void rule__CompoundState__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1089:1: ( ( ( rule__CompoundState__InitialAssignment_1 )? ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1090:1: ( ( rule__CompoundState__InitialAssignment_1 )? )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1090:1: ( ( rule__CompoundState__InitialAssignment_1 )? )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1091:1: ( rule__CompoundState__InitialAssignment_1 )?
+            {
+             before(grammarAccess.getCompoundStateAccess().getInitialAssignment_1()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1092:1: ( rule__CompoundState__InitialAssignment_1 )?
+            int alt10=2;
+            int LA10_0 = input.LA(1);
+
+            if ( (LA10_0==22) ) {
+                alt10=1;
+            }
+            switch (alt10) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1092:2: rule__CompoundState__InitialAssignment_1
+                    {
+                    pushFollow(FOLLOW_rule__CompoundState__InitialAssignment_1_in_rule__CompoundState__Group__1__Impl2132);
+                    rule__CompoundState__InitialAssignment_1();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getCompoundStateAccess().getInitialAssignment_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__Group__1__Impl"
+
+
+    // $ANTLR start "rule__CompoundState__Group__2"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1102:1: rule__CompoundState__Group__2 : rule__CompoundState__Group__2__Impl rule__CompoundState__Group__3 ;
+    public final void rule__CompoundState__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1106:1: ( rule__CompoundState__Group__2__Impl rule__CompoundState__Group__3 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1107:2: rule__CompoundState__Group__2__Impl rule__CompoundState__Group__3
+            {
+            pushFollow(FOLLOW_rule__CompoundState__Group__2__Impl_in_rule__CompoundState__Group__22163);
+            rule__CompoundState__Group__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__CompoundState__Group__3_in_rule__CompoundState__Group__22166);
+            rule__CompoundState__Group__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__Group__2"
+
+
+    // $ANTLR start "rule__CompoundState__Group__2__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1114:1: rule__CompoundState__Group__2__Impl : ( 'state' ) ;
+    public final void rule__CompoundState__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1118:1: ( ( 'state' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1119:1: ( 'state' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1119:1: ( 'state' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1120:1: 'state'
+            {
+             before(grammarAccess.getCompoundStateAccess().getStateKeyword_2()); 
+            match(input,18,FOLLOW_18_in_rule__CompoundState__Group__2__Impl2194); 
+             after(grammarAccess.getCompoundStateAccess().getStateKeyword_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__Group__2__Impl"
+
+
+    // $ANTLR start "rule__CompoundState__Group__3"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1133:1: rule__CompoundState__Group__3 : rule__CompoundState__Group__3__Impl rule__CompoundState__Group__4 ;
+    public final void rule__CompoundState__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1137:1: ( rule__CompoundState__Group__3__Impl rule__CompoundState__Group__4 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1138:2: rule__CompoundState__Group__3__Impl rule__CompoundState__Group__4
+            {
+            pushFollow(FOLLOW_rule__CompoundState__Group__3__Impl_in_rule__CompoundState__Group__32225);
+            rule__CompoundState__Group__3__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__CompoundState__Group__4_in_rule__CompoundState__Group__32228);
+            rule__CompoundState__Group__4();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__Group__3"
+
+
+    // $ANTLR start "rule__CompoundState__Group__3__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1145:1: rule__CompoundState__Group__3__Impl : ( ( rule__CompoundState__NameAssignment_3 ) ) ;
+    public final void rule__CompoundState__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1149:1: ( ( ( rule__CompoundState__NameAssignment_3 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1150:1: ( ( rule__CompoundState__NameAssignment_3 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1150:1: ( ( rule__CompoundState__NameAssignment_3 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1151:1: ( rule__CompoundState__NameAssignment_3 )
+            {
+             before(grammarAccess.getCompoundStateAccess().getNameAssignment_3()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1152:1: ( rule__CompoundState__NameAssignment_3 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1152:2: rule__CompoundState__NameAssignment_3
+            {
+            pushFollow(FOLLOW_rule__CompoundState__NameAssignment_3_in_rule__CompoundState__Group__3__Impl2255);
+            rule__CompoundState__NameAssignment_3();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getCompoundStateAccess().getNameAssignment_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__Group__3__Impl"
+
+
+    // $ANTLR start "rule__CompoundState__Group__4"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1162:1: rule__CompoundState__Group__4 : rule__CompoundState__Group__4__Impl rule__CompoundState__Group__5 ;
+    public final void rule__CompoundState__Group__4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1166:1: ( rule__CompoundState__Group__4__Impl rule__CompoundState__Group__5 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1167:2: rule__CompoundState__Group__4__Impl rule__CompoundState__Group__5
+            {
+            pushFollow(FOLLOW_rule__CompoundState__Group__4__Impl_in_rule__CompoundState__Group__42285);
+            rule__CompoundState__Group__4__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__CompoundState__Group__5_in_rule__CompoundState__Group__42288);
+            rule__CompoundState__Group__5();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__Group__4"
+
+
+    // $ANTLR start "rule__CompoundState__Group__4__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1174:1: rule__CompoundState__Group__4__Impl : ( 'machine' ) ;
+    public final void rule__CompoundState__Group__4__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1178:1: ( ( 'machine' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1179:1: ( 'machine' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1179:1: ( 'machine' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1180:1: 'machine'
+            {
+             before(grammarAccess.getCompoundStateAccess().getMachineKeyword_4()); 
+            match(input,20,FOLLOW_20_in_rule__CompoundState__Group__4__Impl2316); 
+             after(grammarAccess.getCompoundStateAccess().getMachineKeyword_4()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__Group__4__Impl"
+
+
+    // $ANTLR start "rule__CompoundState__Group__5"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1193:1: rule__CompoundState__Group__5 : rule__CompoundState__Group__5__Impl rule__CompoundState__Group__6 ;
+    public final void rule__CompoundState__Group__5() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1197:1: ( rule__CompoundState__Group__5__Impl rule__CompoundState__Group__6 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1198:2: rule__CompoundState__Group__5__Impl rule__CompoundState__Group__6
+            {
+            pushFollow(FOLLOW_rule__CompoundState__Group__5__Impl_in_rule__CompoundState__Group__52347);
+            rule__CompoundState__Group__5__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__CompoundState__Group__6_in_rule__CompoundState__Group__52350);
+            rule__CompoundState__Group__6();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__Group__5"
+
+
+    // $ANTLR start "rule__CompoundState__Group__5__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1205:1: rule__CompoundState__Group__5__Impl : ( ( rule__CompoundState__MachineAssignment_5 ) ) ;
+    public final void rule__CompoundState__Group__5__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1209:1: ( ( ( rule__CompoundState__MachineAssignment_5 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1210:1: ( ( rule__CompoundState__MachineAssignment_5 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1210:1: ( ( rule__CompoundState__MachineAssignment_5 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1211:1: ( rule__CompoundState__MachineAssignment_5 )
+            {
+             before(grammarAccess.getCompoundStateAccess().getMachineAssignment_5()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1212:1: ( rule__CompoundState__MachineAssignment_5 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1212:2: rule__CompoundState__MachineAssignment_5
+            {
+            pushFollow(FOLLOW_rule__CompoundState__MachineAssignment_5_in_rule__CompoundState__Group__5__Impl2377);
+            rule__CompoundState__MachineAssignment_5();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getCompoundStateAccess().getMachineAssignment_5()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__Group__5__Impl"
+
+
+    // $ANTLR start "rule__CompoundState__Group__6"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1222:1: rule__CompoundState__Group__6 : rule__CompoundState__Group__6__Impl rule__CompoundState__Group__7 ;
+    public final void rule__CompoundState__Group__6() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1226:1: ( rule__CompoundState__Group__6__Impl rule__CompoundState__Group__7 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1227:2: rule__CompoundState__Group__6__Impl rule__CompoundState__Group__7
+            {
+            pushFollow(FOLLOW_rule__CompoundState__Group__6__Impl_in_rule__CompoundState__Group__62407);
+            rule__CompoundState__Group__6__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__CompoundState__Group__7_in_rule__CompoundState__Group__62410);
+            rule__CompoundState__Group__7();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__Group__6"
+
+
+    // $ANTLR start "rule__CompoundState__Group__6__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1234:1: rule__CompoundState__Group__6__Impl : ( '{' ) ;
+    public final void rule__CompoundState__Group__6__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1238:1: ( ( '{' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1239:1: ( '{' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1239:1: ( '{' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1240:1: '{'
+            {
+             before(grammarAccess.getCompoundStateAccess().getLeftCurlyBracketKeyword_6()); 
+            match(input,13,FOLLOW_13_in_rule__CompoundState__Group__6__Impl2438); 
+             after(grammarAccess.getCompoundStateAccess().getLeftCurlyBracketKeyword_6()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__Group__6__Impl"
+
+
+    // $ANTLR start "rule__CompoundState__Group__7"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1253:1: rule__CompoundState__Group__7 : rule__CompoundState__Group__7__Impl rule__CompoundState__Group__8 ;
+    public final void rule__CompoundState__Group__7() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1257:1: ( rule__CompoundState__Group__7__Impl rule__CompoundState__Group__8 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1258:2: rule__CompoundState__Group__7__Impl rule__CompoundState__Group__8
+            {
+            pushFollow(FOLLOW_rule__CompoundState__Group__7__Impl_in_rule__CompoundState__Group__72469);
+            rule__CompoundState__Group__7__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__CompoundState__Group__8_in_rule__CompoundState__Group__72472);
+            rule__CompoundState__Group__8();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__Group__7"
+
+
+    // $ANTLR start "rule__CompoundState__Group__7__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1265:1: rule__CompoundState__Group__7__Impl : ( ( rule__CompoundState__TransitionsAssignment_7 )* ) ;
+    public final void rule__CompoundState__Group__7__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1269:1: ( ( ( rule__CompoundState__TransitionsAssignment_7 )* ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1270:1: ( ( rule__CompoundState__TransitionsAssignment_7 )* )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1270:1: ( ( rule__CompoundState__TransitionsAssignment_7 )* )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1271:1: ( rule__CompoundState__TransitionsAssignment_7 )*
+            {
+             before(grammarAccess.getCompoundStateAccess().getTransitionsAssignment_7()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1272:1: ( rule__CompoundState__TransitionsAssignment_7 )*
+            loop11:
+            do {
+                int alt11=2;
+                int LA11_0 = input.LA(1);
+
+                if ( (LA11_0==RULE_ID) ) {
+                    alt11=1;
+                }
+
+
+                switch (alt11) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1272:2: rule__CompoundState__TransitionsAssignment_7
+            	    {
+            	    pushFollow(FOLLOW_rule__CompoundState__TransitionsAssignment_7_in_rule__CompoundState__Group__7__Impl2499);
+            	    rule__CompoundState__TransitionsAssignment_7();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop11;
+                }
+            } while (true);
+
+             after(grammarAccess.getCompoundStateAccess().getTransitionsAssignment_7()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__Group__7__Impl"
+
+
+    // $ANTLR start "rule__CompoundState__Group__8"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1282:1: rule__CompoundState__Group__8 : rule__CompoundState__Group__8__Impl ;
+    public final void rule__CompoundState__Group__8() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1286:1: ( rule__CompoundState__Group__8__Impl )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1287:2: rule__CompoundState__Group__8__Impl
+            {
+            pushFollow(FOLLOW_rule__CompoundState__Group__8__Impl_in_rule__CompoundState__Group__82530);
+            rule__CompoundState__Group__8__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__Group__8"
+
+
+    // $ANTLR start "rule__CompoundState__Group__8__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1293:1: rule__CompoundState__Group__8__Impl : ( '}' ) ;
+    public final void rule__CompoundState__Group__8__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1297:1: ( ( '}' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1298:1: ( '}' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1298:1: ( '}' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1299:1: '}'
+            {
+             before(grammarAccess.getCompoundStateAccess().getRightCurlyBracketKeyword_8()); 
+            match(input,16,FOLLOW_16_in_rule__CompoundState__Group__8__Impl2558); 
+             after(grammarAccess.getCompoundStateAccess().getRightCurlyBracketKeyword_8()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__Group__8__Impl"
+
+
+    // $ANTLR start "rule__Transition__Group__0"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1330:1: rule__Transition__Group__0 : rule__Transition__Group__0__Impl rule__Transition__Group__1 ;
+    public final void rule__Transition__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1334:1: ( rule__Transition__Group__0__Impl rule__Transition__Group__1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1335:2: rule__Transition__Group__0__Impl rule__Transition__Group__1
+            {
+            pushFollow(FOLLOW_rule__Transition__Group__0__Impl_in_rule__Transition__Group__02607);
+            rule__Transition__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Transition__Group__1_in_rule__Transition__Group__02610);
+            rule__Transition__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group__0"
+
+
+    // $ANTLR start "rule__Transition__Group__0__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1342:1: rule__Transition__Group__0__Impl : ( ( rule__Transition__EventAssignment_0 ) ) ;
+    public final void rule__Transition__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1346:1: ( ( ( rule__Transition__EventAssignment_0 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1347:1: ( ( rule__Transition__EventAssignment_0 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1347:1: ( ( rule__Transition__EventAssignment_0 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1348:1: ( rule__Transition__EventAssignment_0 )
+            {
+             before(grammarAccess.getTransitionAccess().getEventAssignment_0()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1349:1: ( rule__Transition__EventAssignment_0 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1349:2: rule__Transition__EventAssignment_0
+            {
+            pushFollow(FOLLOW_rule__Transition__EventAssignment_0_in_rule__Transition__Group__0__Impl2637);
+            rule__Transition__EventAssignment_0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getTransitionAccess().getEventAssignment_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group__0__Impl"
+
+
+    // $ANTLR start "rule__Transition__Group__1"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1359:1: rule__Transition__Group__1 : rule__Transition__Group__1__Impl rule__Transition__Group__2 ;
+    public final void rule__Transition__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1363:1: ( rule__Transition__Group__1__Impl rule__Transition__Group__2 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1364:2: rule__Transition__Group__1__Impl rule__Transition__Group__2
+            {
+            pushFollow(FOLLOW_rule__Transition__Group__1__Impl_in_rule__Transition__Group__12667);
+            rule__Transition__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Transition__Group__2_in_rule__Transition__Group__12670);
+            rule__Transition__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group__1"
+
+
+    // $ANTLR start "rule__Transition__Group__1__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1371:1: rule__Transition__Group__1__Impl : ( '=>' ) ;
+    public final void rule__Transition__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1375:1: ( ( '=>' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1376:1: ( '=>' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1376:1: ( '=>' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1377:1: '=>'
+            {
+             before(grammarAccess.getTransitionAccess().getEqualsSignGreaterThanSignKeyword_1()); 
+            match(input,21,FOLLOW_21_in_rule__Transition__Group__1__Impl2698); 
+             after(grammarAccess.getTransitionAccess().getEqualsSignGreaterThanSignKeyword_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group__1__Impl"
+
+
+    // $ANTLR start "rule__Transition__Group__2"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1390:1: rule__Transition__Group__2 : rule__Transition__Group__2__Impl ;
+    public final void rule__Transition__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1394:1: ( rule__Transition__Group__2__Impl )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1395:2: rule__Transition__Group__2__Impl
+            {
+            pushFollow(FOLLOW_rule__Transition__Group__2__Impl_in_rule__Transition__Group__22729);
+            rule__Transition__Group__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group__2"
+
+
+    // $ANTLR start "rule__Transition__Group__2__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1401:1: rule__Transition__Group__2__Impl : ( ( rule__Transition__StateAssignment_2 ) ) ;
+    public final void rule__Transition__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1405:1: ( ( ( rule__Transition__StateAssignment_2 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1406:1: ( ( rule__Transition__StateAssignment_2 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1406:1: ( ( rule__Transition__StateAssignment_2 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1407:1: ( rule__Transition__StateAssignment_2 )
+            {
+             before(grammarAccess.getTransitionAccess().getStateAssignment_2()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1408:1: ( rule__Transition__StateAssignment_2 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1408:2: rule__Transition__StateAssignment_2
+            {
+            pushFollow(FOLLOW_rule__Transition__StateAssignment_2_in_rule__Transition__Group__2__Impl2756);
+            rule__Transition__StateAssignment_2();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getTransitionAccess().getStateAssignment_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group__2__Impl"
+
+
+    // $ANTLR start "rule__Module__NameAssignment_1"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1425:1: rule__Module__NameAssignment_1 : ( RULE_STRING ) ;
+    public final void rule__Module__NameAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1429:1: ( ( RULE_STRING ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1430:1: ( RULE_STRING )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1430:1: ( RULE_STRING )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1431:1: RULE_STRING
+            {
+             before(grammarAccess.getModuleAccess().getNameSTRINGTerminalRuleCall_1_0()); 
+            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rule__Module__NameAssignment_12797); 
+             after(grammarAccess.getModuleAccess().getNameSTRINGTerminalRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Module__NameAssignment_1"
+
+
+    // $ANTLR start "rule__Module__MachinesAssignment_2"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1440:1: rule__Module__MachinesAssignment_2 : ( ruleStatemachine ) ;
+    public final void rule__Module__MachinesAssignment_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1444:1: ( ( ruleStatemachine ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1445:1: ( ruleStatemachine )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1445:1: ( ruleStatemachine )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1446:1: ruleStatemachine
+            {
+             before(grammarAccess.getModuleAccess().getMachinesStatemachineParserRuleCall_2_0()); 
+            pushFollow(FOLLOW_ruleStatemachine_in_rule__Module__MachinesAssignment_22828);
+            ruleStatemachine();
+
+            state._fsp--;
+
+             after(grammarAccess.getModuleAccess().getMachinesStatemachineParserRuleCall_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Module__MachinesAssignment_2"
+
+
+    // $ANTLR start "rule__Statemachine__InitialAssignment_0"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1455:1: rule__Statemachine__InitialAssignment_0 : ( ( 'initial' ) ) ;
+    public final void rule__Statemachine__InitialAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1459:1: ( ( ( 'initial' ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1460:1: ( ( 'initial' ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1460:1: ( ( 'initial' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1461:1: ( 'initial' )
+            {
+             before(grammarAccess.getStatemachineAccess().getInitialInitialKeyword_0_0()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1462:1: ( 'initial' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1463:1: 'initial'
+            {
+             before(grammarAccess.getStatemachineAccess().getInitialInitialKeyword_0_0()); 
+            match(input,22,FOLLOW_22_in_rule__Statemachine__InitialAssignment_02864); 
+             after(grammarAccess.getStatemachineAccess().getInitialInitialKeyword_0_0()); 
+
+            }
+
+             after(grammarAccess.getStatemachineAccess().getInitialInitialKeyword_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__InitialAssignment_0"
+
+
+    // $ANTLR start "rule__Statemachine__NameAssignment_2"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1478:1: rule__Statemachine__NameAssignment_2 : ( RULE_ID ) ;
+    public final void rule__Statemachine__NameAssignment_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1482:1: ( ( RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1483:1: ( RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1483:1: ( RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1484:1: RULE_ID
+            {
+             before(grammarAccess.getStatemachineAccess().getNameIDTerminalRuleCall_2_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__Statemachine__NameAssignment_22903); 
+             after(grammarAccess.getStatemachineAccess().getNameIDTerminalRuleCall_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__NameAssignment_2"
+
+
+    // $ANTLR start "rule__Statemachine__ValueAssignment_3_1"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1493:1: rule__Statemachine__ValueAssignment_3_1 : ( RULE_INT ) ;
+    public final void rule__Statemachine__ValueAssignment_3_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1497:1: ( ( RULE_INT ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1498:1: ( RULE_INT )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1498:1: ( RULE_INT )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1499:1: RULE_INT
+            {
+             before(grammarAccess.getStatemachineAccess().getValueINTTerminalRuleCall_3_1_0()); 
+            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__Statemachine__ValueAssignment_3_12934); 
+             after(grammarAccess.getStatemachineAccess().getValueINTTerminalRuleCall_3_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__ValueAssignment_3_1"
+
+
+    // $ANTLR start "rule__Statemachine__EventsAssignment_6"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1508:1: rule__Statemachine__EventsAssignment_6 : ( ruleEvent ) ;
+    public final void rule__Statemachine__EventsAssignment_6() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1512:1: ( ( ruleEvent ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1513:1: ( ruleEvent )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1513:1: ( ruleEvent )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1514:1: ruleEvent
+            {
+             before(grammarAccess.getStatemachineAccess().getEventsEventParserRuleCall_6_0()); 
+            pushFollow(FOLLOW_ruleEvent_in_rule__Statemachine__EventsAssignment_62965);
+            ruleEvent();
+
+            state._fsp--;
+
+             after(grammarAccess.getStatemachineAccess().getEventsEventParserRuleCall_6_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__EventsAssignment_6"
+
+
+    // $ANTLR start "rule__Statemachine__StatesAssignment_8"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1523:1: rule__Statemachine__StatesAssignment_8 : ( ruleState ) ;
+    public final void rule__Statemachine__StatesAssignment_8() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1527:1: ( ( ruleState ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1528:1: ( ruleState )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1528:1: ( ruleState )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1529:1: ruleState
+            {
+             before(grammarAccess.getStatemachineAccess().getStatesStateParserRuleCall_8_0()); 
+            pushFollow(FOLLOW_ruleState_in_rule__Statemachine__StatesAssignment_82996);
+            ruleState();
+
+            state._fsp--;
+
+             after(grammarAccess.getStatemachineAccess().getStatesStateParserRuleCall_8_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__StatesAssignment_8"
+
+
+    // $ANTLR start "rule__Event__NameAssignment"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1538:1: rule__Event__NameAssignment : ( RULE_ID ) ;
+    public final void rule__Event__NameAssignment() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1542:1: ( ( RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1543:1: ( RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1543:1: ( RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1544:1: RULE_ID
+            {
+             before(grammarAccess.getEventAccess().getNameIDTerminalRuleCall_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__Event__NameAssignment3027); 
+             after(grammarAccess.getEventAccess().getNameIDTerminalRuleCall_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Event__NameAssignment"
+
+
+    // $ANTLR start "rule__SimpleState__InitialAssignment_0"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1553:1: rule__SimpleState__InitialAssignment_0 : ( ( 'initial' ) ) ;
+    public final void rule__SimpleState__InitialAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1557:1: ( ( ( 'initial' ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1558:1: ( ( 'initial' ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1558:1: ( ( 'initial' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1559:1: ( 'initial' )
+            {
+             before(grammarAccess.getSimpleStateAccess().getInitialInitialKeyword_0_0()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1560:1: ( 'initial' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1561:1: 'initial'
+            {
+             before(grammarAccess.getSimpleStateAccess().getInitialInitialKeyword_0_0()); 
+            match(input,22,FOLLOW_22_in_rule__SimpleState__InitialAssignment_03063); 
+             after(grammarAccess.getSimpleStateAccess().getInitialInitialKeyword_0_0()); 
+
+            }
+
+             after(grammarAccess.getSimpleStateAccess().getInitialInitialKeyword_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__InitialAssignment_0"
+
+
+    // $ANTLR start "rule__SimpleState__NameAssignment_2"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1576:1: rule__SimpleState__NameAssignment_2 : ( RULE_ID ) ;
+    public final void rule__SimpleState__NameAssignment_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1580:1: ( ( RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1581:1: ( RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1581:1: ( RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1582:1: RULE_ID
+            {
+             before(grammarAccess.getSimpleStateAccess().getNameIDTerminalRuleCall_2_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__SimpleState__NameAssignment_23102); 
+             after(grammarAccess.getSimpleStateAccess().getNameIDTerminalRuleCall_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__NameAssignment_2"
+
+
+    // $ANTLR start "rule__SimpleState__ValueAssignment_3_1"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1591:1: rule__SimpleState__ValueAssignment_3_1 : ( RULE_INT ) ;
+    public final void rule__SimpleState__ValueAssignment_3_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1595:1: ( ( RULE_INT ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1596:1: ( RULE_INT )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1596:1: ( RULE_INT )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1597:1: RULE_INT
+            {
+             before(grammarAccess.getSimpleStateAccess().getValueINTTerminalRuleCall_3_1_0()); 
+            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__SimpleState__ValueAssignment_3_13133); 
+             after(grammarAccess.getSimpleStateAccess().getValueINTTerminalRuleCall_3_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__ValueAssignment_3_1"
+
+
+    // $ANTLR start "rule__SimpleState__TransitionsAssignment_5"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1606:1: rule__SimpleState__TransitionsAssignment_5 : ( ruleTransition ) ;
+    public final void rule__SimpleState__TransitionsAssignment_5() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1610:1: ( ( ruleTransition ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1611:1: ( ruleTransition )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1611:1: ( ruleTransition )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1612:1: ruleTransition
+            {
+             before(grammarAccess.getSimpleStateAccess().getTransitionsTransitionParserRuleCall_5_0()); 
+            pushFollow(FOLLOW_ruleTransition_in_rule__SimpleState__TransitionsAssignment_53164);
+            ruleTransition();
+
+            state._fsp--;
+
+             after(grammarAccess.getSimpleStateAccess().getTransitionsTransitionParserRuleCall_5_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__TransitionsAssignment_5"
+
+
+    // $ANTLR start "rule__CompoundState__InitialAssignment_1"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1621:1: rule__CompoundState__InitialAssignment_1 : ( ( 'initial' ) ) ;
+    public final void rule__CompoundState__InitialAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1625:1: ( ( ( 'initial' ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1626:1: ( ( 'initial' ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1626:1: ( ( 'initial' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1627:1: ( 'initial' )
+            {
+             before(grammarAccess.getCompoundStateAccess().getInitialInitialKeyword_1_0()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1628:1: ( 'initial' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1629:1: 'initial'
+            {
+             before(grammarAccess.getCompoundStateAccess().getInitialInitialKeyword_1_0()); 
+            match(input,22,FOLLOW_22_in_rule__CompoundState__InitialAssignment_13200); 
+             after(grammarAccess.getCompoundStateAccess().getInitialInitialKeyword_1_0()); 
+
+            }
+
+             after(grammarAccess.getCompoundStateAccess().getInitialInitialKeyword_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__InitialAssignment_1"
+
+
+    // $ANTLR start "rule__CompoundState__NameAssignment_3"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1644:1: rule__CompoundState__NameAssignment_3 : ( RULE_ID ) ;
+    public final void rule__CompoundState__NameAssignment_3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1648:1: ( ( RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1649:1: ( RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1649:1: ( RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1650:1: RULE_ID
+            {
+             before(grammarAccess.getCompoundStateAccess().getNameIDTerminalRuleCall_3_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__CompoundState__NameAssignment_33239); 
+             after(grammarAccess.getCompoundStateAccess().getNameIDTerminalRuleCall_3_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__NameAssignment_3"
+
+
+    // $ANTLR start "rule__CompoundState__MachineAssignment_5"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1659:1: rule__CompoundState__MachineAssignment_5 : ( ( RULE_ID ) ) ;
+    public final void rule__CompoundState__MachineAssignment_5() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1663:1: ( ( ( RULE_ID ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1664:1: ( ( RULE_ID ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1664:1: ( ( RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1665:1: ( RULE_ID )
+            {
+             before(grammarAccess.getCompoundStateAccess().getMachineStatemachineCrossReference_5_0()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1666:1: ( RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1667:1: RULE_ID
+            {
+             before(grammarAccess.getCompoundStateAccess().getMachineStatemachineIDTerminalRuleCall_5_0_1()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__CompoundState__MachineAssignment_53274); 
+             after(grammarAccess.getCompoundStateAccess().getMachineStatemachineIDTerminalRuleCall_5_0_1()); 
+
+            }
+
+             after(grammarAccess.getCompoundStateAccess().getMachineStatemachineCrossReference_5_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__MachineAssignment_5"
+
+
+    // $ANTLR start "rule__CompoundState__TransitionsAssignment_7"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1678:1: rule__CompoundState__TransitionsAssignment_7 : ( ruleTransition ) ;
+    public final void rule__CompoundState__TransitionsAssignment_7() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1682:1: ( ( ruleTransition ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1683:1: ( ruleTransition )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1683:1: ( ruleTransition )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1684:1: ruleTransition
+            {
+             before(grammarAccess.getCompoundStateAccess().getTransitionsTransitionParserRuleCall_7_0()); 
+            pushFollow(FOLLOW_ruleTransition_in_rule__CompoundState__TransitionsAssignment_73309);
+            ruleTransition();
+
+            state._fsp--;
+
+             after(grammarAccess.getCompoundStateAccess().getTransitionsTransitionParserRuleCall_7_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__TransitionsAssignment_7"
+
+
+    // $ANTLR start "rule__Transition__EventAssignment_0"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1693:1: rule__Transition__EventAssignment_0 : ( ( RULE_ID ) ) ;
+    public final void rule__Transition__EventAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1697:1: ( ( ( RULE_ID ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1698:1: ( ( RULE_ID ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1698:1: ( ( RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1699:1: ( RULE_ID )
+            {
+             before(grammarAccess.getTransitionAccess().getEventEventCrossReference_0_0()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1700:1: ( RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1701:1: RULE_ID
+            {
+             before(grammarAccess.getTransitionAccess().getEventEventIDTerminalRuleCall_0_0_1()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__Transition__EventAssignment_03344); 
+             after(grammarAccess.getTransitionAccess().getEventEventIDTerminalRuleCall_0_0_1()); 
+
+            }
+
+             after(grammarAccess.getTransitionAccess().getEventEventCrossReference_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__EventAssignment_0"
+
+
+    // $ANTLR start "rule__Transition__StateAssignment_2"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1712:1: rule__Transition__StateAssignment_2 : ( ( RULE_ID ) ) ;
+    public final void rule__Transition__StateAssignment_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1716:1: ( ( ( RULE_ID ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1717:1: ( ( RULE_ID ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1717:1: ( ( RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1718:1: ( RULE_ID )
+            {
+             before(grammarAccess.getTransitionAccess().getStateStateCrossReference_2_0()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1719:1: ( RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalOCLStates.g:1720:1: RULE_ID
+            {
+             before(grammarAccess.getTransitionAccess().getStateStateIDTerminalRuleCall_2_0_1()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__Transition__StateAssignment_23383); 
+             after(grammarAccess.getTransitionAccess().getStateStateIDTerminalRuleCall_2_0_1()); 
+
+            }
+
+             after(grammarAccess.getTransitionAccess().getStateStateCrossReference_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__StateAssignment_2"
+
+    // Delegated rules
+
+
+ 
+
+    public static final BitSet FOLLOW_ruleModule_in_entryRuleModule61 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleModule68 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Module__Group__0_in_ruleModule94 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleStatemachine_in_entryRuleStatemachine121 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleStatemachine128 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__0_in_ruleStatemachine154 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleEvent_in_entryRuleEvent181 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleEvent188 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Event__NameAssignment_in_ruleEvent214 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleState_in_entryRuleState241 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleState248 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__State__Alternatives_in_ruleState274 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSimpleState_in_entryRuleSimpleState301 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleSimpleState308 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__0_in_ruleSimpleState334 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleCompoundState_in_entryRuleCompoundState361 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleCompoundState368 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__0_in_ruleCompoundState394 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleTransition_in_entryRuleTransition421 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleTransition428 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Transition__Group__0_in_ruleTransition454 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSimpleState_in_rule__State__Alternatives490 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleCompoundState_in_rule__State__Alternatives507 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Module__Group__0__Impl_in_rule__Module__Group__0537 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_rule__Module__Group__1_in_rule__Module__Group__0540 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_11_in_rule__Module__Group__0__Impl568 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Module__Group__1__Impl_in_rule__Module__Group__1599 = new BitSet(new long[]{0x0000000000401000L});
+    public static final BitSet FOLLOW_rule__Module__Group__2_in_rule__Module__Group__1602 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Module__NameAssignment_1_in_rule__Module__Group__1__Impl629 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Module__Group__2__Impl_in_rule__Module__Group__2659 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Module__MachinesAssignment_2_in_rule__Module__Group__2__Impl686 = new BitSet(new long[]{0x0000000000401002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__0__Impl_in_rule__Statemachine__Group__0723 = new BitSet(new long[]{0x0000000000401000L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__1_in_rule__Statemachine__Group__0726 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__InitialAssignment_0_in_rule__Statemachine__Group__0__Impl753 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__1__Impl_in_rule__Statemachine__Group__1784 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__2_in_rule__Statemachine__Group__1787 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_12_in_rule__Statemachine__Group__1__Impl815 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__2__Impl_in_rule__Statemachine__Group__2846 = new BitSet(new long[]{0x0000000000022000L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__3_in_rule__Statemachine__Group__2849 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__NameAssignment_2_in_rule__Statemachine__Group__2__Impl876 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__3__Impl_in_rule__Statemachine__Group__3906 = new BitSet(new long[]{0x0000000000022000L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__4_in_rule__Statemachine__Group__3909 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group_3__0_in_rule__Statemachine__Group__3__Impl936 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__4__Impl_in_rule__Statemachine__Group__4967 = new BitSet(new long[]{0x0000000000004000L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__5_in_rule__Statemachine__Group__4970 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__Statemachine__Group__4__Impl998 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__5__Impl_in_rule__Statemachine__Group__51029 = new BitSet(new long[]{0x0000000000008020L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__6_in_rule__Statemachine__Group__51032 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_14_in_rule__Statemachine__Group__5__Impl1060 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__6__Impl_in_rule__Statemachine__Group__61091 = new BitSet(new long[]{0x0000000000008020L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__7_in_rule__Statemachine__Group__61094 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__EventsAssignment_6_in_rule__Statemachine__Group__6__Impl1121 = new BitSet(new long[]{0x0000000000000022L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__7__Impl_in_rule__Statemachine__Group__71152 = new BitSet(new long[]{0x00000000004D0000L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__8_in_rule__Statemachine__Group__71155 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_15_in_rule__Statemachine__Group__7__Impl1183 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__8__Impl_in_rule__Statemachine__Group__81214 = new BitSet(new long[]{0x00000000004D0000L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__9_in_rule__Statemachine__Group__81217 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__StatesAssignment_8_in_rule__Statemachine__Group__8__Impl1244 = new BitSet(new long[]{0x00000000004C0002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__9__Impl_in_rule__Statemachine__Group__91275 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_16_in_rule__Statemachine__Group__9__Impl1303 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group_3__0__Impl_in_rule__Statemachine__Group_3__01354 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group_3__1_in_rule__Statemachine__Group_3__01357 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__Statemachine__Group_3__0__Impl1385 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group_3__1__Impl_in_rule__Statemachine__Group_3__11416 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__ValueAssignment_3_1_in_rule__Statemachine__Group_3__1__Impl1443 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__0__Impl_in_rule__SimpleState__Group__01477 = new BitSet(new long[]{0x0000000000440000L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__1_in_rule__SimpleState__Group__01480 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__InitialAssignment_0_in_rule__SimpleState__Group__0__Impl1507 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__1__Impl_in_rule__SimpleState__Group__11538 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__2_in_rule__SimpleState__Group__11541 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_18_in_rule__SimpleState__Group__1__Impl1569 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__2__Impl_in_rule__SimpleState__Group__21600 = new BitSet(new long[]{0x0000000000022000L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__3_in_rule__SimpleState__Group__21603 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__NameAssignment_2_in_rule__SimpleState__Group__2__Impl1630 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__3__Impl_in_rule__SimpleState__Group__31660 = new BitSet(new long[]{0x0000000000022000L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__4_in_rule__SimpleState__Group__31663 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group_3__0_in_rule__SimpleState__Group__3__Impl1690 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__4__Impl_in_rule__SimpleState__Group__41721 = new BitSet(new long[]{0x0000000000010020L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__5_in_rule__SimpleState__Group__41724 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__SimpleState__Group__4__Impl1752 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__5__Impl_in_rule__SimpleState__Group__51783 = new BitSet(new long[]{0x0000000000010020L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__6_in_rule__SimpleState__Group__51786 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__TransitionsAssignment_5_in_rule__SimpleState__Group__5__Impl1813 = new BitSet(new long[]{0x0000000000000022L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__6__Impl_in_rule__SimpleState__Group__61844 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_16_in_rule__SimpleState__Group__6__Impl1872 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group_3__0__Impl_in_rule__SimpleState__Group_3__01917 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group_3__1_in_rule__SimpleState__Group_3__01920 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__SimpleState__Group_3__0__Impl1948 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group_3__1__Impl_in_rule__SimpleState__Group_3__11979 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__ValueAssignment_3_1_in_rule__SimpleState__Group_3__1__Impl2006 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__0__Impl_in_rule__CompoundState__Group__02040 = new BitSet(new long[]{0x0000000000440000L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__1_in_rule__CompoundState__Group__02043 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_19_in_rule__CompoundState__Group__0__Impl2071 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__1__Impl_in_rule__CompoundState__Group__12102 = new BitSet(new long[]{0x0000000000440000L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__2_in_rule__CompoundState__Group__12105 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__InitialAssignment_1_in_rule__CompoundState__Group__1__Impl2132 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__2__Impl_in_rule__CompoundState__Group__22163 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__3_in_rule__CompoundState__Group__22166 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_18_in_rule__CompoundState__Group__2__Impl2194 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__3__Impl_in_rule__CompoundState__Group__32225 = new BitSet(new long[]{0x0000000000100000L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__4_in_rule__CompoundState__Group__32228 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__NameAssignment_3_in_rule__CompoundState__Group__3__Impl2255 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__4__Impl_in_rule__CompoundState__Group__42285 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__5_in_rule__CompoundState__Group__42288 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_20_in_rule__CompoundState__Group__4__Impl2316 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__5__Impl_in_rule__CompoundState__Group__52347 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__6_in_rule__CompoundState__Group__52350 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__MachineAssignment_5_in_rule__CompoundState__Group__5__Impl2377 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__6__Impl_in_rule__CompoundState__Group__62407 = new BitSet(new long[]{0x0000000000010020L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__7_in_rule__CompoundState__Group__62410 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__CompoundState__Group__6__Impl2438 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__7__Impl_in_rule__CompoundState__Group__72469 = new BitSet(new long[]{0x0000000000010020L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__8_in_rule__CompoundState__Group__72472 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__TransitionsAssignment_7_in_rule__CompoundState__Group__7__Impl2499 = new BitSet(new long[]{0x0000000000000022L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__8__Impl_in_rule__CompoundState__Group__82530 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_16_in_rule__CompoundState__Group__8__Impl2558 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Transition__Group__0__Impl_in_rule__Transition__Group__02607 = new BitSet(new long[]{0x0000000000200000L});
+    public static final BitSet FOLLOW_rule__Transition__Group__1_in_rule__Transition__Group__02610 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Transition__EventAssignment_0_in_rule__Transition__Group__0__Impl2637 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Transition__Group__1__Impl_in_rule__Transition__Group__12667 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rule__Transition__Group__2_in_rule__Transition__Group__12670 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_21_in_rule__Transition__Group__1__Impl2698 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Transition__Group__2__Impl_in_rule__Transition__Group__22729 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Transition__StateAssignment_2_in_rule__Transition__Group__2__Impl2756 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_STRING_in_rule__Module__NameAssignment_12797 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleStatemachine_in_rule__Module__MachinesAssignment_22828 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_22_in_rule__Statemachine__InitialAssignment_02864 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__Statemachine__NameAssignment_22903 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_rule__Statemachine__ValueAssignment_3_12934 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleEvent_in_rule__Statemachine__EventsAssignment_62965 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleState_in_rule__Statemachine__StatesAssignment_82996 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__Event__NameAssignment3027 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_22_in_rule__SimpleState__InitialAssignment_03063 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__SimpleState__NameAssignment_23102 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_rule__SimpleState__ValueAssignment_3_13133 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleTransition_in_rule__SimpleState__TransitionsAssignment_53164 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_22_in_rule__CompoundState__InitialAssignment_13200 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__CompoundState__NameAssignment_33239 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__CompoundState__MachineAssignment_53274 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleTransition_in_rule__CompoundState__TransitionsAssignment_73309 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__Transition__EventAssignment_03344 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__Transition__StateAssignment_23383 = new BitSet(new long[]{0x0000000000000002L});
+
+}
\ No newline at end of file
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/internal/OCLStatesActivator.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/internal/OCLStatesActivator.java
new file mode 100644
index 0000000..dee2af7
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/internal/OCLStatesActivator.java
@@ -0,0 +1,82 @@
+/*
+ * generated by Xtext
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.ui.internal;
+
+import static com.google.inject.util.Modules.override;
+import static com.google.inject.Guice.createInjector;
+
+import org.apache.log4j.Logger;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+import com.google.inject.Injector;
+import com.google.inject.Module;
+
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * This class was generated. Customizations should only happen in a newly
+ * introduced subclass. 
+ */
+public class OCLStatesActivator extends AbstractUIPlugin {
+
+	private Map<String,Injector> injectors = new HashMap<String,Injector>();
+	private static OCLStatesActivator INSTANCE;
+
+	public Injector getInjector(String languageName) {
+		return injectors.get(languageName);
+	}
+	
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		INSTANCE = this;
+		try {
+			registerInjectorFor("org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates");
+			
+		} catch (Exception e) {
+			Logger.getLogger(getClass()).error(e.getMessage(), e);
+			throw e;
+		}
+	}
+	
+	protected void registerInjectorFor(String language) throws Exception {
+		injectors.put(language, createInjector(
+		  override(override(getRuntimeModule(language)).with(getSharedStateModule())).with(getUiModule(language))));
+	}
+	
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		injectors.clear();
+		INSTANCE = null;
+		super.stop(context);
+	}
+	
+	public static OCLStatesActivator getInstance() {
+		return INSTANCE;
+	}
+	
+	protected Module getRuntimeModule(String grammar) {
+		if ("org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates".equals(grammar)) {
+		  return new org.eclipse.ocl.tutorial.eclipsecon2011.OCLStatesRuntimeModule();
+		}
+		
+		throw new IllegalArgumentException(grammar);
+	}
+	
+	protected Module getUiModule(String grammar) {
+		if ("org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates".equals(grammar)) {
+		  return new org.eclipse.ocl.tutorial.eclipsecon2011.ui.OCLStatesUiModule(this);
+		}
+		
+		throw new IllegalArgumentException(grammar);
+	}
+	
+	protected Module getSharedStateModule() {
+		return new org.eclipse.xtext.ui.shared.SharedStateModule();
+	}
+	
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/OCLStatesActivator.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/OCLStatesActivator.java
new file mode 100644
index 0000000..cdf4baf
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/OCLStatesActivator.java
@@ -0,0 +1,204 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2011 E.D.Willink and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   E.D.Willink - Initial API and implementation
+ *
+ * </copyright>
+ *
+ * $Id: OCLStatesActivator.java,v 1.1 2011/03/15 07:51:50 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011;
+
+import java.io.IOException;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.apache.log4j.Logger;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.text.templates.ContextTypeRegistry;
+import org.eclipse.jface.text.templates.persistence.TemplateStore;
+import org.eclipse.ui.editors.text.templates.ContributionContextTypeRegistry;
+import org.eclipse.ui.editors.text.templates.ContributionTemplateStore;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class OCLStatesActivator extends org.eclipse.ocl.tutorial.eclipsecon2011.ui.internal.OCLStatesActivator {
+
+	Logger logger = Logger.getLogger(OCLStatesActivator.class);
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.ocl.tutorial.eclipsecon2011.states.ui";
+	
+	private static final String RESOURCE_NAME = PLUGIN_ID + ".messages";
+
+
+	/** Key to store our templates. */
+	private static final String TEMPLATES_KEY = PLUGIN_ID + ".templates";
+
+	public static final String PREFIX = OCLStatesActivator.PLUGIN_ID + ".templates.contextType.";
+
+	public static final String EVENTS = PREFIX + "events";
+	public static final String EVENT = PREFIX + "Event";
+	public static final String COMMAND = PREFIX + "Command";
+	public static final String TRANSITION = PREFIX + "Transition";
+	public static final String ACTIONS = PREFIX + "actions";
+	public static final String STATE = PREFIX + "state";
+	// The shared instance
+	private static OCLStatesActivator plugin;
+
+	private ResourceBundle resourceBundle;
+	private ContextTypeRegistry contextTypeRegistry;
+	private TemplateStore templateStore;
+
+	/**
+	 * The constructor
+	 */
+	public OCLStatesActivator() {
+		try {
+			resourceBundle = ResourceBundle.getBundle(RESOURCE_NAME);
+		} catch (MissingResourceException e) {
+			resourceBundle = null;
+		}
+
+	}
+
+	public ResourceBundle getResourceBundle() {
+		return resourceBundle;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext
+	 * )
+	 */
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		setDefault(this);
+		logger.debug("Starting fowlerdsl.ui activator: " + this.getClass().getName());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext
+	 * )
+	 */
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		setDefault(null);
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 * 
+	 * @return the shared instance
+	 */
+	public static OCLStatesActivator getDefault() {
+		return plugin;
+	}
+
+	private static void setDefault(OCLStatesActivator activator) {
+		plugin = activator;
+	}
+
+	/**
+	 * Returns the template context type registry for the Fowler-Dsl editor.
+	 * 
+	 * @return the template context type registry for the Fowler-Dsl  editor
+	 */
+	public ContextTypeRegistry getTemplateContextRegistry() {
+		if (contextTypeRegistry == null) {
+			ContributionContextTypeRegistry registry = new ContributionContextTypeRegistry();
+			registry.addContextType(EVENTS);
+			registry.addContextType(ACTIONS);
+			registry.addContextType(TRANSITION);
+			registry.addContextType(EVENT);
+			registry.addContextType(COMMAND);
+			registry.addContextType(STATE);
+			contextTypeRegistry = registry;
+		}
+		return contextTypeRegistry;
+	}
+
+	/**
+	 * Returns the template store for the Fowler-Dsl  editor.
+	 * 
+	 * @return the template store for the Fowler-Dsl  editor
+	 */
+	public TemplateStore getTemplateStore() {
+		if (templateStore == null) {
+			templateStore = new ContributionTemplateStore(getTemplateContextRegistry(), getPreferenceStore(),
+					TEMPLATES_KEY);
+			try {
+				templateStore.load();
+			}
+			catch (IOException e) {
+				logger.error(e);
+			}
+		}
+		return templateStore;
+	}
+	
+	public static void log(IStatus status) {
+		getDefault().getLog().log(status);
+	}
+
+	/**
+	 * Writes the message to the plug-in's log
+	 * 
+	 * @param message the text to write to the log
+	 */
+	public static void log(String message, Throwable exception) {
+		IStatus status = createErrorStatus(message, exception);
+		getDefault().getLog().log(status);
+	}
+	
+	public static void log(Throwable exception) {
+		getDefault().getLog().log(createErrorStatus(
+						getResourceString("Plugin.internal_error"), exception));
+	}
+	/**
+	 * Returns a new <code>IStatus</code> for this plug-in
+	 */
+	public static IStatus createErrorStatus(String message,
+											Throwable exception) {
+		return new Status(IStatus.ERROR, PLUGIN_ID, 0, message == null ? "" : message, exception);
+	}
+
+	/**
+	 * Returns the string from the plugin's resource bundle,
+	 * or 'key' if not found.
+	 */
+	public static String getResourceString(String key) {
+	    String bundleString;
+		ResourceBundle bundle = getDefault().getResourceBundle();
+		if (bundle != null) {
+			try {
+				bundleString = bundle.getString(key);
+			} catch (MissingResourceException e) {
+			    log(e);
+				bundleString = "!" + key + "!";
+			}
+		} else {
+			bundleString = "!" + key + "!";
+		}
+		return bundleString;
+	}
+
+
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/OCLStatesUiModule.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/OCLStatesUiModule.java
new file mode 100644
index 0000000..aa4cdba
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/OCLStatesUiModule.java
@@ -0,0 +1,15 @@
+/*
+ * generated by Xtext
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.ui;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+/**
+ * Use this class to register components to be used within the IDE.
+ */
+public class OCLStatesUiModule extends org.eclipse.ocl.tutorial.eclipsecon2011.ui.AbstractOCLStatesUiModule {
+	public OCLStatesUiModule(AbstractUIPlugin plugin) {
+		super(plugin);
+	}
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/OCLStatesProposalProvider.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/OCLStatesProposalProvider.java
new file mode 100644
index 0000000..01fb249
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/OCLStatesProposalProvider.java
@@ -0,0 +1,12 @@
+/*
+* generated by Xtext
+*/
+package org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist;
+
+import org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist.AbstractOCLStatesProposalProvider;
+/**
+ * see http://www.eclipse.org/Xtext/documentation/latest/xtext.html#contentAssist on how to customize content assistant
+ */
+public class OCLStatesProposalProvider extends AbstractOCLStatesProposalProvider {
+
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/labeling/OCLStatesDescriptionLabelProvider.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/labeling/OCLStatesDescriptionLabelProvider.java
new file mode 100644
index 0000000..5fd593e
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/labeling/OCLStatesDescriptionLabelProvider.java
@@ -0,0 +1,27 @@
+/*
+* generated by Xtext
+*/
+package org.eclipse.ocl.tutorial.eclipsecon2011.ui.labeling;
+
+import org.eclipse.xtext.ui.label.DefaultDescriptionLabelProvider;
+
+/**
+ * Provides labels for a IEObjectDescriptions and IResourceDescriptions.
+ * 
+ * see http://www.eclipse.org/Xtext/documentation/latest/xtext.html#labelProvider
+ */
+public class OCLStatesDescriptionLabelProvider extends DefaultDescriptionLabelProvider {
+
+/*
+	//Labels and icons can be computed like this:
+	
+	String text(IEObjectDescription ele) {
+	  return "my "+ele.getName();
+	}
+	 
+    String image(IEObjectDescription ele) {
+      return ele.getEClass().getName() + ".gif";
+    }	 
+*/
+
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/labeling/OCLStatesLabelProvider.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/labeling/OCLStatesLabelProvider.java
new file mode 100644
index 0000000..9ea9145
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/labeling/OCLStatesLabelProvider.java
@@ -0,0 +1,34 @@
+/*
+* generated by Xtext
+*/
+package org.eclipse.ocl.tutorial.eclipsecon2011.ui.labeling;
+
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.xtext.ui.label.DefaultEObjectLabelProvider;
+
+import com.google.inject.Inject;
+
+/**
+ * Provides labels for a EObjects.
+ * 
+ * see http://www.eclipse.org/Xtext/documentation/latest/xtext.html#labelProvider
+ */
+public class OCLStatesLabelProvider extends DefaultEObjectLabelProvider {
+
+	@Inject
+	public OCLStatesLabelProvider(AdapterFactoryLabelProvider delegate) {
+		super(delegate);
+	}
+
+/*
+	//Labels and icons can be computed like this:
+	
+	String text(MyModel ele) {
+	  return "my "+ele.getName();
+	}
+	 
+    String image(MyModel ele) {
+      return "MyModel.gif";
+    }
+*/
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/outline/OCLStatesOutlineTreeProvider.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/outline/OCLStatesOutlineTreeProvider.java
new file mode 100644
index 0000000..6fbc612
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/outline/OCLStatesOutlineTreeProvider.java
@@ -0,0 +1,14 @@
+/*
+* generated by Xtext
+*/
+package org.eclipse.ocl.tutorial.eclipsecon2011.ui.outline;
+
+import org.eclipse.xtext.ui.editor.outline.impl.DefaultOutlineTreeProvider;
+
+/**
+ * customization of the default outline structure
+ * 
+ */
+public class OCLStatesOutlineTreeProvider extends DefaultOutlineTreeProvider {
+	
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/templates/templates.xml b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/templates/templates.xml
new file mode 100644
index 0000000..da339a0
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.ui/templates/templates.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<templates>
+	<template name="empty Statemachine" description="template for an empty Statemachine"
+		id="org.eclipse.ocl.tutorial.eclipsecon2011.states.ui.templates.module"
+		context="org.eclipse.ocl.tutorial.eclipsecon2011.States.kw_module"
+		enabled="true">module "org.example"
+
+statemachine Machine
+{
+	events START STOP;
+    ${cursor} 
+	initial state Start
+	{
+		START => Start
+	} 
+	     
+	state Stop 
+	{
+		STOP  => Stop
+	}  
+}
+	</template>
+
+	<template name="state" description="state definition"
+		id="org.eclipse.ocl.tutorial.eclipsecon2011.states.ui.templates.state"
+		context="org.eclipse.ocl.tutorial.eclipsecon2011.States.State"
+		enabled="true">state ${name}
+{
+  ${cursor}
+}</template>
+	 
+	<template name="transition" description="event transition"
+		id="org.eclipse.ocl.tutorial.eclipsecon2011.states.ui.templates.transition"
+		context="org.eclipse.ocl.tutorial.eclipsecon2011.States.Transition"
+		enabled="true">
+		${event:CrossReference('Transition.event')} => ${state:CrossReference('Transition.state')}
+	</template>
+	
+	<template name="event" description="event definition"
+		id="org.eclipse.ocl.tutorial.eclipsecon2011.states.ui.templates.event"
+		context="org.eclipse.ocl.tutorial.eclipsecon2011.States.Event"
+		enabled="true">${event} ${shortCode}</template>
+	
+</templates>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/.classpath b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/.classpath
new file mode 100644
index 0000000..1e16e09
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/.classpath
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="emf-gen"/>
+	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/.cvsignore b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/.cvsignore
new file mode 100644
index 0000000..9e68776
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/.cvsignore
@@ -0,0 +1,2 @@
+.antlr-generator-3.2.0.jar
+plugin.xml_gen
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/.project b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/.project
new file mode 100644
index 0000000..876771b
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.ocl.tutorial.eclipsecon2011.oclstates</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+	</natures>
+</projectDescription>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/.settings/org.eclipse.core.resources.prefs b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..52164b2
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Tue Aug 18 18:37:57 CEST 2009
+eclipse.preferences.version=1
+encoding/<project>=ISO-8859-1
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/.settings/org.eclipse.jdt.core.prefs b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0df49b9
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,369 @@
+#Mon Mar 07 12:46:00 GMT 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=false
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=false
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=120
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/.settings/org.eclipse.jdt.launching.prefs b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..cd7271f
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Wed Aug 12 21:10:17 CEST 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=warning
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/.settings/org.eclipse.jdt.ui.prefs b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..f6caf59
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,118 @@
+#Wed Oct 14 22:36:24 CEST 2009
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=false
+cleanup.format_source_code=false
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=false
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=false
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=false
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_Xtext
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_'Xtext'
+formatter_settings_version=11
+org.eclipse.jdt.ui.exception.name=e
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=java;javax;org;com;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=1
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"></template><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"></template><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"></template><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*******************************************************************************\n * Copyright (c) ${year} itemis AG (http\://www.itemis.eu) and others.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http\://www.eclipse.org/legal/epl-v10.html\n *******************************************************************************/</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\n * @author ${user} - Initial contribution and API\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"></template><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"></template><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"></template><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"></template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter function" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\n * @return the ${bare_field_name}\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter function" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\n * @param ${param} the ${bare_field_name} to set\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\n * ${tags}\n */</template><template autoinsert\="true" context\="filecomment_context" deleted\="false" description\="Comment for created JavaScript files" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.filecomment" name\="filecomment">/**\n * \n */</template><template autoinsert\="true" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\n * @author ${user}\n *\n * ${tags}\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for vars" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\n * \n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding function" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\n * ${tags}\n */</template><template autoinsert\="true" context\="overridecomment_context" deleted\="false" description\="Comment for overriding functions" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/* (non-JSDoc)\n * ${see_to_overridden}\n */</template><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate functions" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\n * ${tags}\n * ${see_to_target}\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.classbody" name\="classbody">\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created function stubs" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated function stub\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=false
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=false
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/.settings/org.eclipse.pde.prefs b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000..2bd5814
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,25 @@
+#Wed Aug 12 21:14:13 CEST 2009
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=2
+compilers.p.missing-version-export-package=2
+compilers.p.missing-version-import-package=2
+compilers.p.missing-version-require-bundle=2
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/Generate OCLStates Editor.launch b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/Generate OCLStates Editor.launch
new file mode 100644
index 0000000..ff148f7
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/Generate OCLStates Editor.launch
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.emf.mwe2.launch.Mwe2LaunchConfigurationType">
+<stringAttribute key="bad_container_name" value="\org.eclipse.ocl.tutorial.eclipsecon2011.states.mode"/>
+<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${workspace}"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="4"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="src/org/eclipse/ocl/tutorial/eclipsecon2011/OCLStates.mwe2"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.ocl.tutorial.eclipsecon2011.oclstates"/>
+</launchConfiguration>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/META-INF/MANIFEST.MF b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..c98deb7
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/META-INF/MANIFEST.MF
@@ -0,0 +1,31 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: EclipseCon 2011 Tutorial Xtext States with Embedded OCL Editor
+Bundle-Vendor: Eclipse Modeling Project
+Bundle-Version: 1.0.0
+Bundle-SymbolicName: org.eclipse.ocl.tutorial.eclipsecon2011.oclstates;singleton:=true
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ActivationPolicy: lazy
+Require-Bundle: org.eclipse.xtext;bundle-version="2.0.0";visibility:=reexport,
+ org.eclipse.xtext.generator;bundle-version="2.0.0";resolution:=optional,
+ org.apache.log4j;bundle-version="1.2.15";visibility:=reexport,
+ org.eclipse.emf.mwe.core;bundle-version="1.0.0",
+ org.eclipse.xtext.util;bundle-version="2.0.0",
+ org.eclipse.emf.ecore,
+ org.eclipse.emf.common,
+ org.eclipse.xtend;bundle-version="1.1.0",
+ org.eclipse.xtend.typesystem.emf;bundle-version="1.0.1",
+ org.eclipse.emf.mwe2.launch;bundle-version="2.0.0";resolution:=optional,
+ org.antlr.runtime,
+ org.eclipse.ocl.examples.xtext.oclinecore;bundle-version="3.1.0"
+Import-Package: org.apache.commons.logging;version="1.0.4",
+ org.apache.log4j
+Export-Package: org.eclipse.ocl.tutorial.eclipsecon2011,
+ org.eclipse.ocl.tutorial.eclipsecon2011.services,
+ org.eclipse.ocl.tutorial.eclipsecon2011.oclstates,
+ org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl,
+ org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.util,
+ org.eclipse.ocl.tutorial.eclipsecon2011.parseTreeConstruction,
+ org.eclipse.ocl.tutorial.eclipsecon2011.parser.antlr,
+ org.eclipse.ocl.tutorial.eclipsecon2011.parser.antlr.internal,
+ org.eclipse.ocl.tutorial.eclipsecon2011.validation
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/about.html b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/about.html
new file mode 100644
index 0000000..1b8f940
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/build.properties b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/build.properties
new file mode 100644
index 0000000..a355ee7
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/build.properties
@@ -0,0 +1,8 @@
+source.. = src/,\
+		   src-gen/,\
+           emf-gen/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               about.html
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/CompoundState.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/CompoundState.java
new file mode 100644
index 0000000..97ede4c
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/CompoundState.java
@@ -0,0 +1,53 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: CompoundState.java,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.oclstates;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Compound State</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.CompoundState#getMachine <em>Machine</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage#getCompoundState()
+ * @model
+ * @generated
+ */
+public interface CompoundState extends State {
+	/**
+	 * Returns the value of the '<em><b>Machine</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Machine</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Machine</em>' reference.
+	 * @see #setMachine(Statemachine)
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage#getCompoundState_Machine()
+	 * @model
+	 * @generated
+	 */
+	Statemachine getMachine();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.CompoundState#getMachine <em>Machine</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Machine</em>' reference.
+	 * @see #getMachine()
+	 * @generated
+	 */
+	void setMachine(Statemachine value);
+
+} // CompoundState
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/Event.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/Event.java
new file mode 100644
index 0000000..63c10e9
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/Event.java
@@ -0,0 +1,54 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: Event.java,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.oclstates;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Event</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Event#getName <em>Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage#getEvent()
+ * @model
+ * @generated
+ */
+public interface Event extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Name</em>' attribute.
+	 * @see #setName(String)
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage#getEvent_Name()
+	 * @model
+	 * @generated
+	 */
+	String getName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Event#getName <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Name</em>' attribute.
+	 * @see #getName()
+	 * @generated
+	 */
+	void setName(String value);
+
+} // Event
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/Module.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/Module.java
new file mode 100644
index 0000000..fcafa9f
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/Module.java
@@ -0,0 +1,73 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: Module.java,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.oclstates;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Module</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Module#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Module#getMachines <em>Machines</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage#getModule()
+ * @model
+ * @generated
+ */
+public interface Module extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Name</em>' attribute.
+	 * @see #setName(String)
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage#getModule_Name()
+	 * @model
+	 * @generated
+	 */
+	String getName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Module#getName <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Name</em>' attribute.
+	 * @see #getName()
+	 * @generated
+	 */
+	void setName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Machines</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Machines</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Machines</em>' containment reference list.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage#getModule_Machines()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<Statemachine> getMachines();
+
+} // Module
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/OCLStatesFactory.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/OCLStatesFactory.java
new file mode 100644
index 0000000..040fdc4
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/OCLStatesFactory.java
@@ -0,0 +1,100 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: OCLStatesFactory.java,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.oclstates;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage
+ * @generated
+ */
+public interface OCLStatesFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	OCLStatesFactory eINSTANCE = org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.OCLStatesFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Module</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Module</em>'.
+	 * @generated
+	 */
+	Module createModule();
+
+	/**
+	 * Returns a new object of class '<em>Statemachine</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Statemachine</em>'.
+	 * @generated
+	 */
+	Statemachine createStatemachine();
+
+	/**
+	 * Returns a new object of class '<em>Event</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Event</em>'.
+	 * @generated
+	 */
+	Event createEvent();
+
+	/**
+	 * Returns a new object of class '<em>State</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>State</em>'.
+	 * @generated
+	 */
+	State createState();
+
+	/**
+	 * Returns a new object of class '<em>Simple State</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Simple State</em>'.
+	 * @generated
+	 */
+	SimpleState createSimpleState();
+
+	/**
+	 * Returns a new object of class '<em>Compound State</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Compound State</em>'.
+	 * @generated
+	 */
+	CompoundState createCompoundState();
+
+	/**
+	 * Returns a new object of class '<em>Transition</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Transition</em>'.
+	 * @generated
+	 */
+	Transition createTransition();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	OCLStatesPackage getOCLStatesPackage();
+
+} //OCLStatesFactory
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/OCLStatesPackage.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/OCLStatesPackage.java
new file mode 100644
index 0000000..17efe4c
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/OCLStatesPackage.java
@@ -0,0 +1,946 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: OCLStatesPackage.java,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.oclstates;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each operation of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesFactory
+ * @model kind="package"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore invocationDelegates='http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot' settingDelegates='http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot' validationDelegates='http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot'"
+ * @generated
+ */
+public interface OCLStatesPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "oclstates";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http://ocl.eclipse.org/tutorial/eclipsecon2011/OCLStates";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "oclstates";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	OCLStatesPackage eINSTANCE = org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.OCLStatesPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.ModuleImpl <em>Module</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.ModuleImpl
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.OCLStatesPackageImpl#getModule()
+	 * @generated
+	 */
+	int MODULE = 0;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODULE__NAME = 0;
+
+	/**
+	 * The feature id for the '<em><b>Machines</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODULE__MACHINES = 1;
+
+	/**
+	 * The number of structural features of the '<em>Module</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODULE_FEATURE_COUNT = 2;
+
+	/**
+	 * The number of operations of the '<em>Module</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODULE_OPERATION_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.StatemachineImpl <em>Statemachine</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.StatemachineImpl
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.OCLStatesPackageImpl#getStatemachine()
+	 * @generated
+	 */
+	int STATEMACHINE = 1;
+
+	/**
+	 * The feature id for the '<em><b>Initial</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATEMACHINE__INITIAL = 0;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATEMACHINE__NAME = 1;
+
+	/**
+	 * The feature id for the '<em><b>Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATEMACHINE__VALUE = 2;
+
+	/**
+	 * The feature id for the '<em><b>Events</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATEMACHINE__EVENTS = 3;
+
+	/**
+	 * The feature id for the '<em><b>States</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATEMACHINE__STATES = 4;
+
+	/**
+	 * The number of structural features of the '<em>Statemachine</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATEMACHINE_FEATURE_COUNT = 5;
+
+	/**
+	 * The number of operations of the '<em>Statemachine</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATEMACHINE_OPERATION_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.EventImpl <em>Event</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.EventImpl
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.OCLStatesPackageImpl#getEvent()
+	 * @generated
+	 */
+	int EVENT = 2;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EVENT__NAME = 0;
+
+	/**
+	 * The number of structural features of the '<em>Event</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EVENT_FEATURE_COUNT = 1;
+
+	/**
+	 * The number of operations of the '<em>Event</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EVENT_OPERATION_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.StateImpl <em>State</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.StateImpl
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.OCLStatesPackageImpl#getState()
+	 * @generated
+	 */
+	int STATE = 3;
+
+	/**
+	 * The feature id for the '<em><b>Initial</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATE__INITIAL = 0;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATE__NAME = 1;
+
+	/**
+	 * The feature id for the '<em><b>Transitions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATE__TRANSITIONS = 2;
+
+	/**
+	 * The feature id for the '<em><b>Statemachine</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATE__STATEMACHINE = 3;
+
+	/**
+	 * The number of structural features of the '<em>State</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATE_FEATURE_COUNT = 4;
+
+	/**
+	 * The number of operations of the '<em>State</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATE_OPERATION_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.SimpleStateImpl <em>Simple State</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.SimpleStateImpl
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.OCLStatesPackageImpl#getSimpleState()
+	 * @generated
+	 */
+	int SIMPLE_STATE = 4;
+
+	/**
+	 * The feature id for the '<em><b>Initial</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIMPLE_STATE__INITIAL = STATE__INITIAL;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIMPLE_STATE__NAME = STATE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Transitions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIMPLE_STATE__TRANSITIONS = STATE__TRANSITIONS;
+
+	/**
+	 * The feature id for the '<em><b>Statemachine</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIMPLE_STATE__STATEMACHINE = STATE__STATEMACHINE;
+
+	/**
+	 * The feature id for the '<em><b>Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIMPLE_STATE__VALUE = STATE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Simple State</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIMPLE_STATE_FEATURE_COUNT = STATE_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of operations of the '<em>Simple State</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIMPLE_STATE_OPERATION_COUNT = STATE_OPERATION_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.CompoundStateImpl <em>Compound State</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.CompoundStateImpl
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.OCLStatesPackageImpl#getCompoundState()
+	 * @generated
+	 */
+	int COMPOUND_STATE = 5;
+
+	/**
+	 * The feature id for the '<em><b>Initial</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPOUND_STATE__INITIAL = STATE__INITIAL;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPOUND_STATE__NAME = STATE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Transitions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPOUND_STATE__TRANSITIONS = STATE__TRANSITIONS;
+
+	/**
+	 * The feature id for the '<em><b>Statemachine</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPOUND_STATE__STATEMACHINE = STATE__STATEMACHINE;
+
+	/**
+	 * The feature id for the '<em><b>Machine</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPOUND_STATE__MACHINE = STATE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Compound State</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPOUND_STATE_FEATURE_COUNT = STATE_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of operations of the '<em>Compound State</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPOUND_STATE_OPERATION_COUNT = STATE_OPERATION_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.TransitionImpl <em>Transition</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.TransitionImpl
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.OCLStatesPackageImpl#getTransition()
+	 * @generated
+	 */
+	int TRANSITION = 6;
+
+	/**
+	 * The feature id for the '<em><b>Event</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSITION__EVENT = 0;
+
+	/**
+	 * The feature id for the '<em><b>State</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSITION__STATE = 1;
+
+	/**
+	 * The number of structural features of the '<em>Transition</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSITION_FEATURE_COUNT = 2;
+
+	/**
+	 * The number of operations of the '<em>Transition</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSITION_OPERATION_COUNT = 0;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Module <em>Module</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Module</em>'.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Module
+	 * @generated
+	 */
+	EClass getModule();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Module#getName <em>Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Name</em>'.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Module#getName()
+	 * @see #getModule()
+	 * @generated
+	 */
+	EAttribute getModule_Name();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Module#getMachines <em>Machines</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Machines</em>'.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Module#getMachines()
+	 * @see #getModule()
+	 * @generated
+	 */
+	EReference getModule_Machines();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine <em>Statemachine</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Statemachine</em>'.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine
+	 * @generated
+	 */
+	EClass getStatemachine();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine#isInitial <em>Initial</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Initial</em>'.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine#isInitial()
+	 * @see #getStatemachine()
+	 * @generated
+	 */
+	EAttribute getStatemachine_Initial();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine#getName <em>Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Name</em>'.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine#getName()
+	 * @see #getStatemachine()
+	 * @generated
+	 */
+	EAttribute getStatemachine_Name();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine#getValue <em>Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Value</em>'.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine#getValue()
+	 * @see #getStatemachine()
+	 * @generated
+	 */
+	EAttribute getStatemachine_Value();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine#getEvents <em>Events</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Events</em>'.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine#getEvents()
+	 * @see #getStatemachine()
+	 * @generated
+	 */
+	EReference getStatemachine_Events();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine#getStates <em>States</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>States</em>'.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine#getStates()
+	 * @see #getStatemachine()
+	 * @generated
+	 */
+	EReference getStatemachine_States();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Event <em>Event</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Event</em>'.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Event
+	 * @generated
+	 */
+	EClass getEvent();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Event#getName <em>Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Name</em>'.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Event#getName()
+	 * @see #getEvent()
+	 * @generated
+	 */
+	EAttribute getEvent_Name();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State <em>State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>State</em>'.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State
+	 * @generated
+	 */
+	EClass getState();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State#isInitial <em>Initial</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Initial</em>'.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State#isInitial()
+	 * @see #getState()
+	 * @generated
+	 */
+	EAttribute getState_Initial();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State#getName <em>Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Name</em>'.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State#getName()
+	 * @see #getState()
+	 * @generated
+	 */
+	EAttribute getState_Name();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State#getTransitions <em>Transitions</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Transitions</em>'.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State#getTransitions()
+	 * @see #getState()
+	 * @generated
+	 */
+	EReference getState_Transitions();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State#getStatemachine <em>Statemachine</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Statemachine</em>'.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State#getStatemachine()
+	 * @see #getState()
+	 * @generated
+	 */
+	EReference getState_Statemachine();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.SimpleState <em>Simple State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Simple State</em>'.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.SimpleState
+	 * @generated
+	 */
+	EClass getSimpleState();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.SimpleState#getValue <em>Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Value</em>'.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.SimpleState#getValue()
+	 * @see #getSimpleState()
+	 * @generated
+	 */
+	EAttribute getSimpleState_Value();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.CompoundState <em>Compound State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Compound State</em>'.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.CompoundState
+	 * @generated
+	 */
+	EClass getCompoundState();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.CompoundState#getMachine <em>Machine</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Machine</em>'.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.CompoundState#getMachine()
+	 * @see #getCompoundState()
+	 * @generated
+	 */
+	EReference getCompoundState_Machine();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Transition <em>Transition</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Transition</em>'.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Transition
+	 * @generated
+	 */
+	EClass getTransition();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Transition#getEvent <em>Event</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Event</em>'.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Transition#getEvent()
+	 * @see #getTransition()
+	 * @generated
+	 */
+	EReference getTransition_Event();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Transition#getState <em>State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>State</em>'.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Transition#getState()
+	 * @see #getTransition()
+	 * @generated
+	 */
+	EReference getTransition_State();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	OCLStatesFactory getOCLStatesFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each operation of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.ModuleImpl <em>Module</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.ModuleImpl
+		 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.OCLStatesPackageImpl#getModule()
+		 * @generated
+		 */
+		EClass MODULE = eINSTANCE.getModule();
+
+		/**
+		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute MODULE__NAME = eINSTANCE.getModule_Name();
+
+		/**
+		 * The meta object literal for the '<em><b>Machines</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference MODULE__MACHINES = eINSTANCE.getModule_Machines();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.StatemachineImpl <em>Statemachine</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.StatemachineImpl
+		 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.OCLStatesPackageImpl#getStatemachine()
+		 * @generated
+		 */
+		EClass STATEMACHINE = eINSTANCE.getStatemachine();
+
+		/**
+		 * The meta object literal for the '<em><b>Initial</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute STATEMACHINE__INITIAL = eINSTANCE.getStatemachine_Initial();
+
+		/**
+		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute STATEMACHINE__NAME = eINSTANCE.getStatemachine_Name();
+
+		/**
+		 * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute STATEMACHINE__VALUE = eINSTANCE.getStatemachine_Value();
+
+		/**
+		 * The meta object literal for the '<em><b>Events</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference STATEMACHINE__EVENTS = eINSTANCE.getStatemachine_Events();
+
+		/**
+		 * The meta object literal for the '<em><b>States</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference STATEMACHINE__STATES = eINSTANCE.getStatemachine_States();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.EventImpl <em>Event</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.EventImpl
+		 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.OCLStatesPackageImpl#getEvent()
+		 * @generated
+		 */
+		EClass EVENT = eINSTANCE.getEvent();
+
+		/**
+		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute EVENT__NAME = eINSTANCE.getEvent_Name();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.StateImpl <em>State</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.StateImpl
+		 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.OCLStatesPackageImpl#getState()
+		 * @generated
+		 */
+		EClass STATE = eINSTANCE.getState();
+
+		/**
+		 * The meta object literal for the '<em><b>Initial</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute STATE__INITIAL = eINSTANCE.getState_Initial();
+
+		/**
+		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute STATE__NAME = eINSTANCE.getState_Name();
+
+		/**
+		 * The meta object literal for the '<em><b>Transitions</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference STATE__TRANSITIONS = eINSTANCE.getState_Transitions();
+
+		/**
+		 * The meta object literal for the '<em><b>Statemachine</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference STATE__STATEMACHINE = eINSTANCE.getState_Statemachine();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.SimpleStateImpl <em>Simple State</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.SimpleStateImpl
+		 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.OCLStatesPackageImpl#getSimpleState()
+		 * @generated
+		 */
+		EClass SIMPLE_STATE = eINSTANCE.getSimpleState();
+
+		/**
+		 * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SIMPLE_STATE__VALUE = eINSTANCE.getSimpleState_Value();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.CompoundStateImpl <em>Compound State</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.CompoundStateImpl
+		 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.OCLStatesPackageImpl#getCompoundState()
+		 * @generated
+		 */
+		EClass COMPOUND_STATE = eINSTANCE.getCompoundState();
+
+		/**
+		 * The meta object literal for the '<em><b>Machine</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference COMPOUND_STATE__MACHINE = eINSTANCE.getCompoundState_Machine();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.TransitionImpl <em>Transition</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.TransitionImpl
+		 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.OCLStatesPackageImpl#getTransition()
+		 * @generated
+		 */
+		EClass TRANSITION = eINSTANCE.getTransition();
+
+		/**
+		 * The meta object literal for the '<em><b>Event</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference TRANSITION__EVENT = eINSTANCE.getTransition_Event();
+
+		/**
+		 * The meta object literal for the '<em><b>State</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference TRANSITION__STATE = eINSTANCE.getTransition_State();
+
+	}
+
+} //OCLStatesPackage
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/SimpleState.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/SimpleState.java
new file mode 100644
index 0000000..6611f5f
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/SimpleState.java
@@ -0,0 +1,53 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: SimpleState.java,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.oclstates;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Simple State</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.SimpleState#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage#getSimpleState()
+ * @model
+ * @generated
+ */
+public interface SimpleState extends State {
+	/**
+	 * Returns the value of the '<em><b>Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Value</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Value</em>' attribute.
+	 * @see #setValue(int)
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage#getSimpleState_Value()
+	 * @model
+	 * @generated
+	 */
+	int getValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.SimpleState#getValue <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Value</em>' attribute.
+	 * @see #getValue()
+	 * @generated
+	 */
+	void setValue(int value);
+
+} // SimpleState
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/State.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/State.java
new file mode 100644
index 0000000..aa77ea7
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/State.java
@@ -0,0 +1,129 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: State.java,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.oclstates;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>State</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State#isInitial <em>Initial</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State#getTransitions <em>Transitions</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State#getStatemachine <em>Statemachine</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage#getState()
+ * @model annotation="http://www.eclipse.org/emf/2002/Ecore constraints='UniqueInitialState NameIsLeadingUpperCase NameLength EveryEventIsHandled'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot UniqueInitialState='initial implies (((statemachine).states)->select(initial))->size() = 1' UniqueInitialState$message='\'There is more than one initial state\'' NameIsLeadingUpperCase='let firstLetter : String = (name).substring(1, 1) in firstLetter.toUpperCase() = firstLetter' NameIsLeadingUpperCase$message='\'\\\'\' + name + \'\\\' must be Leading Uppercase\'' NameLength='(name).size() >= 4' NameLength$message='\'\\\'\' + name + \'\\\' has \' + ((name).size()).toString() + \' characters when at least 4 wanted\'' EveryEventIsHandled='let allEvents : Set(Event) = ((statemachine).events)->asSet() in let myEvents : Set(Event) = ((self.transitions)->collect(event))->asSet() in (allEvents - myEvents)->isEmpty()' EveryEventIsHandled$message='let allEvents : Set(Event) = ((statemachine).events)->asSet() in let myEvents : Set(Event) = ((self.transitions)->collect(event))->asSet() in (allEvents - myEvents)->iterate(e : Event ; s : String = \'The following events are not handled:\' | s + \' \' + e.name)'"
+ * @generated
+ */
+public interface State extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Initial</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Initial</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Initial</em>' attribute.
+	 * @see #setInitial(boolean)
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage#getState_Initial()
+	 * @model
+	 * @generated
+	 */
+	boolean isInitial();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State#isInitial <em>Initial</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Initial</em>' attribute.
+	 * @see #isInitial()
+	 * @generated
+	 */
+	void setInitial(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Name</em>' attribute.
+	 * @see #setName(String)
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage#getState_Name()
+	 * @model
+	 * @generated
+	 */
+	String getName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State#getName <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Name</em>' attribute.
+	 * @see #getName()
+	 * @generated
+	 */
+	void setName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Transitions</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Transition}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Transitions</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Transitions</em>' containment reference list.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage#getState_Transitions()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<Transition> getTransitions();
+
+	/**
+	 * Returns the value of the '<em><b>Statemachine</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Statemachine</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Statemachine</em>' reference.
+	 * @see #setStatemachine(Statemachine)
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage#getState_Statemachine()
+	 * @model derived="true" ordered="false"
+	 *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot derivation='(oclContainer()).oclAsType(Statemachine)'"
+	 * @generated
+	 */
+	Statemachine getStatemachine();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State#getStatemachine <em>Statemachine</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Statemachine</em>' reference.
+	 * @see #getStatemachine()
+	 * @generated
+	 */
+	void setStatemachine(Statemachine value);
+
+} // State
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/Statemachine.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/Statemachine.java
new file mode 100644
index 0000000..892a8f8
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/Statemachine.java
@@ -0,0 +1,145 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: Statemachine.java,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.oclstates;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Statemachine</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine#isInitial <em>Initial</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine#getEvents <em>Events</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine#getStates <em>States</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage#getStatemachine()
+ * @model annotation="http://www.eclipse.org/emf/2002/Ecore constraints='HasInitialState'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot HasInitialState='(states)->exists(s : State | s.initial)' HasInitialState$message='\'No initial state\''"
+ * @generated
+ */
+public interface Statemachine extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Initial</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Initial</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Initial</em>' attribute.
+	 * @see #setInitial(boolean)
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage#getStatemachine_Initial()
+	 * @model
+	 * @generated
+	 */
+	boolean isInitial();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine#isInitial <em>Initial</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Initial</em>' attribute.
+	 * @see #isInitial()
+	 * @generated
+	 */
+	void setInitial(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Name</em>' attribute.
+	 * @see #setName(String)
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage#getStatemachine_Name()
+	 * @model
+	 * @generated
+	 */
+	String getName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine#getName <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Name</em>' attribute.
+	 * @see #getName()
+	 * @generated
+	 */
+	void setName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Value</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Value</em>' attribute.
+	 * @see #setValue(int)
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage#getStatemachine_Value()
+	 * @model
+	 * @generated
+	 */
+	int getValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine#getValue <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Value</em>' attribute.
+	 * @see #getValue()
+	 * @generated
+	 */
+	void setValue(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Events</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Event}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Events</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Events</em>' containment reference list.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage#getStatemachine_Events()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<Event> getEvents();
+
+	/**
+	 * Returns the value of the '<em><b>States</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>States</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>States</em>' containment reference list.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage#getStatemachine_States()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<State> getStates();
+
+} // Statemachine
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/Transition.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/Transition.java
new file mode 100644
index 0000000..e2d893d
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/Transition.java
@@ -0,0 +1,81 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: Transition.java,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.oclstates;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Transition</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Transition#getEvent <em>Event</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Transition#getState <em>State</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage#getTransition()
+ * @model
+ * @generated
+ */
+public interface Transition extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Event</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Event</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Event</em>' reference.
+	 * @see #setEvent(Event)
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage#getTransition_Event()
+	 * @model
+	 * @generated
+	 */
+	Event getEvent();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Transition#getEvent <em>Event</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Event</em>' reference.
+	 * @see #getEvent()
+	 * @generated
+	 */
+	void setEvent(Event value);
+
+	/**
+	 * Returns the value of the '<em><b>State</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>State</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>State</em>' reference.
+	 * @see #setState(State)
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage#getTransition_State()
+	 * @model
+	 * @generated
+	 */
+	State getState();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Transition#getState <em>State</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>State</em>' reference.
+	 * @see #getState()
+	 * @generated
+	 */
+	void setState(State value);
+
+} // Transition
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/CompoundStateImpl.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/CompoundStateImpl.java
new file mode 100644
index 0000000..ba6cc42
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/CompoundStateImpl.java
@@ -0,0 +1,160 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: CompoundStateImpl.java,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.CompoundState;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Compound State</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.CompoundStateImpl#getMachine <em>Machine</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class CompoundStateImpl extends StateImpl implements CompoundState {
+	/**
+	 * The cached value of the '{@link #getMachine() <em>Machine</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMachine()
+	 * @generated
+	 * @ordered
+	 */
+	protected Statemachine machine;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected CompoundStateImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return OCLStatesPackage.Literals.COMPOUND_STATE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Statemachine getMachine() {
+		if (machine != null && machine.eIsProxy()) {
+			InternalEObject oldMachine = (InternalEObject)machine;
+			machine = (Statemachine)eResolveProxy(oldMachine);
+			if (machine != oldMachine) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, OCLStatesPackage.COMPOUND_STATE__MACHINE, oldMachine, machine));
+			}
+		}
+		return machine;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Statemachine basicGetMachine() {
+		return machine;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setMachine(Statemachine newMachine) {
+		Statemachine oldMachine = machine;
+		machine = newMachine;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OCLStatesPackage.COMPOUND_STATE__MACHINE, oldMachine, machine));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case OCLStatesPackage.COMPOUND_STATE__MACHINE:
+				if (resolve) return getMachine();
+				return basicGetMachine();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case OCLStatesPackage.COMPOUND_STATE__MACHINE:
+				setMachine((Statemachine)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case OCLStatesPackage.COMPOUND_STATE__MACHINE:
+				setMachine((Statemachine)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case OCLStatesPackage.COMPOUND_STATE__MACHINE:
+				return machine != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //CompoundStateImpl
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/EventImpl.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/EventImpl.java
new file mode 100644
index 0000000..e13e5d6
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/EventImpl.java
@@ -0,0 +1,167 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: EventImpl.java,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Event;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Event</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.EventImpl#getName <em>Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class EventImpl extends MinimalEObjectImpl.Container implements Event {
+	/**
+	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String name = NAME_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EventImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return OCLStatesPackage.Literals.EVENT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setName(String newName) {
+		String oldName = name;
+		name = newName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OCLStatesPackage.EVENT__NAME, oldName, name));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case OCLStatesPackage.EVENT__NAME:
+				return getName();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case OCLStatesPackage.EVENT__NAME:
+				setName((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case OCLStatesPackage.EVENT__NAME:
+				setName(NAME_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case OCLStatesPackage.EVENT__NAME:
+				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (name: ");
+		result.append(name);
+		result.append(')');
+		return result.toString();
+	}
+
+} //EventImpl
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/ModuleImpl.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/ModuleImpl.java
new file mode 100644
index 0000000..148c767
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/ModuleImpl.java
@@ -0,0 +1,226 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: ModuleImpl.java,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Module;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Module</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.ModuleImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.ModuleImpl#getMachines <em>Machines</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ModuleImpl extends MinimalEObjectImpl.Container implements Module {
+	/**
+	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String name = NAME_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getMachines() <em>Machines</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMachines()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Statemachine> machines;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ModuleImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return OCLStatesPackage.Literals.MODULE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setName(String newName) {
+		String oldName = name;
+		name = newName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OCLStatesPackage.MODULE__NAME, oldName, name));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Statemachine> getMachines() {
+		if (machines == null) {
+			machines = new EObjectContainmentEList<Statemachine>(Statemachine.class, this, OCLStatesPackage.MODULE__MACHINES);
+		}
+		return machines;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case OCLStatesPackage.MODULE__MACHINES:
+				return ((InternalEList<?>)getMachines()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case OCLStatesPackage.MODULE__NAME:
+				return getName();
+			case OCLStatesPackage.MODULE__MACHINES:
+				return getMachines();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case OCLStatesPackage.MODULE__NAME:
+				setName((String)newValue);
+				return;
+			case OCLStatesPackage.MODULE__MACHINES:
+				getMachines().clear();
+				getMachines().addAll((Collection<? extends Statemachine>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case OCLStatesPackage.MODULE__NAME:
+				setName(NAME_EDEFAULT);
+				return;
+			case OCLStatesPackage.MODULE__MACHINES:
+				getMachines().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case OCLStatesPackage.MODULE__NAME:
+				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+			case OCLStatesPackage.MODULE__MACHINES:
+				return machines != null && !machines.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (name: ");
+		result.append(name);
+		result.append(')');
+		return result.toString();
+	}
+
+} //ModuleImpl
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/OCLStatesFactoryImpl.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/OCLStatesFactoryImpl.java
new file mode 100644
index 0000000..8dc10df
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/OCLStatesFactoryImpl.java
@@ -0,0 +1,165 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: OCLStatesFactoryImpl.java,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class OCLStatesFactoryImpl extends EFactoryImpl implements OCLStatesFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static OCLStatesFactory init() {
+		try {
+			OCLStatesFactory theOCLStatesFactory = (OCLStatesFactory)EPackage.Registry.INSTANCE.getEFactory("http://ocl.eclipse.org/tutorial/eclipsecon2011/OCLStates"); 
+			if (theOCLStatesFactory != null) {
+				return theOCLStatesFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new OCLStatesFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public OCLStatesFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case OCLStatesPackage.MODULE: return createModule();
+			case OCLStatesPackage.STATEMACHINE: return createStatemachine();
+			case OCLStatesPackage.EVENT: return createEvent();
+			case OCLStatesPackage.STATE: return createState();
+			case OCLStatesPackage.SIMPLE_STATE: return createSimpleState();
+			case OCLStatesPackage.COMPOUND_STATE: return createCompoundState();
+			case OCLStatesPackage.TRANSITION: return createTransition();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Module createModule() {
+		ModuleImpl module = new ModuleImpl();
+		return module;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Statemachine createStatemachine() {
+		StatemachineImpl statemachine = new StatemachineImpl();
+		return statemachine;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Event createEvent() {
+		EventImpl event = new EventImpl();
+		return event;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public State createState() {
+		StateImpl state = new StateImpl();
+		return state;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SimpleState createSimpleState() {
+		SimpleStateImpl simpleState = new SimpleStateImpl();
+		return simpleState;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CompoundState createCompoundState() {
+		CompoundStateImpl compoundState = new CompoundStateImpl();
+		return compoundState;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Transition createTransition() {
+		TransitionImpl transition = new TransitionImpl();
+		return transition;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public OCLStatesPackage getOCLStatesPackage() {
+		return (OCLStatesPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static OCLStatesPackage getPackage() {
+		return OCLStatesPackage.eINSTANCE;
+	}
+
+} //OCLStatesFactoryImpl
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/OCLStatesPackageImpl.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/OCLStatesPackageImpl.java
new file mode 100644
index 0000000..7557b7b
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/OCLStatesPackageImpl.java
@@ -0,0 +1,559 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: OCLStatesPackageImpl.java,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EValidator;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.CompoundState;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Event;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Module;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesFactory;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.SimpleState;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Transition;
+
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.util.OCLStatesValidator;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class OCLStatesPackageImpl extends EPackageImpl implements OCLStatesPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass moduleEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass statemachineEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass eventEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass stateEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass simpleStateEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass compoundStateEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass transitionEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private OCLStatesPackageImpl() {
+		super(eNS_URI, OCLStatesFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link OCLStatesPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static OCLStatesPackage init() {
+		if (isInited) return (OCLStatesPackage)EPackage.Registry.INSTANCE.getEPackage(OCLStatesPackage.eNS_URI);
+
+		// Obtain or create and register package
+		OCLStatesPackageImpl theOCLStatesPackage = (OCLStatesPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof OCLStatesPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new OCLStatesPackageImpl());
+
+		isInited = true;
+
+		// Create package meta-data objects
+		theOCLStatesPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theOCLStatesPackage.initializePackageContents();
+
+		// Register package validator
+		EValidator.Registry.INSTANCE.put
+			(theOCLStatesPackage, 
+			 new EValidator.Descriptor() {
+				 public EValidator getEValidator() {
+					 return OCLStatesValidator.INSTANCE;
+				 }
+			 });
+
+		// Mark meta-data to indicate it can't be changed
+		theOCLStatesPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(OCLStatesPackage.eNS_URI, theOCLStatesPackage);
+		return theOCLStatesPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getModule() {
+		return moduleEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getModule_Name() {
+		return (EAttribute)moduleEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getModule_Machines() {
+		return (EReference)moduleEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStatemachine() {
+		return statemachineEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getStatemachine_Initial() {
+		return (EAttribute)statemachineEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getStatemachine_Name() {
+		return (EAttribute)statemachineEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getStatemachine_Value() {
+		return (EAttribute)statemachineEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getStatemachine_Events() {
+		return (EReference)statemachineEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getStatemachine_States() {
+		return (EReference)statemachineEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getEvent() {
+		return eventEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getEvent_Name() {
+		return (EAttribute)eventEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getState() {
+		return stateEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getState_Initial() {
+		return (EAttribute)stateEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getState_Name() {
+		return (EAttribute)stateEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getState_Transitions() {
+		return (EReference)stateEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getState_Statemachine() {
+		return (EReference)stateEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSimpleState() {
+		return simpleStateEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSimpleState_Value() {
+		return (EAttribute)simpleStateEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getCompoundState() {
+		return compoundStateEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getCompoundState_Machine() {
+		return (EReference)compoundStateEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTransition() {
+		return transitionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getTransition_Event() {
+		return (EReference)transitionEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getTransition_State() {
+		return (EReference)transitionEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public OCLStatesFactory getOCLStatesFactory() {
+		return (OCLStatesFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		moduleEClass = createEClass(MODULE);
+		createEAttribute(moduleEClass, MODULE__NAME);
+		createEReference(moduleEClass, MODULE__MACHINES);
+
+		statemachineEClass = createEClass(STATEMACHINE);
+		createEAttribute(statemachineEClass, STATEMACHINE__INITIAL);
+		createEAttribute(statemachineEClass, STATEMACHINE__NAME);
+		createEAttribute(statemachineEClass, STATEMACHINE__VALUE);
+		createEReference(statemachineEClass, STATEMACHINE__EVENTS);
+		createEReference(statemachineEClass, STATEMACHINE__STATES);
+
+		eventEClass = createEClass(EVENT);
+		createEAttribute(eventEClass, EVENT__NAME);
+
+		stateEClass = createEClass(STATE);
+		createEAttribute(stateEClass, STATE__INITIAL);
+		createEAttribute(stateEClass, STATE__NAME);
+		createEReference(stateEClass, STATE__TRANSITIONS);
+		createEReference(stateEClass, STATE__STATEMACHINE);
+
+		simpleStateEClass = createEClass(SIMPLE_STATE);
+		createEAttribute(simpleStateEClass, SIMPLE_STATE__VALUE);
+
+		compoundStateEClass = createEClass(COMPOUND_STATE);
+		createEReference(compoundStateEClass, COMPOUND_STATE__MACHINE);
+
+		transitionEClass = createEClass(TRANSITION);
+		createEReference(transitionEClass, TRANSITION__EVENT);
+		createEReference(transitionEClass, TRANSITION__STATE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		simpleStateEClass.getESuperTypes().add(this.getState());
+		compoundStateEClass.getESuperTypes().add(this.getState());
+
+		// Initialize classes, features, and operations; add parameters
+		initEClass(moduleEClass, Module.class, "Module", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getModule_Name(), ecorePackage.getEString(), "name", null, 0, 1, Module.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getModule_Machines(), this.getStatemachine(), null, "machines", null, 0, -1, Module.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(statemachineEClass, Statemachine.class, "Statemachine", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getStatemachine_Initial(), ecorePackage.getEBoolean(), "initial", null, 0, 1, Statemachine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getStatemachine_Name(), ecorePackage.getEString(), "name", null, 0, 1, Statemachine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getStatemachine_Value(), ecorePackage.getEInt(), "value", null, 0, 1, Statemachine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getStatemachine_Events(), this.getEvent(), null, "events", null, 0, -1, Statemachine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getStatemachine_States(), this.getState(), null, "states", null, 0, -1, Statemachine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(eventEClass, Event.class, "Event", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getEvent_Name(), ecorePackage.getEString(), "name", null, 0, 1, Event.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(stateEClass, State.class, "State", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getState_Initial(), ecorePackage.getEBoolean(), "initial", null, 0, 1, State.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getState_Name(), ecorePackage.getEString(), "name", null, 0, 1, State.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getState_Transitions(), this.getTransition(), null, "transitions", null, 0, -1, State.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getState_Statemachine(), this.getStatemachine(), null, "statemachine", null, 0, 1, State.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, !IS_ORDERED);
+
+		initEClass(simpleStateEClass, SimpleState.class, "SimpleState", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getSimpleState_Value(), ecorePackage.getEInt(), "value", null, 0, 1, SimpleState.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(compoundStateEClass, CompoundState.class, "CompoundState", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getCompoundState_Machine(), this.getStatemachine(), null, "machine", null, 0, 1, CompoundState.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(transitionEClass, Transition.class, "Transition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getTransition_Event(), this.getEvent(), null, "event", null, 0, 1, Transition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getTransition_State(), this.getState(), null, "state", null, 0, 1, Transition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		// Create resource
+		createResource(eNS_URI);
+
+		// Create annotations
+		// http://www.eclipse.org/emf/2002/Ecore
+		createEcoreAnnotations();
+		// http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot
+		createPivotAnnotations();
+	}
+
+	/**
+	 * Initializes the annotations for <b>http://www.eclipse.org/emf/2002/Ecore</b>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createEcoreAnnotations() {
+		String source = "http://www.eclipse.org/emf/2002/Ecore";		
+		addAnnotation
+		  (this, 
+		   source, 
+		   new String[] {
+			 "invocationDelegates", "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot",
+			 "settingDelegates", "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot",
+			 "validationDelegates", "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"
+		   });		
+		addAnnotation
+		  (statemachineEClass, 
+		   source, 
+		   new String[] {
+			 "constraints", "HasInitialState"
+		   });			
+		addAnnotation
+		  (stateEClass, 
+		   source, 
+		   new String[] {
+			 "constraints", "UniqueInitialState NameIsLeadingUpperCase NameLength EveryEventIsHandled"
+		   });		
+	}
+
+	/**
+	 * Initializes the annotations for <b>http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot</b>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createPivotAnnotations() {
+		String source = "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot";				
+		addAnnotation
+		  (statemachineEClass, 
+		   source, 
+		   new String[] {
+			 "HasInitialState", "(states)->exists(s : State | s.initial)",
+			 "HasInitialState$message", "\'No initial state\'"
+		   });			
+		addAnnotation
+		  (stateEClass, 
+		   source, 
+		   new String[] {
+			 "UniqueInitialState", "initial implies (((statemachine).states)->select(initial))->size() = 1",
+			 "UniqueInitialState$message", "\'There is more than one initial state\'",
+			 "NameIsLeadingUpperCase", "let firstLetter : String = (name).substring(1, 1) in firstLetter.toUpperCase() = firstLetter",
+			 "NameIsLeadingUpperCase$message", "\'\\\'\' + name + \'\\\' must be Leading Uppercase\'",
+			 "NameLength", "(name).size() >= 4",
+			 "NameLength$message", "\'\\\'\' + name + \'\\\' has \' + ((name).size()).toString() + \' characters when at least 4 wanted\'",
+			 "EveryEventIsHandled", "let allEvents : Set(Event) = ((statemachine).events)->asSet() in let myEvents : Set(Event) = ((self.transitions)->collect(event))->asSet() in (allEvents - myEvents)->isEmpty()",
+			 "EveryEventIsHandled$message", "let allEvents : Set(Event) = ((statemachine).events)->asSet() in let myEvents : Set(Event) = ((self.transitions)->collect(event))->asSet() in (allEvents - myEvents)->iterate(e : Event ; s : String = \'The following events are not handled:\' | s + \' \' + e.name)"
+		   });		
+		addAnnotation
+		  (getState_Statemachine(), 
+		   source, 
+		   new String[] {
+			 "derivation", "(oclContainer()).oclAsType(Statemachine)"
+		   });
+	}
+
+} //OCLStatesPackageImpl
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/SimpleStateImpl.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/SimpleStateImpl.java
new file mode 100644
index 0000000..7ff3c3f
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/SimpleStateImpl.java
@@ -0,0 +1,166 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: SimpleStateImpl.java,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.SimpleState;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Simple State</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.SimpleStateImpl#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class SimpleStateImpl extends StateImpl implements SimpleState {
+	/**
+	 * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int VALUE_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected int value = VALUE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SimpleStateImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return OCLStatesPackage.Literals.SIMPLE_STATE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getValue() {
+		return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setValue(int newValue) {
+		int oldValue = value;
+		value = newValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OCLStatesPackage.SIMPLE_STATE__VALUE, oldValue, value));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case OCLStatesPackage.SIMPLE_STATE__VALUE:
+				return getValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case OCLStatesPackage.SIMPLE_STATE__VALUE:
+				setValue((Integer)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case OCLStatesPackage.SIMPLE_STATE__VALUE:
+				setValue(VALUE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case OCLStatesPackage.SIMPLE_STATE__VALUE:
+				return value != VALUE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (value: ");
+		result.append(value);
+		result.append(')');
+		return result.toString();
+	}
+
+} //SimpleStateImpl
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/StateImpl.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/StateImpl.java
new file mode 100644
index 0000000..44ae331
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/StateImpl.java
@@ -0,0 +1,331 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: StateImpl.java,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Transition;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>State</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.StateImpl#isInitial <em>Initial</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.StateImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.StateImpl#getTransitions <em>Transitions</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.StateImpl#getStatemachine <em>Statemachine</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class StateImpl extends MinimalEObjectImpl.Container implements State {
+	/**
+	 * The default value of the '{@link #isInitial() <em>Initial</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isInitial()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean INITIAL_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isInitial() <em>Initial</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isInitial()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean initial = INITIAL_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String name = NAME_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getTransitions() <em>Transitions</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTransitions()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Transition> transitions;
+
+	/**
+	 * The cached setting delegate for the '{@link #getStatemachine() <em>Statemachine</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getStatemachine()
+	 * @generated
+	 * @ordered
+	 */
+	protected EStructuralFeature.Internal.SettingDelegate STATEMACHINE__ESETTING_DELEGATE = ((EStructuralFeature.Internal)OCLStatesPackage.Literals.STATE__STATEMACHINE).getSettingDelegate();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StateImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return OCLStatesPackage.Literals.STATE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isInitial() {
+		return initial;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setInitial(boolean newInitial) {
+		boolean oldInitial = initial;
+		initial = newInitial;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OCLStatesPackage.STATE__INITIAL, oldInitial, initial));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setName(String newName) {
+		String oldName = name;
+		name = newName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OCLStatesPackage.STATE__NAME, oldName, name));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Transition> getTransitions() {
+		if (transitions == null) {
+			transitions = new EObjectContainmentEList<Transition>(Transition.class, this, OCLStatesPackage.STATE__TRANSITIONS);
+		}
+		return transitions;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Statemachine getStatemachine() {
+		return (Statemachine)STATEMACHINE__ESETTING_DELEGATE.dynamicGet(this, null, 0, true, false);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Statemachine basicGetStatemachine() {
+		return (Statemachine)STATEMACHINE__ESETTING_DELEGATE.dynamicGet(this, null, 0, false, false);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStatemachine(Statemachine newStatemachine) {
+		STATEMACHINE__ESETTING_DELEGATE.dynamicSet(this, null, 0, newStatemachine);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case OCLStatesPackage.STATE__TRANSITIONS:
+				return ((InternalEList<?>)getTransitions()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case OCLStatesPackage.STATE__INITIAL:
+				return isInitial();
+			case OCLStatesPackage.STATE__NAME:
+				return getName();
+			case OCLStatesPackage.STATE__TRANSITIONS:
+				return getTransitions();
+			case OCLStatesPackage.STATE__STATEMACHINE:
+				if (resolve) return getStatemachine();
+				return basicGetStatemachine();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case OCLStatesPackage.STATE__INITIAL:
+				setInitial((Boolean)newValue);
+				return;
+			case OCLStatesPackage.STATE__NAME:
+				setName((String)newValue);
+				return;
+			case OCLStatesPackage.STATE__TRANSITIONS:
+				getTransitions().clear();
+				getTransitions().addAll((Collection<? extends Transition>)newValue);
+				return;
+			case OCLStatesPackage.STATE__STATEMACHINE:
+				setStatemachine((Statemachine)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case OCLStatesPackage.STATE__INITIAL:
+				setInitial(INITIAL_EDEFAULT);
+				return;
+			case OCLStatesPackage.STATE__NAME:
+				setName(NAME_EDEFAULT);
+				return;
+			case OCLStatesPackage.STATE__TRANSITIONS:
+				getTransitions().clear();
+				return;
+			case OCLStatesPackage.STATE__STATEMACHINE:
+				setStatemachine((Statemachine)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case OCLStatesPackage.STATE__INITIAL:
+				return initial != INITIAL_EDEFAULT;
+			case OCLStatesPackage.STATE__NAME:
+				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+			case OCLStatesPackage.STATE__TRANSITIONS:
+				return transitions != null && !transitions.isEmpty();
+			case OCLStatesPackage.STATE__STATEMACHINE:
+				return STATEMACHINE__ESETTING_DELEGATE.dynamicIsSet(this, null, 0);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (initial: ");
+		result.append(initial);
+		result.append(", name: ");
+		result.append(name);
+		result.append(')');
+		return result.toString();
+	}
+
+} //StateImpl
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/StatemachineImpl.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/StatemachineImpl.java
new file mode 100644
index 0000000..efee334
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/StatemachineImpl.java
@@ -0,0 +1,371 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: StatemachineImpl.java,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Event;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Statemachine</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.StatemachineImpl#isInitial <em>Initial</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.StatemachineImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.StatemachineImpl#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.StatemachineImpl#getEvents <em>Events</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.StatemachineImpl#getStates <em>States</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class StatemachineImpl extends MinimalEObjectImpl.Container implements Statemachine {
+	/**
+	 * The default value of the '{@link #isInitial() <em>Initial</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isInitial()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean INITIAL_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isInitial() <em>Initial</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isInitial()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean initial = INITIAL_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String name = NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int VALUE_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected int value = VALUE_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getEvents() <em>Events</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getEvents()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Event> events;
+
+	/**
+	 * The cached value of the '{@link #getStates() <em>States</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getStates()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<State> states;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StatemachineImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return OCLStatesPackage.Literals.STATEMACHINE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isInitial() {
+		return initial;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setInitial(boolean newInitial) {
+		boolean oldInitial = initial;
+		initial = newInitial;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OCLStatesPackage.STATEMACHINE__INITIAL, oldInitial, initial));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setName(String newName) {
+		String oldName = name;
+		name = newName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OCLStatesPackage.STATEMACHINE__NAME, oldName, name));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getValue() {
+		return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setValue(int newValue) {
+		int oldValue = value;
+		value = newValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OCLStatesPackage.STATEMACHINE__VALUE, oldValue, value));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Event> getEvents() {
+		if (events == null) {
+			events = new EObjectContainmentEList<Event>(Event.class, this, OCLStatesPackage.STATEMACHINE__EVENTS);
+		}
+		return events;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<State> getStates() {
+		if (states == null) {
+			states = new EObjectContainmentEList<State>(State.class, this, OCLStatesPackage.STATEMACHINE__STATES);
+		}
+		return states;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case OCLStatesPackage.STATEMACHINE__EVENTS:
+				return ((InternalEList<?>)getEvents()).basicRemove(otherEnd, msgs);
+			case OCLStatesPackage.STATEMACHINE__STATES:
+				return ((InternalEList<?>)getStates()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case OCLStatesPackage.STATEMACHINE__INITIAL:
+				return isInitial();
+			case OCLStatesPackage.STATEMACHINE__NAME:
+				return getName();
+			case OCLStatesPackage.STATEMACHINE__VALUE:
+				return getValue();
+			case OCLStatesPackage.STATEMACHINE__EVENTS:
+				return getEvents();
+			case OCLStatesPackage.STATEMACHINE__STATES:
+				return getStates();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case OCLStatesPackage.STATEMACHINE__INITIAL:
+				setInitial((Boolean)newValue);
+				return;
+			case OCLStatesPackage.STATEMACHINE__NAME:
+				setName((String)newValue);
+				return;
+			case OCLStatesPackage.STATEMACHINE__VALUE:
+				setValue((Integer)newValue);
+				return;
+			case OCLStatesPackage.STATEMACHINE__EVENTS:
+				getEvents().clear();
+				getEvents().addAll((Collection<? extends Event>)newValue);
+				return;
+			case OCLStatesPackage.STATEMACHINE__STATES:
+				getStates().clear();
+				getStates().addAll((Collection<? extends State>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case OCLStatesPackage.STATEMACHINE__INITIAL:
+				setInitial(INITIAL_EDEFAULT);
+				return;
+			case OCLStatesPackage.STATEMACHINE__NAME:
+				setName(NAME_EDEFAULT);
+				return;
+			case OCLStatesPackage.STATEMACHINE__VALUE:
+				setValue(VALUE_EDEFAULT);
+				return;
+			case OCLStatesPackage.STATEMACHINE__EVENTS:
+				getEvents().clear();
+				return;
+			case OCLStatesPackage.STATEMACHINE__STATES:
+				getStates().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case OCLStatesPackage.STATEMACHINE__INITIAL:
+				return initial != INITIAL_EDEFAULT;
+			case OCLStatesPackage.STATEMACHINE__NAME:
+				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+			case OCLStatesPackage.STATEMACHINE__VALUE:
+				return value != VALUE_EDEFAULT;
+			case OCLStatesPackage.STATEMACHINE__EVENTS:
+				return events != null && !events.isEmpty();
+			case OCLStatesPackage.STATEMACHINE__STATES:
+				return states != null && !states.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (initial: ");
+		result.append(initial);
+		result.append(", name: ");
+		result.append(name);
+		result.append(", value: ");
+		result.append(value);
+		result.append(')');
+		return result.toString();
+	}
+
+} //StatemachineImpl
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/TransitionImpl.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/TransitionImpl.java
new file mode 100644
index 0000000..b3cfde6
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/impl/TransitionImpl.java
@@ -0,0 +1,222 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: TransitionImpl.java,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Event;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Transition;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Transition</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.TransitionImpl#getEvent <em>Event</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.impl.TransitionImpl#getState <em>State</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class TransitionImpl extends MinimalEObjectImpl.Container implements Transition {
+	/**
+	 * The cached value of the '{@link #getEvent() <em>Event</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getEvent()
+	 * @generated
+	 * @ordered
+	 */
+	protected Event event;
+
+	/**
+	 * The cached value of the '{@link #getState() <em>State</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getState()
+	 * @generated
+	 * @ordered
+	 */
+	protected State state;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TransitionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return OCLStatesPackage.Literals.TRANSITION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Event getEvent() {
+		if (event != null && event.eIsProxy()) {
+			InternalEObject oldEvent = (InternalEObject)event;
+			event = (Event)eResolveProxy(oldEvent);
+			if (event != oldEvent) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, OCLStatesPackage.TRANSITION__EVENT, oldEvent, event));
+			}
+		}
+		return event;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Event basicGetEvent() {
+		return event;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setEvent(Event newEvent) {
+		Event oldEvent = event;
+		event = newEvent;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OCLStatesPackage.TRANSITION__EVENT, oldEvent, event));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public State getState() {
+		if (state != null && state.eIsProxy()) {
+			InternalEObject oldState = (InternalEObject)state;
+			state = (State)eResolveProxy(oldState);
+			if (state != oldState) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, OCLStatesPackage.TRANSITION__STATE, oldState, state));
+			}
+		}
+		return state;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public State basicGetState() {
+		return state;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setState(State newState) {
+		State oldState = state;
+		state = newState;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OCLStatesPackage.TRANSITION__STATE, oldState, state));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case OCLStatesPackage.TRANSITION__EVENT:
+				if (resolve) return getEvent();
+				return basicGetEvent();
+			case OCLStatesPackage.TRANSITION__STATE:
+				if (resolve) return getState();
+				return basicGetState();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case OCLStatesPackage.TRANSITION__EVENT:
+				setEvent((Event)newValue);
+				return;
+			case OCLStatesPackage.TRANSITION__STATE:
+				setState((State)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case OCLStatesPackage.TRANSITION__EVENT:
+				setEvent((Event)null);
+				return;
+			case OCLStatesPackage.TRANSITION__STATE:
+				setState((State)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case OCLStatesPackage.TRANSITION__EVENT:
+				return event != null;
+			case OCLStatesPackage.TRANSITION__STATE:
+				return state != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //TransitionImpl
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/util/OCLStatesAdapterFactory.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/util/OCLStatesAdapterFactory.java
new file mode 100644
index 0000000..d270a35
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/util/OCLStatesAdapterFactory.java
@@ -0,0 +1,232 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: OCLStatesAdapterFactory.java,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage
+ * @generated
+ */
+public class OCLStatesAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static OCLStatesPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public OCLStatesAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = OCLStatesPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected OCLStatesSwitch<Adapter> modelSwitch =
+		new OCLStatesSwitch<Adapter>() {
+			@Override
+			public Adapter caseModule(Module object) {
+				return createModuleAdapter();
+			}
+			@Override
+			public Adapter caseStatemachine(Statemachine object) {
+				return createStatemachineAdapter();
+			}
+			@Override
+			public Adapter caseEvent(Event object) {
+				return createEventAdapter();
+			}
+			@Override
+			public Adapter caseState(State object) {
+				return createStateAdapter();
+			}
+			@Override
+			public Adapter caseSimpleState(SimpleState object) {
+				return createSimpleStateAdapter();
+			}
+			@Override
+			public Adapter caseCompoundState(CompoundState object) {
+				return createCompoundStateAdapter();
+			}
+			@Override
+			public Adapter caseTransition(Transition object) {
+				return createTransitionAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Module <em>Module</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Module
+	 * @generated
+	 */
+	public Adapter createModuleAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine <em>Statemachine</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine
+	 * @generated
+	 */
+	public Adapter createStatemachineAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Event <em>Event</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Event
+	 * @generated
+	 */
+	public Adapter createEventAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State <em>State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State
+	 * @generated
+	 */
+	public Adapter createStateAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.SimpleState <em>Simple State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.SimpleState
+	 * @generated
+	 */
+	public Adapter createSimpleStateAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.CompoundState <em>Compound State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.CompoundState
+	 * @generated
+	 */
+	public Adapter createCompoundStateAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Transition <em>Transition</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Transition
+	 * @generated
+	 */
+	public Adapter createTransitionAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //OCLStatesAdapterFactory
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/util/OCLStatesSwitch.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/util/OCLStatesSwitch.java
new file mode 100644
index 0000000..dbe762d
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/util/OCLStatesSwitch.java
@@ -0,0 +1,242 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: OCLStatesSwitch.java,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.util;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage
+ * @generated
+ */
+public class OCLStatesSwitch<T> extends Switch<T> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static OCLStatesPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public OCLStatesSwitch() {
+		if (modelPackage == null) {
+			modelPackage = OCLStatesPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Checks whether this is a switch for the given package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @parameter ePackage the package in question.
+	 * @return whether this is a switch for the given package.
+	 * @generated
+	 */
+	@Override
+	protected boolean isSwitchFor(EPackage ePackage) {
+		return ePackage == modelPackage;
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	@Override
+	protected T doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case OCLStatesPackage.MODULE: {
+				Module module = (Module)theEObject;
+				T result = caseModule(module);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case OCLStatesPackage.STATEMACHINE: {
+				Statemachine statemachine = (Statemachine)theEObject;
+				T result = caseStatemachine(statemachine);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case OCLStatesPackage.EVENT: {
+				Event event = (Event)theEObject;
+				T result = caseEvent(event);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case OCLStatesPackage.STATE: {
+				State state = (State)theEObject;
+				T result = caseState(state);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case OCLStatesPackage.SIMPLE_STATE: {
+				SimpleState simpleState = (SimpleState)theEObject;
+				T result = caseSimpleState(simpleState);
+				if (result == null) result = caseState(simpleState);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case OCLStatesPackage.COMPOUND_STATE: {
+				CompoundState compoundState = (CompoundState)theEObject;
+				T result = caseCompoundState(compoundState);
+				if (result == null) result = caseState(compoundState);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case OCLStatesPackage.TRANSITION: {
+				Transition transition = (Transition)theEObject;
+				T result = caseTransition(transition);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Module</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Module</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseModule(Module object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Statemachine</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Statemachine</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseStatemachine(Statemachine object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Event</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Event</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseEvent(Event object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>State</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>State</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseState(State object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Simple State</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Simple State</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseSimpleState(SimpleState object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Compound State</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Compound State</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseCompoundState(CompoundState object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Transition</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Transition</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseTransition(Transition object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	@Override
+	public T defaultCase(EObject object) {
+		return null;
+	}
+
+} //OCLStatesSwitch
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/util/OCLStatesValidator.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/util/OCLStatesValidator.java
new file mode 100644
index 0000000..14dd7dc
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen/org/eclipse/ocl/tutorial/eclipsecon2011/oclstates/util/OCLStatesValidator.java
@@ -0,0 +1,387 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: OCLStatesValidator.java,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.util;
+
+import java.util.Map;
+
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.DiagnosticChain;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.ocl.examples.xtext.oclinecore.validation.OCLinEcoreEObjectValidator;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.CompoundState;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Event;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Module;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.SimpleState;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.State;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Statemachine;
+import org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.Transition;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Validator</b> for the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage
+ * @generated not
+ */
+public class OCLStatesValidator extends OCLinEcoreEObjectValidator {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final OCLStatesValidator INSTANCE = new OCLStatesValidator();
+
+	/**
+	 * A constant for the {@link org.eclipse.emf.common.util.Diagnostic#getSource() source} of diagnostic {@link org.eclipse.emf.common.util.Diagnostic#getCode() codes} from this package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.common.util.Diagnostic#getSource()
+	 * @see org.eclipse.emf.common.util.Diagnostic#getCode()
+	 * @generated
+	 */
+	public static final String DIAGNOSTIC_SOURCE = "org.eclipse.ocl.tutorial.eclipsecon2011.oclstates";
+
+	/**
+	 * A constant with a fixed name that can be used as the base value for additional hand written constants.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final int GENERATED_DIAGNOSTIC_CODE_COUNT = 0;
+
+	/**
+	 * A constant with a fixed name that can be used as the base value for additional hand written constants in a derived class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static final int DIAGNOSTIC_CODE_COUNT = GENERATED_DIAGNOSTIC_CODE_COUNT;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public OCLStatesValidator() {
+		super();
+	}
+
+	/**
+	 * Returns the package of this validator switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EPackage getEPackage() {
+	  return OCLStatesPackage.eINSTANCE;
+	}
+
+	/**
+	 * Calls <code>validateXXX</code> for the corresponding classifier of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean validate(int classifierID, Object value, DiagnosticChain diagnostics, Map<Object, Object> context) {
+		switch (classifierID) {
+			case OCLStatesPackage.MODULE:
+				return validateModule((Module)value, diagnostics, context);
+			case OCLStatesPackage.STATEMACHINE:
+				return validateStatemachine((Statemachine)value, diagnostics, context);
+			case OCLStatesPackage.EVENT:
+				return validateEvent((Event)value, diagnostics, context);
+			case OCLStatesPackage.STATE:
+				return validateState((State)value, diagnostics, context);
+			case OCLStatesPackage.SIMPLE_STATE:
+				return validateSimpleState((SimpleState)value, diagnostics, context);
+			case OCLStatesPackage.COMPOUND_STATE:
+				return validateCompoundState((CompoundState)value, diagnostics, context);
+			case OCLStatesPackage.TRANSITION:
+				return validateTransition((Transition)value, diagnostics, context);
+			default:
+				return true;
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateModule(Module module, DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return validate_EveryDefaultConstraint(module, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateStatemachine(Statemachine statemachine, DiagnosticChain diagnostics, Map<Object, Object> context) {
+		if (!validate_NoCircularContainment(statemachine, diagnostics, context)) return false;
+		boolean result = validate_EveryMultiplicityConforms(statemachine, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryDataValueConforms(statemachine, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(statemachine, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(statemachine, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryProxyResolves(statemachine, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_UniqueID(statemachine, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryKeyUnique(statemachine, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(statemachine, diagnostics, context);
+		if (result || diagnostics != null) result &= validateStatemachine_HasInitialState(statemachine, diagnostics, context);
+		return result;
+	}
+
+	/**
+	 * The cached validation expression for the HasInitialState constraint of '<em>Statemachine</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static final String STATEMACHINE__HAS_INITIAL_STATE__EEXPRESSION = "(states)->exists(s : State | s.initial)";
+
+	/**
+	 * Validates the HasInitialState constraint of '<em>Statemachine</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateStatemachine_HasInitialState(Statemachine statemachine, DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return
+			validate
+				(OCLStatesPackage.Literals.STATEMACHINE,
+				 statemachine,
+				 diagnostics,
+				 context,
+				 "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot",
+				 "HasInitialState",
+				 STATEMACHINE__HAS_INITIAL_STATE__EEXPRESSION,
+				 Diagnostic.ERROR,
+				 DIAGNOSTIC_SOURCE,
+				 0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateEvent(Event event, DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return validate_EveryDefaultConstraint(event, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateState(State state, DiagnosticChain diagnostics, Map<Object, Object> context) {
+		if (!validate_NoCircularContainment(state, diagnostics, context)) return false;
+		boolean result = validate_EveryMultiplicityConforms(state, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryDataValueConforms(state, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(state, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(state, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryProxyResolves(state, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_UniqueID(state, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryKeyUnique(state, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(state, diagnostics, context);
+		if (result || diagnostics != null) result &= validateState_UniqueInitialState(state, diagnostics, context);
+		if (result || diagnostics != null) result &= validateState_NameIsLeadingUpperCase(state, diagnostics, context);
+		if (result || diagnostics != null) result &= validateState_NameLength(state, diagnostics, context);
+		if (result || diagnostics != null) result &= validateState_EveryEventIsHandled(state, diagnostics, context);
+		return result;
+	}
+
+	/**
+	 * The cached validation expression for the NameIsLeadingUpperCase constraint of '<em>State</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static final String STATE__NAME_IS_LEADING_UPPER_CASE__EEXPRESSION = "let firstLetter : String = (name).substring(1, 1) in firstLetter.toUpperCase() = firstLetter";
+
+	/**
+	 * Validates the NameIsLeadingUpperCase constraint of '<em>State</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateState_NameIsLeadingUpperCase(State state, DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return
+			validate
+				(OCLStatesPackage.Literals.STATE,
+				 state,
+				 diagnostics,
+				 context,
+				 "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot",
+				 "NameIsLeadingUpperCase",
+				 STATE__NAME_IS_LEADING_UPPER_CASE__EEXPRESSION,
+				 Diagnostic.ERROR,
+				 DIAGNOSTIC_SOURCE,
+				 0);
+	}
+
+	/**
+	 * The cached validation expression for the NameLength constraint of '<em>State</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static final String STATE__NAME_LENGTH__EEXPRESSION = "(name).size() >= 4";
+
+	/**
+	 * Validates the NameLength constraint of '<em>State</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateState_NameLength(State state, DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return
+			validate
+				(OCLStatesPackage.Literals.STATE,
+				 state,
+				 diagnostics,
+				 context,
+				 "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot",
+				 "NameLength",
+				 STATE__NAME_LENGTH__EEXPRESSION,
+				 Diagnostic.ERROR,
+				 DIAGNOSTIC_SOURCE,
+				 0);
+	}
+
+	/**
+	 * The cached validation expression for the UniqueInitialState constraint of '<em>State</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static final String STATE__UNIQUE_INITIAL_STATE__EEXPRESSION = "initial implies (((statemachine).states)->select(initial))->size() = 1";
+
+	/**
+	 * Validates the UniqueInitialState constraint of '<em>State</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateState_UniqueInitialState(State state, DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return
+			validate
+				(OCLStatesPackage.Literals.STATE,
+				 state,
+				 diagnostics,
+				 context,
+				 "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot",
+				 "UniqueInitialState",
+				 STATE__UNIQUE_INITIAL_STATE__EEXPRESSION,
+				 Diagnostic.ERROR,
+				 DIAGNOSTIC_SOURCE,
+				 0);
+	}
+
+	/**
+	 * The cached validation expression for the EveryEventIsHandled constraint of '<em>State</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static final String STATE__EVERY_EVENT_IS_HANDLED__EEXPRESSION = "let allEvents : Set(Event) = ((statemachine).events)->asSet() in let myEvents : Set(Event) = ((self.transitions)->collect(event))->asSet() in (allEvents - myEvents)->isEmpty()";
+
+	/**
+	 * Validates the EveryEventIsHandled constraint of '<em>State</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateState_EveryEventIsHandled(State state, DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return
+			validate
+				(OCLStatesPackage.Literals.STATE,
+				 state,
+				 diagnostics,
+				 context,
+				 "http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot",
+				 "EveryEventIsHandled",
+				 STATE__EVERY_EVENT_IS_HANDLED__EEXPRESSION,
+				 Diagnostic.ERROR,
+				 DIAGNOSTIC_SOURCE,
+				 0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateSimpleState(SimpleState simpleState, DiagnosticChain diagnostics, Map<Object, Object> context) {
+		if (!validate_NoCircularContainment(simpleState, diagnostics, context)) return false;
+		boolean result = validate_EveryMultiplicityConforms(simpleState, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryDataValueConforms(simpleState, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(simpleState, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(simpleState, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryProxyResolves(simpleState, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_UniqueID(simpleState, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryKeyUnique(simpleState, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(simpleState, diagnostics, context);
+		if (result || diagnostics != null) result &= validateState_UniqueInitialState(simpleState, diagnostics, context);
+		if (result || diagnostics != null) result &= validateState_NameIsLeadingUpperCase(simpleState, diagnostics, context);
+		if (result || diagnostics != null) result &= validateState_NameLength(simpleState, diagnostics, context);
+		if (result || diagnostics != null) result &= validateState_EveryEventIsHandled(simpleState, diagnostics, context);
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateCompoundState(CompoundState compoundState, DiagnosticChain diagnostics, Map<Object, Object> context) {
+		if (!validate_NoCircularContainment(compoundState, diagnostics, context)) return false;
+		boolean result = validate_EveryMultiplicityConforms(compoundState, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryDataValueConforms(compoundState, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(compoundState, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(compoundState, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryProxyResolves(compoundState, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_UniqueID(compoundState, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryKeyUnique(compoundState, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(compoundState, diagnostics, context);
+		if (result || diagnostics != null) result &= validateState_UniqueInitialState(compoundState, diagnostics, context);
+		if (result || diagnostics != null) result &= validateState_NameIsLeadingUpperCase(compoundState, diagnostics, context);
+		if (result || diagnostics != null) result &= validateState_NameLength(compoundState, diagnostics, context);
+		if (result || diagnostics != null) result &= validateState_EveryEventIsHandled(compoundState, diagnostics, context);
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateTransition(Transition transition, DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return validate_EveryDefaultConstraint(transition, diagnostics, context);
+	}
+
+	/**
+	 * Returns the resource locator that will be used to fetch messages for this validator's diagnostics.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		// TODO
+		// Specialize this to return a resource locator for messages specific to this validator.
+		// Ensure that you remove @generated or mark it @generated NOT
+		return super.getResourceLocator();
+	}
+
+} //OCLStatesValidator
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/model/OCLStates.ecore b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/model/OCLStates.ecore
new file mode 100644
index 0000000..b77d3b6
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/model/OCLStates.ecore
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="oclstates"
+    nsURI="http://ocl.eclipse.org/tutorial/eclipsecon2011/OCLStates" nsPrefix="oclstates">
+  <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+    <details key="invocationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
+    <details key="settingDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
+    <details key="validationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
+  </eAnnotations>
+  <eClassifiers xsi:type="ecore:EClass" name="Module">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="machines" upperBound="-1"
+        eType="#//Statemachine" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Statemachine">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="HasInitialState"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="HasInitialState" value="(states)->exists(s : State | s.initial)"/>
+      <details key="HasInitialState$message" value="'No initial state'"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="initial" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="events" upperBound="-1"
+        eType="#//Event" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="states" upperBound="-1"
+        eType="#//State" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Event">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="State">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="UniqueInitialState NameIsLeadingUpperCase NameLength EveryEventIsHandled"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="UniqueInitialState" value="initial implies (((statemachine).states)->select(initial))->size() = 1"/>
+      <details key="UniqueInitialState$message" value="'There is more than one initial state'"/>
+      <details key="NameIsLeadingUpperCase" value="let firstLetter : String = (name).substring(1, 1) in firstLetter.toUpperCase() = firstLetter"/>
+      <details key="NameIsLeadingUpperCase$message" value="'\'' + name + '\' must be Leading Uppercase'"/>
+      <details key="NameLength" value="(name).size() >= 4"/>
+      <details key="NameLength$message" value="'\'' + name + '\' has ' + ((name).size()).toString() + ' characters when at least 4 wanted'"/>
+      <details key="EveryEventIsHandled" value="let allEvents : Set(Event) = ((statemachine).events)->asSet() in let myEvents : Set(Event) = ((self.transitions)->collect(event))->asSet() in (allEvents - myEvents)->isEmpty()"/>
+      <details key="EveryEventIsHandled$message" value="let allEvents : Set(Event) = ((statemachine).events)->asSet() in let myEvents : Set(Event) = ((self.transitions)->collect(event))->asSet() in (allEvents - myEvents)->iterate(e : Event ; s : String = 'The following events are not handled:' | s + ' ' + e.name)"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="initial" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="transitions" upperBound="-1"
+        eType="#//Transition" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="statemachine" ordered="false"
+        eType="#//Statemachine" derived="true">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+        <details key="derivation" value="(oclContainer()).oclAsType(Statemachine)"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SimpleState" eSuperTypes="#//State">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="CompoundState" eSuperTypes="#//State">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="machine" eType="#//Statemachine"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Transition">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="event" eType="#//Event"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="state" eType="#//State"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/model/OCLStates.genmodel b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/model/OCLStates.genmodel
new file mode 100644
index 0000000..14f0456
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/model/OCLStates.genmodel
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/emf-gen"
+    modelPluginID="org.eclipse.ocl.tutorial.eclipsecon2011.oclstates" forceOverwrite="true"
+    modelName="OCLStates" updateClasspath="false" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
+    importerID="org.eclipse.emf.importer.ecore" complianceLevel="5.0" copyrightFields="false"
+    interfaceNamePattern="" operationReflection="true">
+  <foreignModel>OCLStates.ecore</foreignModel>
+  <genPackages prefix="OCLStates" basePackage="org.eclipse.ocl.tutorial.eclipsecon2011"
+      disposableProviderFactory="true" ecorePackage="OCLStates.ecore#/">
+    <genClasses ecoreClass="OCLStates.ecore#//Module">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute OCLStates.ecore#//Module/name"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference OCLStates.ecore#//Module/machines"/>
+    </genClasses>
+    <genClasses ecoreClass="OCLStates.ecore#//Statemachine">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute OCLStates.ecore#//Statemachine/initial"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute OCLStates.ecore#//Statemachine/name"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute OCLStates.ecore#//Statemachine/value"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference OCLStates.ecore#//Statemachine/events"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference OCLStates.ecore#//Statemachine/states"/>
+    </genClasses>
+    <genClasses ecoreClass="OCLStates.ecore#//Event">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute OCLStates.ecore#//Event/name"/>
+    </genClasses>
+    <genClasses ecoreClass="OCLStates.ecore#//State">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute OCLStates.ecore#//State/initial"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute OCLStates.ecore#//State/name"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference OCLStates.ecore#//State/transitions"/>
+    </genClasses>
+    <genClasses ecoreClass="OCLStates.ecore#//SimpleState">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute OCLStates.ecore#//SimpleState/value"/>
+    </genClasses>
+    <genClasses ecoreClass="OCLStates.ecore#//CompoundState">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference OCLStates.ecore#//CompoundState/machine"/>
+    </genClasses>
+    <genClasses ecoreClass="OCLStates.ecore#//Transition">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference OCLStates.ecore#//Transition/event"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference OCLStates.ecore#//Transition/state"/>
+    </genClasses>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/plugin.properties b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/plugin.properties
new file mode 100644
index 0000000..8df05f2
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/plugin.properties
@@ -0,0 +1,8 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id: plugin.properties,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+
+pluginName = FowlerDsl Model
+providerName = www.example.org
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/plugin.xml b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/plugin.xml
new file mode 100644
index 0000000..1d39cbe
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/plugin.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ </copyright>
+
+ $Id: plugin.xml,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+-->
+
+<plugin>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <package
+            uri="http://ocl.eclipse.org/tutorial/eclipsecon2011/OCLStates"
+            class="org.eclipse.ocl.tutorial.eclipsecon2011.oclstates.OCLStatesPackage"
+            genModel="model/OCLStates.genmodel"/>
+   </extension>
+
+</plugin>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/AbstractOCLStatesRuntimeModule.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/AbstractOCLStatesRuntimeModule.java
new file mode 100644
index 0000000..bd9f9f3
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/AbstractOCLStatesRuntimeModule.java
@@ -0,0 +1,92 @@
+/*
+ * generated by Xtext
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011;
+
+import java.util.Properties;
+
+import org.eclipse.xtext.Constants;
+import org.eclipse.xtext.service.DefaultRuntimeModule;
+
+import com.google.inject.Binder;
+import com.google.inject.name.Names;
+
+/**
+ * Manual modifications go to {org.eclipse.ocl.tutorial.eclipsecon2011.OCLStatesRuntimeModule}
+ */
+ @SuppressWarnings("all")
+public abstract class AbstractOCLStatesRuntimeModule extends DefaultRuntimeModule {
+
+	protected Properties properties = null;
+
+	@Override
+	public void configure(Binder binder) {
+		properties = tryBindProperties(binder, "org/eclipse/ocl/tutorial/eclipsecon2011/OCLStates.properties");
+		super.configure(binder);
+	}
+	
+	public void configureLanguageName(Binder binder) {
+		binder.bind(String.class).annotatedWith(Names.named(Constants.LANGUAGE_NAME)).toInstance("org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates");
+	}
+	
+	public void configureFileExtensions(Binder binder) {
+		if (properties == null || properties.getProperty(Constants.FILE_EXTENSIONS) == null)
+			binder.bind(String.class).annotatedWith(Names.named(Constants.FILE_EXTENSIONS)).toInstance("oclstates");
+	}
+	
+	// contributed by org.eclipse.xtext.generator.grammarAccess.GrammarAccessFragment
+	public Class<? extends org.eclipse.xtext.IGrammarAccess> bindIGrammarAccess() {
+		return org.eclipse.ocl.tutorial.eclipsecon2011.services.OCLStatesGrammarAccess.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parseTreeConstructor.ParseTreeConstructorFragment
+	public Class<? extends org.eclipse.xtext.parsetree.reconstr.IParseTreeConstructor> bindIParseTreeConstructor() {
+		return org.eclipse.ocl.tutorial.eclipsecon2011.parseTreeConstruction.OCLStatesParsetreeConstructor.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.IParser> bindIParser() {
+		return org.eclipse.ocl.tutorial.eclipsecon2011.parser.antlr.OCLStatesParser.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.ITokenToStringConverter> bindITokenToStringConverter() {
+		return org.eclipse.xtext.parser.antlr.AntlrTokenToStringConverter.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.antlr.IAntlrTokenFileProvider> bindIAntlrTokenFileProvider() {
+		return org.eclipse.ocl.tutorial.eclipsecon2011.parser.antlr.OCLStatesAntlrTokenFileProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.antlr.Lexer> bindLexer() {
+		return org.eclipse.ocl.tutorial.eclipsecon2011.parser.antlr.internal.InternalOCLStatesLexer.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public com.google.inject.Provider<org.eclipse.ocl.tutorial.eclipsecon2011.parser.antlr.internal.InternalOCLStatesLexer> provideInternalOCLStatesLexer() {
+		return org.eclipse.xtext.parser.antlr.LexerProvider.create(org.eclipse.ocl.tutorial.eclipsecon2011.parser.antlr.internal.InternalOCLStatesLexer.class);
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public void configureRuntimeLexer(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.parser.antlr.Lexer.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.parser.antlr.LexerBindings.RUNTIME)).to(org.eclipse.ocl.tutorial.eclipsecon2011.parser.antlr.internal.InternalOCLStatesLexer.class);
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.antlr.ITokenDefProvider> bindITokenDefProvider() {
+		return org.eclipse.xtext.parser.antlr.AntlrTokenDefProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.validation.JavaValidatorFragment
+	@org.eclipse.xtext.service.SingletonBinding(eager=true)	public Class<? extends org.eclipse.ocl.tutorial.eclipsecon2011.validation.OCLStatesJavaValidator> bindOCLStatesJavaValidator() {
+		return org.eclipse.ocl.tutorial.eclipsecon2011.validation.OCLStatesJavaValidator.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.formatting.FormatterFragment
+	public Class<? extends org.eclipse.xtext.formatting.IFormatter> bindIFormatter() {
+		return org.eclipse.ocl.tutorial.eclipsecon2011.formatting.OCLStatesFormatter.class;
+	}
+
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/OCLStates.xmi b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/OCLStates.xmi
new file mode 100644
index 0000000..52df030
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/OCLStates.xmi
@@ -0,0 +1,300 @@
+<?xml version="1.0" encoding="ASCII"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:xtext="http://www.eclipse.org/2008/Xtext">
+  <xtext:Grammar name="org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates" usedGrammars="/1">
+    <metamodelDeclarations xsi:type="xtext:ReferencedMetamodel">
+      <ePackage href="http://ocl.eclipse.org/tutorial/eclipsecon2011/OCLStates#/"/>
+    </metamodelDeclarations>
+    <rules xsi:type="xtext:ParserRule" name="Module">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://ocl.eclipse.org/tutorial/eclipsecon2011/OCLStates#//Module"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="module"/>
+        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.2"/>
+        </elements>
+        <elements xsi:type="xtext:Assignment" cardinality="*" feature="machines" operator="+=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.1"/>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="Statemachine">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://ocl.eclipse.org/tutorial/eclipsecon2011/OCLStates#//Statemachine"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Assignment" cardinality="?" feature="initial" operator="?=">
+          <terminal xsi:type="xtext:Keyword" value="initial"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="statemachine"/>
+        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.0"/>
+        </elements>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="value"/>
+          <elements xsi:type="xtext:Assignment" feature="value" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.1"/>
+          </elements>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="{"/>
+        <elements xsi:type="xtext:Keyword" value="events"/>
+        <elements xsi:type="xtext:Assignment" cardinality="*" feature="events" operator="+=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value=";"/>
+        <elements xsi:type="xtext:Assignment" cardinality="*" feature="states" operator="+=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="}"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="Event">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://ocl.eclipse.org/tutorial/eclipsecon2011/OCLStates#//Event"/>
+      </type>
+      <alternatives xsi:type="xtext:Assignment" feature="name" operator="=">
+        <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.0"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="State">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://ocl.eclipse.org/tutorial/eclipsecon2011/OCLStates#//State"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.4"/>
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="SimpleState">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://ocl.eclipse.org/tutorial/eclipsecon2011/OCLStates#//SimpleState"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Assignment" cardinality="?" feature="initial" operator="?=">
+          <terminal xsi:type="xtext:Keyword" value="initial"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="state"/>
+        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.0"/>
+        </elements>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="value"/>
+          <elements xsi:type="xtext:Assignment" feature="value" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.1"/>
+          </elements>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="{"/>
+        <elements xsi:type="xtext:Assignment" cardinality="*" feature="transitions" operator="+=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.6"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="}"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="CompoundState">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://ocl.eclipse.org/tutorial/eclipsecon2011/OCLStates#//CompoundState"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="compound"/>
+        <elements xsi:type="xtext:Assignment" cardinality="?" feature="initial" operator="?=">
+          <terminal xsi:type="xtext:Keyword" value="initial"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="state"/>
+        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.0"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="machine"/>
+        <elements xsi:type="xtext:Assignment" feature="machine" operator="=">
+          <terminal xsi:type="xtext:CrossReference">
+            <type metamodel="/0/@metamodelDeclarations.0">
+              <classifier xsi:type="ecore:EClass" href="http://ocl.eclipse.org/tutorial/eclipsecon2011/OCLStates#//Statemachine"/>
+            </type>
+            <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.0"/>
+          </terminal>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="{"/>
+        <elements xsi:type="xtext:Assignment" cardinality="*" feature="transitions" operator="+=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.6"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="}"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="Transition">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://ocl.eclipse.org/tutorial/eclipsecon2011/OCLStates#//Transition"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Assignment" feature="event" operator="=">
+          <terminal xsi:type="xtext:CrossReference">
+            <type metamodel="/0/@metamodelDeclarations.0">
+              <classifier xsi:type="ecore:EClass" href="http://ocl.eclipse.org/tutorial/eclipsecon2011/OCLStates#//Event"/>
+            </type>
+            <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.0"/>
+          </terminal>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="=>"/>
+        <elements xsi:type="xtext:Assignment" feature="state" operator="=">
+          <terminal xsi:type="xtext:CrossReference">
+            <type metamodel="/0/@metamodelDeclarations.0">
+              <classifier xsi:type="ecore:EClass" href="http://ocl.eclipse.org/tutorial/eclipsecon2011/OCLStates#//State"/>
+            </type>
+            <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.0"/>
+          </terminal>
+        </elements>
+      </alternatives>
+    </rules>
+  </xtext:Grammar>
+  <xtext:Grammar name="org.eclipse.xtext.common.Terminals" definesHiddenTokens="true" hiddenTokens="/1/@rules.5 /1/@rules.3 /1/@rules.4">
+    <metamodelDeclarations xsi:type="xtext:ReferencedMetamodel" alias="ecore">
+      <ePackage href="http://www.eclipse.org/emf/2002/Ecore#/"/>
+    </metamodelDeclarations>
+    <rules xsi:type="xtext:TerminalRule" name="ID">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" cardinality="?" value="^"/>
+        <elements xsi:type="xtext:Alternatives">
+          <elements xsi:type="xtext:CharacterRange">
+            <left value="a"/>
+            <right value="z"/>
+          </elements>
+          <elements xsi:type="xtext:CharacterRange">
+            <left value="A"/>
+            <right value="Z"/>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="_"/>
+        </elements>
+        <elements xsi:type="xtext:Alternatives" cardinality="*">
+          <elements xsi:type="xtext:CharacterRange">
+            <left value="a"/>
+            <right value="z"/>
+          </elements>
+          <elements xsi:type="xtext:CharacterRange">
+            <left value="A"/>
+            <right value="Z"/>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="_"/>
+          <elements xsi:type="xtext:CharacterRange">
+            <left value="0"/>
+            <right value="9"/>
+          </elements>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="INT">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+      </type>
+      <alternatives xsi:type="xtext:CharacterRange" cardinality="+">
+        <left value="0"/>
+        <right value="9"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="STRING">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <elements xsi:type="xtext:Group">
+          <elements xsi:type="xtext:Keyword" value="&quot;"/>
+          <elements xsi:type="xtext:Alternatives" cardinality="*">
+            <elements xsi:type="xtext:Group">
+              <elements xsi:type="xtext:Keyword" value="\"/>
+              <elements xsi:type="xtext:Alternatives">
+                <elements xsi:type="xtext:Keyword" value="b"/>
+                <elements xsi:type="xtext:Keyword" value="t"/>
+                <elements xsi:type="xtext:Keyword" value="n"/>
+                <elements xsi:type="xtext:Keyword" value="f"/>
+                <elements xsi:type="xtext:Keyword" value="r"/>
+                <elements xsi:type="xtext:Keyword" value="u"/>
+                <elements xsi:type="xtext:Keyword" value="&quot;"/>
+                <elements xsi:type="xtext:Keyword" value="'"/>
+                <elements xsi:type="xtext:Keyword" value="\"/>
+              </elements>
+            </elements>
+            <elements xsi:type="xtext:NegatedToken">
+              <terminal xsi:type="xtext:Alternatives">
+                <elements xsi:type="xtext:Keyword" value="\"/>
+                <elements xsi:type="xtext:Keyword" value="&quot;"/>
+              </terminal>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="&quot;"/>
+        </elements>
+        <elements xsi:type="xtext:Group">
+          <elements xsi:type="xtext:Keyword" value="'"/>
+          <elements xsi:type="xtext:Alternatives" cardinality="*">
+            <elements xsi:type="xtext:Group">
+              <elements xsi:type="xtext:Keyword" value="\"/>
+              <elements xsi:type="xtext:Alternatives">
+                <elements xsi:type="xtext:Keyword" value="b"/>
+                <elements xsi:type="xtext:Keyword" value="t"/>
+                <elements xsi:type="xtext:Keyword" value="n"/>
+                <elements xsi:type="xtext:Keyword" value="f"/>
+                <elements xsi:type="xtext:Keyword" value="r"/>
+                <elements xsi:type="xtext:Keyword" value="u"/>
+                <elements xsi:type="xtext:Keyword" value="&quot;"/>
+                <elements xsi:type="xtext:Keyword" value="'"/>
+                <elements xsi:type="xtext:Keyword" value="\"/>
+              </elements>
+            </elements>
+            <elements xsi:type="xtext:NegatedToken">
+              <terminal xsi:type="xtext:Alternatives">
+                <elements xsi:type="xtext:Keyword" value="\"/>
+                <elements xsi:type="xtext:Keyword" value="'"/>
+              </terminal>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="'"/>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="ML_COMMENT">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="/*"/>
+        <elements xsi:type="xtext:UntilToken">
+          <terminal xsi:type="xtext:Keyword" value="*/"/>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="SL_COMMENT">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="//"/>
+        <elements xsi:type="xtext:NegatedToken" cardinality="*">
+          <terminal xsi:type="xtext:Alternatives">
+            <elements xsi:type="xtext:Keyword" value="&#xA;"/>
+            <elements xsi:type="xtext:Keyword" value="&#xD;"/>
+          </terminal>
+        </elements>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" cardinality="?" value="&#xD;"/>
+          <elements xsi:type="xtext:Keyword" value="&#xA;"/>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="WS">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives" cardinality="+">
+        <elements xsi:type="xtext:Keyword" value=" "/>
+        <elements xsi:type="xtext:Keyword" value="&#x9;"/>
+        <elements xsi:type="xtext:Keyword" value="&#xD;"/>
+        <elements xsi:type="xtext:Keyword" value="&#xA;"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="ANY_OTHER">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Wildcard"/>
+    </rules>
+  </xtext:Grammar>
+</xmi:XMI>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/OCLStatesStandaloneSetupGenerated.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/OCLStatesStandaloneSetupGenerated.java
new file mode 100644
index 0000000..4c3ee89
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/OCLStatesStandaloneSetupGenerated.java
@@ -0,0 +1,40 @@
+
+package org.eclipse.ocl.tutorial.eclipsecon2011;
+
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.xtext.ISetup;
+import org.eclipse.emf.ecore.resource.Resource;
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+
+/**
+ * Generated from StandaloneSetup.xpt!
+ */
+@SuppressWarnings("all")
+public class OCLStatesStandaloneSetupGenerated implements ISetup {
+
+	public Injector createInjectorAndDoEMFRegistration() {
+		org.eclipse.xtext.common.TerminalsStandaloneSetup.doSetup();
+
+		Injector injector = createInjector();
+		register(injector);
+		return injector;
+	}
+	
+	public Injector createInjector() {
+		return Guice.createInjector(new org.eclipse.ocl.tutorial.eclipsecon2011.OCLStatesRuntimeModule());
+	}
+	
+	public void register(Injector injector) {
+
+		org.eclipse.xtext.resource.IResourceFactory resourceFactory = injector.getInstance(org.eclipse.xtext.resource.IResourceFactory.class);
+		org.eclipse.xtext.resource.IResourceServiceProvider serviceProvider = injector.getInstance(org.eclipse.xtext.resource.IResourceServiceProvider.class);
+		Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("oclstates", resourceFactory);
+		org.eclipse.xtext.resource.IResourceServiceProvider.Registry.INSTANCE.getExtensionToFactoryMap().put("oclstates", serviceProvider);
+		
+
+
+
+	}
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parseTreeConstruction/OCLStatesParsetreeConstructor.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parseTreeConstruction/OCLStatesParsetreeConstructor.java
new file mode 100644
index 0000000..76039b2
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parseTreeConstruction/OCLStatesParsetreeConstructor.java
@@ -0,0 +1,1480 @@
+/*
+* generated by Xtext
+*/
+package org.eclipse.ocl.tutorial.eclipsecon2011.parseTreeConstruction;
+
+import org.eclipse.emf.ecore.*;
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.parsetree.reconstr.IEObjectConsumer;
+import org.eclipse.xtext.parsetree.reconstr.impl.AbstractParseTreeConstructor;
+
+import org.eclipse.ocl.tutorial.eclipsecon2011.services.OCLStatesGrammarAccess;
+
+import com.google.inject.Inject;
+
+@SuppressWarnings("all")
+public class OCLStatesParsetreeConstructor extends AbstractParseTreeConstructor {
+		
+	@Inject
+	private OCLStatesGrammarAccess grammarAccess;
+	
+	@Override
+	protected AbstractToken getRootToken(IEObjectConsumer inst) {
+		return new ThisRootNode(inst);	
+	}
+	
+protected class ThisRootNode extends RootToken {
+	public ThisRootNode(IEObjectConsumer inst) {
+		super(inst);
+	}
+	
+	@Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Module_Group(this, this, 0, inst);
+			case 1: return new Statemachine_Group(this, this, 1, inst);
+			case 2: return new Event_NameAssignment(this, this, 2, inst);
+			case 3: return new State_Alternatives(this, this, 3, inst);
+			case 4: return new SimpleState_Group(this, this, 4, inst);
+			case 5: return new CompoundState_Group(this, this, 5, inst);
+			case 6: return new Transition_Group(this, this, 6, inst);
+			default: return null;
+		}	
+	}	
+}
+	
+
+/************ begin Rule Module ****************
+ *
+ * Module:
+ * 	"module" name=STRING machines+=Statemachine*;
+ *
+ **/
+
+// "module" name=STRING machines+=Statemachine*
+protected class Module_Group extends GroupToken {
+	
+	public Module_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getModuleAccess().getGroup();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Module_MachinesAssignment_2(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Module_NameAssignment_1(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getModuleRule().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// "module"
+protected class Module_ModuleKeyword_0 extends KeywordToken  {
+	
+	public Module_ModuleKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getModuleAccess().getModuleKeyword_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+}
+
+// name=STRING
+protected class Module_NameAssignment_1 extends AssignmentToken  {
+	
+	public Module_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getModuleAccess().getNameAssignment_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Module_ModuleKeyword_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getModuleAccess().getNameSTRINGTerminalRuleCall_1_0(), value, null)) {
+			type = AssignmentType.TERMINAL_RULE_CALL;
+			element = grammarAccess.getModuleAccess().getNameSTRINGTerminalRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// machines+=Statemachine*
+protected class Module_MachinesAssignment_2 extends AssignmentToken  {
+	
+	public Module_MachinesAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getModuleAccess().getMachinesAssignment_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Statemachine_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("machines",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("machines");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getStatemachineRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getModuleAccess().getMachinesStatemachineParserRuleCall_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Module_MachinesAssignment_2(lastRuleCallOrigin, next, actIndex, consumed);
+			case 1: return new Module_NameAssignment_1(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+/************ end Rule Module ****************/
+
+
+/************ begin Rule Statemachine ****************
+ *
+ * Statemachine:
+ * 	initial?="initial"? "statemachine" name=ID ("value" value=INT)? "{" "events" events+=Event* ";" states+=State* "}";
+ *
+ **/
+
+// initial?="initial"? "statemachine" name=ID ("value" value=INT)? "{" "events" events+=Event* ";" states+=State* "}"
+protected class Statemachine_Group extends GroupToken {
+	
+	public Statemachine_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getStatemachineAccess().getGroup();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Statemachine_RightCurlyBracketKeyword_9(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getStatemachineRule().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// initial?="initial"?
+protected class Statemachine_InitialAssignment_0 extends AssignmentToken  {
+	
+	public Statemachine_InitialAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getStatemachineAccess().getInitialAssignment_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("initial",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("initial");
+		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
+			type = AssignmentType.KEYWORD;
+			element = grammarAccess.getStatemachineAccess().getInitialInitialKeyword_0_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "statemachine"
+protected class Statemachine_StatemachineKeyword_1 extends KeywordToken  {
+	
+	public Statemachine_StatemachineKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getStatemachineAccess().getStatemachineKeyword_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Statemachine_InitialAssignment_0(lastRuleCallOrigin, this, 0, inst);
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
+		}	
+	}
+
+}
+
+// name=ID
+protected class Statemachine_NameAssignment_2 extends AssignmentToken  {
+	
+	public Statemachine_NameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getStatemachineAccess().getNameAssignment_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Statemachine_StatemachineKeyword_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getStatemachineAccess().getNameIDTerminalRuleCall_2_0(), value, null)) {
+			type = AssignmentType.TERMINAL_RULE_CALL;
+			element = grammarAccess.getStatemachineAccess().getNameIDTerminalRuleCall_2_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// ("value" value=INT)?
+protected class Statemachine_Group_3 extends GroupToken {
+	
+	public Statemachine_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getStatemachineAccess().getGroup_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Statemachine_ValueAssignment_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "value"
+protected class Statemachine_ValueKeyword_3_0 extends KeywordToken  {
+	
+	public Statemachine_ValueKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getStatemachineAccess().getValueKeyword_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Statemachine_NameAssignment_2(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// value=INT
+protected class Statemachine_ValueAssignment_3_1 extends AssignmentToken  {
+	
+	public Statemachine_ValueAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getStatemachineAccess().getValueAssignment_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Statemachine_ValueKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("value",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("value");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getStatemachineAccess().getValueINTTerminalRuleCall_3_1_0(), value, null)) {
+			type = AssignmentType.TERMINAL_RULE_CALL;
+			element = grammarAccess.getStatemachineAccess().getValueINTTerminalRuleCall_3_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+
+// "{"
+protected class Statemachine_LeftCurlyBracketKeyword_4 extends KeywordToken  {
+	
+	public Statemachine_LeftCurlyBracketKeyword_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getStatemachineAccess().getLeftCurlyBracketKeyword_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Statemachine_Group_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Statemachine_NameAssignment_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "events"
+protected class Statemachine_EventsKeyword_5 extends KeywordToken  {
+	
+	public Statemachine_EventsKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getStatemachineAccess().getEventsKeyword_5();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Statemachine_LeftCurlyBracketKeyword_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// events+=Event*
+protected class Statemachine_EventsAssignment_6 extends AssignmentToken  {
+	
+	public Statemachine_EventsAssignment_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getStatemachineAccess().getEventsAssignment_6();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Event_NameAssignment(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("events",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("events");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getEventRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getStatemachineAccess().getEventsEventParserRuleCall_6_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Statemachine_EventsAssignment_6(lastRuleCallOrigin, next, actIndex, consumed);
+			case 1: return new Statemachine_EventsKeyword_5(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// ";"
+protected class Statemachine_SemicolonKeyword_7 extends KeywordToken  {
+	
+	public Statemachine_SemicolonKeyword_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getStatemachineAccess().getSemicolonKeyword_7();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Statemachine_EventsAssignment_6(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Statemachine_EventsKeyword_5(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// states+=State*
+protected class Statemachine_StatesAssignment_8 extends AssignmentToken  {
+	
+	public Statemachine_StatesAssignment_8(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getStatemachineAccess().getStatesAssignment_8();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new State_Alternatives(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("states",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("states");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getStateRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getStatemachineAccess().getStatesStateParserRuleCall_8_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Statemachine_StatesAssignment_8(lastRuleCallOrigin, next, actIndex, consumed);
+			case 1: return new Statemachine_SemicolonKeyword_7(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// "}"
+protected class Statemachine_RightCurlyBracketKeyword_9 extends KeywordToken  {
+	
+	public Statemachine_RightCurlyBracketKeyword_9(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getStatemachineAccess().getRightCurlyBracketKeyword_9();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Statemachine_StatesAssignment_8(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Statemachine_SemicolonKeyword_7(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+/************ end Rule Statemachine ****************/
+
+
+/************ begin Rule Event ****************
+ *
+ * Event:
+ * 	name=ID;
+ *
+ **/
+
+// name=ID
+protected class Event_NameAssignment extends AssignmentToken  {
+	
+	public Event_NameAssignment(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getEventAccess().getNameAssignment();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getEventRule().getType().getClassifier())
+			return null;
+		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getEventAccess().getNameIDTerminalRuleCall_0(), value, null)) {
+			type = AssignmentType.TERMINAL_RULE_CALL;
+			element = grammarAccess.getEventAccess().getNameIDTerminalRuleCall_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+/************ end Rule Event ****************/
+
+
+/************ begin Rule State ****************
+ *
+ * State:
+ * 	SimpleState | CompoundState;
+ *
+ **/
+
+// SimpleState | CompoundState
+protected class State_Alternatives extends AlternativesToken {
+
+	public State_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getStateAccess().getAlternatives();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new State_SimpleStateParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new State_CompoundStateParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getCompoundStateRule().getType().getClassifier() && 
+		   getEObject().eClass() != grammarAccess.getSimpleStateRule().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// SimpleState
+protected class State_SimpleStateParserRuleCall_0 extends RuleCallToken {
+	
+	public State_SimpleStateParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getStateAccess().getSimpleStateParserRuleCall_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SimpleState_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getSimpleStateRule().getType().getClassifier())
+			return null;
+		if(checkForRecursion(SimpleState_Group.class, eObjectConsumer)) return null;
+		return eObjectConsumer;
+	}
+	
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+// CompoundState
+protected class State_CompoundStateParserRuleCall_1 extends RuleCallToken {
+	
+	public State_CompoundStateParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getStateAccess().getCompoundStateParserRuleCall_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompoundState_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getCompoundStateRule().getType().getClassifier())
+			return null;
+		if(checkForRecursion(CompoundState_Group.class, eObjectConsumer)) return null;
+		return eObjectConsumer;
+	}
+	
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+
+/************ end Rule State ****************/
+
+
+/************ begin Rule SimpleState ****************
+ *
+ * SimpleState:
+ * 	initial?="initial"? "state" name=ID ("value" value=INT)? "{" transitions+=Transition* "}";
+ *
+ **/
+
+// initial?="initial"? "state" name=ID ("value" value=INT)? "{" transitions+=Transition* "}"
+protected class SimpleState_Group extends GroupToken {
+	
+	public SimpleState_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getSimpleStateAccess().getGroup();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SimpleState_RightCurlyBracketKeyword_6(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getSimpleStateRule().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// initial?="initial"?
+protected class SimpleState_InitialAssignment_0 extends AssignmentToken  {
+	
+	public SimpleState_InitialAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getSimpleStateAccess().getInitialAssignment_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("initial",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("initial");
+		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
+			type = AssignmentType.KEYWORD;
+			element = grammarAccess.getSimpleStateAccess().getInitialInitialKeyword_0_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "state"
+protected class SimpleState_StateKeyword_1 extends KeywordToken  {
+	
+	public SimpleState_StateKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSimpleStateAccess().getStateKeyword_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SimpleState_InitialAssignment_0(lastRuleCallOrigin, this, 0, inst);
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
+		}	
+	}
+
+}
+
+// name=ID
+protected class SimpleState_NameAssignment_2 extends AssignmentToken  {
+	
+	public SimpleState_NameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getSimpleStateAccess().getNameAssignment_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SimpleState_StateKeyword_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getSimpleStateAccess().getNameIDTerminalRuleCall_2_0(), value, null)) {
+			type = AssignmentType.TERMINAL_RULE_CALL;
+			element = grammarAccess.getSimpleStateAccess().getNameIDTerminalRuleCall_2_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// ("value" value=INT)?
+protected class SimpleState_Group_3 extends GroupToken {
+	
+	public SimpleState_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getSimpleStateAccess().getGroup_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SimpleState_ValueAssignment_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "value"
+protected class SimpleState_ValueKeyword_3_0 extends KeywordToken  {
+	
+	public SimpleState_ValueKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSimpleStateAccess().getValueKeyword_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SimpleState_NameAssignment_2(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// value=INT
+protected class SimpleState_ValueAssignment_3_1 extends AssignmentToken  {
+	
+	public SimpleState_ValueAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getSimpleStateAccess().getValueAssignment_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SimpleState_ValueKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("value",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("value");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getSimpleStateAccess().getValueINTTerminalRuleCall_3_1_0(), value, null)) {
+			type = AssignmentType.TERMINAL_RULE_CALL;
+			element = grammarAccess.getSimpleStateAccess().getValueINTTerminalRuleCall_3_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+
+// "{"
+protected class SimpleState_LeftCurlyBracketKeyword_4 extends KeywordToken  {
+	
+	public SimpleState_LeftCurlyBracketKeyword_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSimpleStateAccess().getLeftCurlyBracketKeyword_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SimpleState_Group_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new SimpleState_NameAssignment_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// transitions+=Transition*
+protected class SimpleState_TransitionsAssignment_5 extends AssignmentToken  {
+	
+	public SimpleState_TransitionsAssignment_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getSimpleStateAccess().getTransitionsAssignment_5();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Transition_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("transitions",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("transitions");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getTransitionRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getSimpleStateAccess().getTransitionsTransitionParserRuleCall_5_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new SimpleState_TransitionsAssignment_5(lastRuleCallOrigin, next, actIndex, consumed);
+			case 1: return new SimpleState_LeftCurlyBracketKeyword_4(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// "}"
+protected class SimpleState_RightCurlyBracketKeyword_6 extends KeywordToken  {
+	
+	public SimpleState_RightCurlyBracketKeyword_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSimpleStateAccess().getRightCurlyBracketKeyword_6();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SimpleState_TransitionsAssignment_5(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new SimpleState_LeftCurlyBracketKeyword_4(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+/************ end Rule SimpleState ****************/
+
+
+/************ begin Rule CompoundState ****************
+ *
+ * CompoundState:
+ * 	"compound" initial?="initial"? "state" name=ID "machine" machine=[Statemachine] "{" transitions+=Transition* "}";
+ *
+ **/
+
+// "compound" initial?="initial"? "state" name=ID "machine" machine=[Statemachine] "{" transitions+=Transition* "}"
+protected class CompoundState_Group extends GroupToken {
+	
+	public CompoundState_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getCompoundStateAccess().getGroup();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompoundState_RightCurlyBracketKeyword_8(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getCompoundStateRule().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// "compound"
+protected class CompoundState_CompoundKeyword_0 extends KeywordToken  {
+	
+	public CompoundState_CompoundKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompoundStateAccess().getCompoundKeyword_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+}
+
+// initial?="initial"?
+protected class CompoundState_InitialAssignment_1 extends AssignmentToken  {
+	
+	public CompoundState_InitialAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getCompoundStateAccess().getInitialAssignment_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompoundState_CompoundKeyword_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("initial",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("initial");
+		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
+			type = AssignmentType.KEYWORD;
+			element = grammarAccess.getCompoundStateAccess().getInitialInitialKeyword_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "state"
+protected class CompoundState_StateKeyword_2 extends KeywordToken  {
+	
+	public CompoundState_StateKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompoundStateAccess().getStateKeyword_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompoundState_InitialAssignment_1(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new CompoundState_CompoundKeyword_0(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// name=ID
+protected class CompoundState_NameAssignment_3 extends AssignmentToken  {
+	
+	public CompoundState_NameAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getCompoundStateAccess().getNameAssignment_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompoundState_StateKeyword_2(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCompoundStateAccess().getNameIDTerminalRuleCall_3_0(), value, null)) {
+			type = AssignmentType.TERMINAL_RULE_CALL;
+			element = grammarAccess.getCompoundStateAccess().getNameIDTerminalRuleCall_3_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "machine"
+protected class CompoundState_MachineKeyword_4 extends KeywordToken  {
+	
+	public CompoundState_MachineKeyword_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompoundStateAccess().getMachineKeyword_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompoundState_NameAssignment_3(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// machine=[Statemachine]
+protected class CompoundState_MachineAssignment_5 extends AssignmentToken  {
+	
+	public CompoundState_MachineAssignment_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getCompoundStateAccess().getMachineAssignment_5();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompoundState_MachineKeyword_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("machine",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("machine");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getCompoundStateAccess().getMachineStatemachineCrossReference_5_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getCompoundStateAccess().getMachineStatemachineCrossReference_5_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// "{"
+protected class CompoundState_LeftCurlyBracketKeyword_6 extends KeywordToken  {
+	
+	public CompoundState_LeftCurlyBracketKeyword_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompoundStateAccess().getLeftCurlyBracketKeyword_6();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompoundState_MachineAssignment_5(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// transitions+=Transition*
+protected class CompoundState_TransitionsAssignment_7 extends AssignmentToken  {
+	
+	public CompoundState_TransitionsAssignment_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getCompoundStateAccess().getTransitionsAssignment_7();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Transition_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("transitions",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("transitions");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getTransitionRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getCompoundStateAccess().getTransitionsTransitionParserRuleCall_7_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new CompoundState_TransitionsAssignment_7(lastRuleCallOrigin, next, actIndex, consumed);
+			case 1: return new CompoundState_LeftCurlyBracketKeyword_6(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// "}"
+protected class CompoundState_RightCurlyBracketKeyword_8 extends KeywordToken  {
+	
+	public CompoundState_RightCurlyBracketKeyword_8(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompoundStateAccess().getRightCurlyBracketKeyword_8();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompoundState_TransitionsAssignment_7(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new CompoundState_LeftCurlyBracketKeyword_6(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+/************ end Rule CompoundState ****************/
+
+
+/************ begin Rule Transition ****************
+ *
+ * Transition:
+ * 	event=[Event] "=>" state=[State];
+ *
+ **/
+
+// event=[Event] "=>" state=[State]
+protected class Transition_Group extends GroupToken {
+	
+	public Transition_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getTransitionAccess().getGroup();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Transition_StateAssignment_2(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getTransitionRule().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// event=[Event]
+protected class Transition_EventAssignment_0 extends AssignmentToken  {
+	
+	public Transition_EventAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getTransitionAccess().getEventAssignment_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("event",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("event");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getTransitionAccess().getEventEventCrossReference_0_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getTransitionAccess().getEventEventCrossReference_0_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// "=>"
+protected class Transition_EqualsSignGreaterThanSignKeyword_1 extends KeywordToken  {
+	
+	public Transition_EqualsSignGreaterThanSignKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getTransitionAccess().getEqualsSignGreaterThanSignKeyword_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Transition_EventAssignment_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// state=[State]
+protected class Transition_StateAssignment_2 extends AssignmentToken  {
+	
+	public Transition_StateAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getTransitionAccess().getStateAssignment_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Transition_EqualsSignGreaterThanSignKeyword_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("state",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("state");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getTransitionAccess().getStateStateCrossReference_2_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getTransitionAccess().getStateStateCrossReference_2_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+
+/************ end Rule Transition ****************/
+
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/OCLStatesAntlrTokenFileProvider.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/OCLStatesAntlrTokenFileProvider.java
new file mode 100644
index 0000000..f2cf378
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/OCLStatesAntlrTokenFileProvider.java
@@ -0,0 +1,15 @@
+/*
+* generated by Xtext
+*/
+package org.eclipse.ocl.tutorial.eclipsecon2011.parser.antlr;
+
+import java.io.InputStream;
+import org.eclipse.xtext.parser.antlr.IAntlrTokenFileProvider;
+
+public class OCLStatesAntlrTokenFileProvider implements IAntlrTokenFileProvider {
+	
+	public InputStream getAntlrTokenFile() {
+		ClassLoader classLoader = getClass().getClassLoader();
+    	return classLoader.getResourceAsStream("org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.tokens");
+	}
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/OCLStatesParser.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/OCLStatesParser.java
new file mode 100644
index 0000000..1bd885c
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/OCLStatesParser.java
@@ -0,0 +1,39 @@
+/*
+* generated by Xtext
+*/
+package org.eclipse.ocl.tutorial.eclipsecon2011.parser.antlr;
+
+import com.google.inject.Inject;
+
+import org.eclipse.xtext.parser.antlr.XtextTokenStream;
+import org.eclipse.ocl.tutorial.eclipsecon2011.services.OCLStatesGrammarAccess;
+
+public class OCLStatesParser extends org.eclipse.xtext.parser.antlr.AbstractAntlrParser {
+	
+	@Inject
+	private OCLStatesGrammarAccess grammarAccess;
+	
+	@Override
+	protected void setInitialHiddenTokens(XtextTokenStream tokenStream) {
+		tokenStream.setInitialHiddenTokens("RULE_WS", "RULE_ML_COMMENT", "RULE_SL_COMMENT");
+	}
+	
+	@Override
+	protected org.eclipse.ocl.tutorial.eclipsecon2011.parser.antlr.internal.InternalOCLStatesParser createParser(XtextTokenStream stream) {
+		return new org.eclipse.ocl.tutorial.eclipsecon2011.parser.antlr.internal.InternalOCLStatesParser(stream, getGrammarAccess());
+	}
+	
+	@Override 
+	protected String getDefaultRuleName() {
+		return "Module";
+	}
+	
+	public OCLStatesGrammarAccess getGrammarAccess() {
+		return this.grammarAccess;
+	}
+	
+	public void setGrammarAccess(OCLStatesGrammarAccess grammarAccess) {
+		this.grammarAccess = grammarAccess;
+	}
+	
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g
new file mode 100644
index 0000000..87835cd
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g
@@ -0,0 +1,614 @@
+/*
+* generated by Xtext
+*/
+grammar InternalOCLStates;
+
+options {
+	superClass=AbstractInternalAntlrParser;
+	
+}
+
+@lexer::header {
+package org.eclipse.ocl.tutorial.eclipsecon2011.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 org.eclipse.ocl.tutorial.eclipsecon2011.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.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 org.eclipse.ocl.tutorial.eclipsecon2011.services.OCLStatesGrammarAccess;
+
+}
+
+@parser::members {
+
+ 	private OCLStatesGrammarAccess grammarAccess;
+ 	
+    public InternalOCLStatesParser(TokenStream input, OCLStatesGrammarAccess grammarAccess) {
+        this(input);
+        this.grammarAccess = grammarAccess;
+        registerRules(grammarAccess.getGrammar());
+    }
+    
+    @Override
+    protected String getFirstRuleName() {
+    	return "Module";	
+   	}
+   	
+   	@Override
+   	protected OCLStatesGrammarAccess getGrammarAccess() {
+   		return grammarAccess;
+   	}
+}
+
+@rulecatch { 
+    catch (RecognitionException re) { 
+        recover(input,re); 
+        appendSkippedTokens();
+    } 
+}
+
+
+
+
+// Entry rule entryRuleModule
+entryRuleModule returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getModuleRule()); }
+	 iv_ruleModule=ruleModule 
+	 { $current=$iv_ruleModule.current; } 
+	 EOF 
+;
+
+// Rule Module
+ruleModule returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(	otherlv_0='module' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getModuleAccess().getModuleKeyword_0());
+    }
+(
+(
+		lv_name_1_0=RULE_STRING
+		{
+			newLeafNode(lv_name_1_0, grammarAccess.getModuleAccess().getNameSTRINGTerminalRuleCall_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getModuleRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"name",
+        		lv_name_1_0, 
+        		"STRING");
+	    }
+
+)
+)(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getModuleAccess().getMachinesStatemachineParserRuleCall_2_0()); 
+	    }
+		lv_machines_2_0=ruleStatemachine		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getModuleRule());
+	        }
+       		add(
+       			$current, 
+       			"machines",
+        		lv_machines_2_0, 
+        		"Statemachine");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)*)
+;
+
+
+
+
+
+// Entry rule entryRuleStatemachine
+entryRuleStatemachine returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getStatemachineRule()); }
+	 iv_ruleStatemachine=ruleStatemachine 
+	 { $current=$iv_ruleStatemachine.current; } 
+	 EOF 
+;
+
+// Rule Statemachine
+ruleStatemachine returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+(
+		lv_initial_0_0=	'initial' 
+    {
+        newLeafNode(lv_initial_0_0, grammarAccess.getStatemachineAccess().getInitialInitialKeyword_0_0());
+    }
+ 
+	    {
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getStatemachineRule());
+	        }
+       		setWithLastConsumed($current, "initial", true, "initial");
+	    }
+
+)
+)?	otherlv_1='statemachine' 
+    {
+    	newLeafNode(otherlv_1, grammarAccess.getStatemachineAccess().getStatemachineKeyword_1());
+    }
+(
+(
+		lv_name_2_0=RULE_ID
+		{
+			newLeafNode(lv_name_2_0, grammarAccess.getStatemachineAccess().getNameIDTerminalRuleCall_2_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getStatemachineRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"name",
+        		lv_name_2_0, 
+        		"ID");
+	    }
+
+)
+)(	otherlv_3='value' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getStatemachineAccess().getValueKeyword_3_0());
+    }
+(
+(
+		lv_value_4_0=RULE_INT
+		{
+			newLeafNode(lv_value_4_0, grammarAccess.getStatemachineAccess().getValueINTTerminalRuleCall_3_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getStatemachineRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"value",
+        		lv_value_4_0, 
+        		"INT");
+	    }
+
+)
+))?	otherlv_5='{' 
+    {
+    	newLeafNode(otherlv_5, grammarAccess.getStatemachineAccess().getLeftCurlyBracketKeyword_4());
+    }
+	otherlv_6='events' 
+    {
+    	newLeafNode(otherlv_6, grammarAccess.getStatemachineAccess().getEventsKeyword_5());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getStatemachineAccess().getEventsEventParserRuleCall_6_0()); 
+	    }
+		lv_events_7_0=ruleEvent		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getStatemachineRule());
+	        }
+       		add(
+       			$current, 
+       			"events",
+        		lv_events_7_0, 
+        		"Event");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)*	otherlv_8=';' 
+    {
+    	newLeafNode(otherlv_8, grammarAccess.getStatemachineAccess().getSemicolonKeyword_7());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getStatemachineAccess().getStatesStateParserRuleCall_8_0()); 
+	    }
+		lv_states_9_0=ruleState		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getStatemachineRule());
+	        }
+       		add(
+       			$current, 
+       			"states",
+        		lv_states_9_0, 
+        		"State");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)*	otherlv_10='}' 
+    {
+    	newLeafNode(otherlv_10, grammarAccess.getStatemachineAccess().getRightCurlyBracketKeyword_9());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleEvent
+entryRuleEvent returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getEventRule()); }
+	 iv_ruleEvent=ruleEvent 
+	 { $current=$iv_ruleEvent.current; } 
+	 EOF 
+;
+
+// Rule Event
+ruleEvent returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(
+(
+		lv_name_0_0=RULE_ID
+		{
+			newLeafNode(lv_name_0_0, grammarAccess.getEventAccess().getNameIDTerminalRuleCall_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getEventRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"name",
+        		lv_name_0_0, 
+        		"ID");
+	    }
+
+)
+)
+;
+
+
+
+
+
+// Entry rule entryRuleState
+entryRuleState returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getStateRule()); }
+	 iv_ruleState=ruleState 
+	 { $current=$iv_ruleState.current; } 
+	 EOF 
+;
+
+// Rule State
+ruleState returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(
+    { 
+        newCompositeNode(grammarAccess.getStateAccess().getSimpleStateParserRuleCall_0()); 
+    }
+    this_SimpleState_0=ruleSimpleState
+    { 
+        $current = $this_SimpleState_0.current; 
+        afterParserOrEnumRuleCall();
+    }
+
+    |
+    { 
+        newCompositeNode(grammarAccess.getStateAccess().getCompoundStateParserRuleCall_1()); 
+    }
+    this_CompoundState_1=ruleCompoundState
+    { 
+        $current = $this_CompoundState_1.current; 
+        afterParserOrEnumRuleCall();
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleSimpleState
+entryRuleSimpleState returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getSimpleStateRule()); }
+	 iv_ruleSimpleState=ruleSimpleState 
+	 { $current=$iv_ruleSimpleState.current; } 
+	 EOF 
+;
+
+// Rule SimpleState
+ruleSimpleState returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+(
+		lv_initial_0_0=	'initial' 
+    {
+        newLeafNode(lv_initial_0_0, grammarAccess.getSimpleStateAccess().getInitialInitialKeyword_0_0());
+    }
+ 
+	    {
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getSimpleStateRule());
+	        }
+       		setWithLastConsumed($current, "initial", true, "initial");
+	    }
+
+)
+)?	otherlv_1='state' 
+    {
+    	newLeafNode(otherlv_1, grammarAccess.getSimpleStateAccess().getStateKeyword_1());
+    }
+(
+(
+		lv_name_2_0=RULE_ID
+		{
+			newLeafNode(lv_name_2_0, grammarAccess.getSimpleStateAccess().getNameIDTerminalRuleCall_2_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getSimpleStateRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"name",
+        		lv_name_2_0, 
+        		"ID");
+	    }
+
+)
+)(	otherlv_3='value' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getSimpleStateAccess().getValueKeyword_3_0());
+    }
+(
+(
+		lv_value_4_0=RULE_INT
+		{
+			newLeafNode(lv_value_4_0, grammarAccess.getSimpleStateAccess().getValueINTTerminalRuleCall_3_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getSimpleStateRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"value",
+        		lv_value_4_0, 
+        		"INT");
+	    }
+
+)
+))?	otherlv_5='{' 
+    {
+    	newLeafNode(otherlv_5, grammarAccess.getSimpleStateAccess().getLeftCurlyBracketKeyword_4());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getSimpleStateAccess().getTransitionsTransitionParserRuleCall_5_0()); 
+	    }
+		lv_transitions_6_0=ruleTransition		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getSimpleStateRule());
+	        }
+       		add(
+       			$current, 
+       			"transitions",
+        		lv_transitions_6_0, 
+        		"Transition");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)*	otherlv_7='}' 
+    {
+    	newLeafNode(otherlv_7, grammarAccess.getSimpleStateAccess().getRightCurlyBracketKeyword_6());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleCompoundState
+entryRuleCompoundState returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getCompoundStateRule()); }
+	 iv_ruleCompoundState=ruleCompoundState 
+	 { $current=$iv_ruleCompoundState.current; } 
+	 EOF 
+;
+
+// Rule CompoundState
+ruleCompoundState returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(	otherlv_0='compound' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getCompoundStateAccess().getCompoundKeyword_0());
+    }
+(
+(
+		lv_initial_1_0=	'initial' 
+    {
+        newLeafNode(lv_initial_1_0, grammarAccess.getCompoundStateAccess().getInitialInitialKeyword_1_0());
+    }
+ 
+	    {
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getCompoundStateRule());
+	        }
+       		setWithLastConsumed($current, "initial", true, "initial");
+	    }
+
+)
+)?	otherlv_2='state' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getCompoundStateAccess().getStateKeyword_2());
+    }
+(
+(
+		lv_name_3_0=RULE_ID
+		{
+			newLeafNode(lv_name_3_0, grammarAccess.getCompoundStateAccess().getNameIDTerminalRuleCall_3_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getCompoundStateRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"name",
+        		lv_name_3_0, 
+        		"ID");
+	    }
+
+)
+)	otherlv_4='machine' 
+    {
+    	newLeafNode(otherlv_4, grammarAccess.getCompoundStateAccess().getMachineKeyword_4());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getCompoundStateRule());
+	        }
+        }
+	otherlv_5=RULE_ID
+	{
+		newLeafNode(otherlv_5, grammarAccess.getCompoundStateAccess().getMachineStatemachineCrossReference_5_0()); 
+	}
+
+)
+)	otherlv_6='{' 
+    {
+    	newLeafNode(otherlv_6, grammarAccess.getCompoundStateAccess().getLeftCurlyBracketKeyword_6());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getCompoundStateAccess().getTransitionsTransitionParserRuleCall_7_0()); 
+	    }
+		lv_transitions_7_0=ruleTransition		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getCompoundStateRule());
+	        }
+       		add(
+       			$current, 
+       			"transitions",
+        		lv_transitions_7_0, 
+        		"Transition");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)*	otherlv_8='}' 
+    {
+    	newLeafNode(otherlv_8, grammarAccess.getCompoundStateAccess().getRightCurlyBracketKeyword_8());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleTransition
+entryRuleTransition returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getTransitionRule()); }
+	 iv_ruleTransition=ruleTransition 
+	 { $current=$iv_ruleTransition.current; } 
+	 EOF 
+;
+
+// Rule Transition
+ruleTransition returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getTransitionRule());
+	        }
+        }
+	otherlv_0=RULE_ID
+	{
+		newLeafNode(otherlv_0, grammarAccess.getTransitionAccess().getEventEventCrossReference_0_0()); 
+	}
+
+)
+)	otherlv_1='=>' 
+    {
+    	newLeafNode(otherlv_1, grammarAccess.getTransitionAccess().getEqualsSignGreaterThanSignKeyword_1());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getTransitionRule());
+	        }
+        }
+	otherlv_2=RULE_ID
+	{
+		newLeafNode(otherlv_2, grammarAccess.getTransitionAccess().getStateStateCrossReference_2_0()); 
+	}
+
+)
+))
+;
+
+
+
+
+
+RULE_ID : '^'? ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
+
+RULE_INT : ('0'..'9')+;
+
+RULE_STRING : ('"' ('\\' ('b'|'t'|'n'|'f'|'r'|'u'|'"'|'\''|'\\')|~(('\\'|'"')))* '"'|'\'' ('\\' ('b'|'t'|'n'|'f'|'r'|'u'|'"'|'\''|'\\')|~(('\\'|'\'')))* '\'');
+
+RULE_ML_COMMENT : '/*' ( options {greedy=false;} : . )*'*/';
+
+RULE_SL_COMMENT : '//' ~(('\n'|'\r'))* ('\r'? '\n')?;
+
+RULE_WS : (' '|'\t'|'\r'|'\n')+;
+
+RULE_ANY_OTHER : .;
+
+
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.tokens b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.tokens
new file mode 100644
index 0000000..7f236a7
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.tokens
@@ -0,0 +1,31 @@
+RULE_ML_COMMENT=7
+T__12=12
+RULE_ID=5
+T__20=20
+T__13=13
+RULE_STRING=4
+T__21=21
+T__19=19
+T__14=14
+T__11=11
+T__22=22
+RULE_WS=9
+T__17=17
+RULE_INT=6
+T__16=16
+RULE_ANY_OTHER=10
+RULE_SL_COMMENT=8
+T__18=18
+T__15=15
+'statemachine'=13
+'module'=11
+'initial'=12
+'value'=14
+'compound'=20
+'events'=16
+'=>'=22
+'state'=19
+'machine'=21
+'}'=18
+';'=17
+'{'=15
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStatesLexer.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStatesLexer.java
new file mode 100644
index 0000000..91c0a06
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStatesLexer.java
@@ -0,0 +1,1181 @@
+package org.eclipse.ocl.tutorial.eclipsecon2011.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;
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+@SuppressWarnings("all")
+public class InternalOCLStatesLexer extends Lexer {
+    public static final int RULE_ML_COMMENT=7;
+    public static final int RULE_ID=5;
+    public static final int T__12=12;
+    public static final int T__20=20;
+    public static final int T__13=13;
+    public static final int RULE_STRING=4;
+    public static final int T__21=21;
+    public static final int T__19=19;
+    public static final int T__14=14;
+    public static final int T__11=11;
+    public static final int T__22=22;
+    public static final int RULE_WS=9;
+    public static final int T__17=17;
+    public static final int EOF=-1;
+    public static final int RULE_INT=6;
+    public static final int T__16=16;
+    public static final int RULE_ANY_OTHER=10;
+    public static final int RULE_SL_COMMENT=8;
+    public static final int T__18=18;
+    public static final int T__15=15;
+
+    // delegates
+    // delegators
+
+    public InternalOCLStatesLexer() {;} 
+    public InternalOCLStatesLexer(CharStream input) {
+        this(input, new RecognizerSharedState());
+    }
+    public InternalOCLStatesLexer(CharStream input, RecognizerSharedState state) {
+        super(input,state);
+
+    }
+    public String getGrammarFileName() { return "../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g"; }
+
+    // $ANTLR start "T__11"
+    public final void mT__11() throws RecognitionException {
+        try {
+            int _type = T__11;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:11:7: ( 'module' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:11:9: 'module'
+            {
+            match("module"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__11"
+
+    // $ANTLR start "T__12"
+    public final void mT__12() throws RecognitionException {
+        try {
+            int _type = T__12;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:12:7: ( 'initial' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:12:9: 'initial'
+            {
+            match("initial"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__12"
+
+    // $ANTLR start "T__13"
+    public final void mT__13() throws RecognitionException {
+        try {
+            int _type = T__13;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:13:7: ( 'statemachine' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:13:9: 'statemachine'
+            {
+            match("statemachine"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__13"
+
+    // $ANTLR start "T__14"
+    public final void mT__14() throws RecognitionException {
+        try {
+            int _type = T__14;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:14:7: ( 'value' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:14:9: 'value'
+            {
+            match("value"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__14"
+
+    // $ANTLR start "T__15"
+    public final void mT__15() throws RecognitionException {
+        try {
+            int _type = T__15;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:15:7: ( '{' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:15:9: '{'
+            {
+            match('{'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__15"
+
+    // $ANTLR start "T__16"
+    public final void mT__16() throws RecognitionException {
+        try {
+            int _type = T__16;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:16:7: ( 'events' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:16:9: 'events'
+            {
+            match("events"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__16"
+
+    // $ANTLR start "T__17"
+    public final void mT__17() throws RecognitionException {
+        try {
+            int _type = T__17;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:17:7: ( ';' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:17:9: ';'
+            {
+            match(';'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__17"
+
+    // $ANTLR start "T__18"
+    public final void mT__18() throws RecognitionException {
+        try {
+            int _type = T__18;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:18:7: ( '}' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:18:9: '}'
+            {
+            match('}'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__18"
+
+    // $ANTLR start "T__19"
+    public final void mT__19() throws RecognitionException {
+        try {
+            int _type = T__19;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:19:7: ( 'state' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:19:9: 'state'
+            {
+            match("state"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__19"
+
+    // $ANTLR start "T__20"
+    public final void mT__20() throws RecognitionException {
+        try {
+            int _type = T__20;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:20:7: ( 'compound' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:20:9: 'compound'
+            {
+            match("compound"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__20"
+
+    // $ANTLR start "T__21"
+    public final void mT__21() throws RecognitionException {
+        try {
+            int _type = T__21;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:21:7: ( 'machine' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:21:9: 'machine'
+            {
+            match("machine"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__21"
+
+    // $ANTLR start "T__22"
+    public final void mT__22() throws RecognitionException {
+        try {
+            int _type = T__22;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:22:7: ( '=>' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:22:9: '=>'
+            {
+            match("=>"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__22"
+
+    // $ANTLR start "RULE_ID"
+    public final void mRULE_ID() throws RecognitionException {
+        try {
+            int _type = RULE_ID;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:600:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:600:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:600:11: ( '^' )?
+            int alt1=2;
+            int LA1_0 = input.LA(1);
+
+            if ( (LA1_0=='^') ) {
+                alt1=1;
+            }
+            switch (alt1) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:600:11: '^'
+                    {
+                    match('^'); 
+
+                    }
+                    break;
+
+            }
+
+            if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
+                input.consume();
+
+            }
+            else {
+                MismatchedSetException mse = new MismatchedSetException(null,input);
+                recover(mse);
+                throw mse;}
+
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:600:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            loop2:
+            do {
+                int alt2=2;
+                int LA2_0 = input.LA(1);
+
+                if ( ((LA2_0>='0' && LA2_0<='9')||(LA2_0>='A' && LA2_0<='Z')||LA2_0=='_'||(LA2_0>='a' && LA2_0<='z')) ) {
+                    alt2=1;
+                }
+
+
+                switch (alt2) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:
+            	    {
+            	    if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;}
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop2;
+                }
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ID"
+
+    // $ANTLR start "RULE_INT"
+    public final void mRULE_INT() throws RecognitionException {
+        try {
+            int _type = RULE_INT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:602:10: ( ( '0' .. '9' )+ )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:602:12: ( '0' .. '9' )+
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:602:12: ( '0' .. '9' )+
+            int cnt3=0;
+            loop3:
+            do {
+                int alt3=2;
+                int LA3_0 = input.LA(1);
+
+                if ( ((LA3_0>='0' && LA3_0<='9')) ) {
+                    alt3=1;
+                }
+
+
+                switch (alt3) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:602:13: '0' .. '9'
+            	    {
+            	    matchRange('0','9'); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt3 >= 1 ) break loop3;
+                        EarlyExitException eee =
+                            new EarlyExitException(3, input);
+                        throw eee;
+                }
+                cnt3++;
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_INT"
+
+    // $ANTLR start "RULE_STRING"
+    public final void mRULE_STRING() throws RecognitionException {
+        try {
+            int _type = RULE_STRING;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:604:13: ( ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:604:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:604:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            int alt6=2;
+            int LA6_0 = input.LA(1);
+
+            if ( (LA6_0=='\"') ) {
+                alt6=1;
+            }
+            else if ( (LA6_0=='\'') ) {
+                alt6=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 6, 0, input);
+
+                throw nvae;
+            }
+            switch (alt6) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:604:16: '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
+                    {
+                    match('\"'); 
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:604:20: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )*
+                    loop4:
+                    do {
+                        int alt4=3;
+                        int LA4_0 = input.LA(1);
+
+                        if ( (LA4_0=='\\') ) {
+                            alt4=1;
+                        }
+                        else if ( ((LA4_0>='\u0000' && LA4_0<='!')||(LA4_0>='#' && LA4_0<='[')||(LA4_0>=']' && LA4_0<='\uFFFF')) ) {
+                            alt4=2;
+                        }
+
+
+                        switch (alt4) {
+                    	case 1 :
+                    	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:604:21: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' )
+                    	    {
+                    	    match('\\'); 
+                    	    if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='\\'||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||(input.LA(1)>='t' && input.LA(1)<='u') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse = new MismatchedSetException(null,input);
+                    	        recover(mse);
+                    	        throw mse;}
+
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:604:66: ~ ( ( '\\\\' | '\"' ) )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse = new MismatchedSetException(null,input);
+                    	        recover(mse);
+                    	        throw mse;}
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop4;
+                        }
+                    } while (true);
+
+                    match('\"'); 
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:604:86: '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
+                    {
+                    match('\''); 
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:604:91: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )*
+                    loop5:
+                    do {
+                        int alt5=3;
+                        int LA5_0 = input.LA(1);
+
+                        if ( (LA5_0=='\\') ) {
+                            alt5=1;
+                        }
+                        else if ( ((LA5_0>='\u0000' && LA5_0<='&')||(LA5_0>='(' && LA5_0<='[')||(LA5_0>=']' && LA5_0<='\uFFFF')) ) {
+                            alt5=2;
+                        }
+
+
+                        switch (alt5) {
+                    	case 1 :
+                    	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:604:92: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' )
+                    	    {
+                    	    match('\\'); 
+                    	    if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='\\'||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||(input.LA(1)>='t' && input.LA(1)<='u') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse = new MismatchedSetException(null,input);
+                    	        recover(mse);
+                    	        throw mse;}
+
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:604:137: ~ ( ( '\\\\' | '\\'' ) )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse = new MismatchedSetException(null,input);
+                    	        recover(mse);
+                    	        throw mse;}
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop5;
+                        }
+                    } while (true);
+
+                    match('\''); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_STRING"
+
+    // $ANTLR start "RULE_ML_COMMENT"
+    public final void mRULE_ML_COMMENT() throws RecognitionException {
+        try {
+            int _type = RULE_ML_COMMENT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:606:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:606:19: '/*' ( options {greedy=false; } : . )* '*/'
+            {
+            match("/*"); 
+
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:606:24: ( options {greedy=false; } : . )*
+            loop7:
+            do {
+                int alt7=2;
+                int LA7_0 = input.LA(1);
+
+                if ( (LA7_0=='*') ) {
+                    int LA7_1 = input.LA(2);
+
+                    if ( (LA7_1=='/') ) {
+                        alt7=2;
+                    }
+                    else if ( ((LA7_1>='\u0000' && LA7_1<='.')||(LA7_1>='0' && LA7_1<='\uFFFF')) ) {
+                        alt7=1;
+                    }
+
+
+                }
+                else if ( ((LA7_0>='\u0000' && LA7_0<=')')||(LA7_0>='+' && LA7_0<='\uFFFF')) ) {
+                    alt7=1;
+                }
+
+
+                switch (alt7) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:606:52: .
+            	    {
+            	    matchAny(); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop7;
+                }
+            } while (true);
+
+            match("*/"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ML_COMMENT"
+
+    // $ANTLR start "RULE_SL_COMMENT"
+    public final void mRULE_SL_COMMENT() throws RecognitionException {
+        try {
+            int _type = RULE_SL_COMMENT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:608:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:608:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            {
+            match("//"); 
+
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:608:24: (~ ( ( '\\n' | '\\r' ) ) )*
+            loop8:
+            do {
+                int alt8=2;
+                int LA8_0 = input.LA(1);
+
+                if ( ((LA8_0>='\u0000' && LA8_0<='\t')||(LA8_0>='\u000B' && LA8_0<='\f')||(LA8_0>='\u000E' && LA8_0<='\uFFFF')) ) {
+                    alt8=1;
+                }
+
+
+                switch (alt8) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:608:24: ~ ( ( '\\n' | '\\r' ) )
+            	    {
+            	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFF') ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;}
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop8;
+                }
+            } while (true);
+
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:608:40: ( ( '\\r' )? '\\n' )?
+            int alt10=2;
+            int LA10_0 = input.LA(1);
+
+            if ( (LA10_0=='\n'||LA10_0=='\r') ) {
+                alt10=1;
+            }
+            switch (alt10) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:608:41: ( '\\r' )? '\\n'
+                    {
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:608:41: ( '\\r' )?
+                    int alt9=2;
+                    int LA9_0 = input.LA(1);
+
+                    if ( (LA9_0=='\r') ) {
+                        alt9=1;
+                    }
+                    switch (alt9) {
+                        case 1 :
+                            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:608:41: '\\r'
+                            {
+                            match('\r'); 
+
+                            }
+                            break;
+
+                    }
+
+                    match('\n'); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_SL_COMMENT"
+
+    // $ANTLR start "RULE_WS"
+    public final void mRULE_WS() throws RecognitionException {
+        try {
+            int _type = RULE_WS;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:610:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:610:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:610:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            int cnt11=0;
+            loop11:
+            do {
+                int alt11=2;
+                int LA11_0 = input.LA(1);
+
+                if ( ((LA11_0>='\t' && LA11_0<='\n')||LA11_0=='\r'||LA11_0==' ') ) {
+                    alt11=1;
+                }
+
+
+                switch (alt11) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:
+            	    {
+            	    if ( (input.LA(1)>='\t' && input.LA(1)<='\n')||input.LA(1)=='\r'||input.LA(1)==' ' ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;}
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt11 >= 1 ) break loop11;
+                        EarlyExitException eee =
+                            new EarlyExitException(11, input);
+                        throw eee;
+                }
+                cnt11++;
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_WS"
+
+    // $ANTLR start "RULE_ANY_OTHER"
+    public final void mRULE_ANY_OTHER() throws RecognitionException {
+        try {
+            int _type = RULE_ANY_OTHER;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:612:16: ( . )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:612:18: .
+            {
+            matchAny(); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ANY_OTHER"
+
+    public void mTokens() throws RecognitionException {
+        // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:1:8: ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
+        int alt12=19;
+        alt12 = dfa12.predict(input);
+        switch (alt12) {
+            case 1 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:1:10: T__11
+                {
+                mT__11(); 
+
+                }
+                break;
+            case 2 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:1:16: T__12
+                {
+                mT__12(); 
+
+                }
+                break;
+            case 3 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:1:22: T__13
+                {
+                mT__13(); 
+
+                }
+                break;
+            case 4 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:1:28: T__14
+                {
+                mT__14(); 
+
+                }
+                break;
+            case 5 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:1:34: T__15
+                {
+                mT__15(); 
+
+                }
+                break;
+            case 6 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:1:40: T__16
+                {
+                mT__16(); 
+
+                }
+                break;
+            case 7 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:1:46: T__17
+                {
+                mT__17(); 
+
+                }
+                break;
+            case 8 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:1:52: T__18
+                {
+                mT__18(); 
+
+                }
+                break;
+            case 9 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:1:58: T__19
+                {
+                mT__19(); 
+
+                }
+                break;
+            case 10 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:1:64: T__20
+                {
+                mT__20(); 
+
+                }
+                break;
+            case 11 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:1:70: T__21
+                {
+                mT__21(); 
+
+                }
+                break;
+            case 12 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:1:76: T__22
+                {
+                mT__22(); 
+
+                }
+                break;
+            case 13 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:1:82: RULE_ID
+                {
+                mRULE_ID(); 
+
+                }
+                break;
+            case 14 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:1:90: RULE_INT
+                {
+                mRULE_INT(); 
+
+                }
+                break;
+            case 15 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:1:99: RULE_STRING
+                {
+                mRULE_STRING(); 
+
+                }
+                break;
+            case 16 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:1:111: RULE_ML_COMMENT
+                {
+                mRULE_ML_COMMENT(); 
+
+                }
+                break;
+            case 17 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:1:127: RULE_SL_COMMENT
+                {
+                mRULE_SL_COMMENT(); 
+
+                }
+                break;
+            case 18 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:1:143: RULE_WS
+                {
+                mRULE_WS(); 
+
+                }
+                break;
+            case 19 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:1:151: RULE_ANY_OTHER
+                {
+                mRULE_ANY_OTHER(); 
+
+                }
+                break;
+
+        }
+
+    }
+
+
+    protected DFA12 dfa12 = new DFA12(this);
+    static final String DFA12_eotS =
+        "\1\uffff\4\25\1\uffff\1\25\2\uffff\1\25\2\22\2\uffff\3\22\2\uffff"+
+        "\2\25\1\uffff\3\25\1\uffff\1\25\2\uffff\1\25\6\uffff\21\25\1\75"+
+        "\1\76\2\25\1\101\3\25\2\uffff\1\105\1\25\1\uffff\1\107\1\110\1\25"+
+        "\1\uffff\1\25\2\uffff\1\25\1\114\1\25\1\uffff\2\25\1\120\1\uffff";
+    static final String DFA12_eofS =
+        "\121\uffff";
+    static final String DFA12_minS =
+        "\1\0\1\141\1\156\1\164\1\141\1\uffff\1\166\2\uffff\1\157\1\76\1"+
+        "\101\2\uffff\2\0\1\52\2\uffff\1\144\1\143\1\uffff\1\151\1\141\1"+
+        "\154\1\uffff\1\145\2\uffff\1\155\6\uffff\1\165\1\150\2\164\1\165"+
+        "\1\156\1\160\1\154\2\151\2\145\1\164\1\157\1\145\1\156\1\141\2\60"+
+        "\1\163\1\165\1\60\1\145\1\154\1\141\2\uffff\1\60\1\156\1\uffff\2"+
+        "\60\1\143\1\uffff\1\144\2\uffff\1\150\1\60\1\151\1\uffff\1\156\1"+
+        "\145\1\60\1\uffff";
+    static final String DFA12_maxS =
+        "\1\uffff\1\157\1\156\1\164\1\141\1\uffff\1\166\2\uffff\1\157\1"+
+        "\76\1\172\2\uffff\2\uffff\1\57\2\uffff\1\144\1\143\1\uffff\1\151"+
+        "\1\141\1\154\1\uffff\1\145\2\uffff\1\155\6\uffff\1\165\1\150\2\164"+
+        "\1\165\1\156\1\160\1\154\2\151\2\145\1\164\1\157\1\145\1\156\1\141"+
+        "\2\172\1\163\1\165\1\172\1\145\1\154\1\141\2\uffff\1\172\1\156\1"+
+        "\uffff\2\172\1\143\1\uffff\1\144\2\uffff\1\150\1\172\1\151\1\uffff"+
+        "\1\156\1\145\1\172\1\uffff";
+    static final String DFA12_acceptS =
+        "\5\uffff\1\5\1\uffff\1\7\1\10\3\uffff\1\15\1\16\3\uffff\1\22\1"+
+        "\23\2\uffff\1\15\3\uffff\1\5\1\uffff\1\7\1\10\1\uffff\1\14\1\16"+
+        "\1\17\1\20\1\21\1\22\31\uffff\1\11\1\4\2\uffff\1\1\3\uffff\1\6\1"+
+        "\uffff\1\13\1\2\3\uffff\1\12\3\uffff\1\3";
+    static final String DFA12_specialS =
+        "\1\2\15\uffff\1\1\1\0\101\uffff}>";
+    static final String[] DFA12_transitionS = {
+            "\11\22\2\21\2\22\1\21\22\22\1\21\1\22\1\16\4\22\1\17\7\22\1"+
+            "\20\12\15\1\22\1\7\1\22\1\12\3\22\32\14\3\22\1\13\1\14\1\22"+
+            "\2\14\1\11\1\14\1\6\3\14\1\2\3\14\1\1\5\14\1\3\2\14\1\4\4\14"+
+            "\1\5\1\22\1\10\uff82\22",
+            "\1\24\15\uffff\1\23",
+            "\1\26",
+            "\1\27",
+            "\1\30",
+            "",
+            "\1\32",
+            "",
+            "",
+            "\1\35",
+            "\1\36",
+            "\32\25\4\uffff\1\25\1\uffff\32\25",
+            "",
+            "",
+            "\0\40",
+            "\0\40",
+            "\1\41\4\uffff\1\42",
+            "",
+            "",
+            "\1\44",
+            "\1\45",
+            "",
+            "\1\46",
+            "\1\47",
+            "\1\50",
+            "",
+            "\1\51",
+            "",
+            "",
+            "\1\52",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\53",
+            "\1\54",
+            "\1\55",
+            "\1\56",
+            "\1\57",
+            "\1\60",
+            "\1\61",
+            "\1\62",
+            "\1\63",
+            "\1\64",
+            "\1\65",
+            "\1\66",
+            "\1\67",
+            "\1\70",
+            "\1\71",
+            "\1\72",
+            "\1\73",
+            "\12\25\7\uffff\32\25\4\uffff\1\25\1\uffff\14\25\1\74\15\25",
+            "\12\25\7\uffff\32\25\4\uffff\1\25\1\uffff\32\25",
+            "\1\77",
+            "\1\100",
+            "\12\25\7\uffff\32\25\4\uffff\1\25\1\uffff\32\25",
+            "\1\102",
+            "\1\103",
+            "\1\104",
+            "",
+            "",
+            "\12\25\7\uffff\32\25\4\uffff\1\25\1\uffff\32\25",
+            "\1\106",
+            "",
+            "\12\25\7\uffff\32\25\4\uffff\1\25\1\uffff\32\25",
+            "\12\25\7\uffff\32\25\4\uffff\1\25\1\uffff\32\25",
+            "\1\111",
+            "",
+            "\1\112",
+            "",
+            "",
+            "\1\113",
+            "\12\25\7\uffff\32\25\4\uffff\1\25\1\uffff\32\25",
+            "\1\115",
+            "",
+            "\1\116",
+            "\1\117",
+            "\12\25\7\uffff\32\25\4\uffff\1\25\1\uffff\32\25",
+            ""
+    };
+
+    static final short[] DFA12_eot = DFA.unpackEncodedString(DFA12_eotS);
+    static final short[] DFA12_eof = DFA.unpackEncodedString(DFA12_eofS);
+    static final char[] DFA12_min = DFA.unpackEncodedStringToUnsignedChars(DFA12_minS);
+    static final char[] DFA12_max = DFA.unpackEncodedStringToUnsignedChars(DFA12_maxS);
+    static final short[] DFA12_accept = DFA.unpackEncodedString(DFA12_acceptS);
+    static final short[] DFA12_special = DFA.unpackEncodedString(DFA12_specialS);
+    static final short[][] DFA12_transition;
+
+    static {
+        int numStates = DFA12_transitionS.length;
+        DFA12_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA12_transition[i] = DFA.unpackEncodedString(DFA12_transitionS[i]);
+        }
+    }
+
+    class DFA12 extends DFA {
+
+        public DFA12(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 12;
+            this.eot = DFA12_eot;
+            this.eof = DFA12_eof;
+            this.min = DFA12_min;
+            this.max = DFA12_max;
+            this.accept = DFA12_accept;
+            this.special = DFA12_special;
+            this.transition = DFA12_transition;
+        }
+        public String getDescription() {
+            return "1:1: Tokens : ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            IntStream input = _input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA12_15 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA12_15>='\u0000' && LA12_15<='\uFFFF')) ) {s = 32;}
+
+                        else s = 18;
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA12_14 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA12_14>='\u0000' && LA12_14<='\uFFFF')) ) {s = 32;}
+
+                        else s = 18;
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA12_0 = input.LA(1);
+
+                        s = -1;
+                        if ( (LA12_0=='m') ) {s = 1;}
+
+                        else if ( (LA12_0=='i') ) {s = 2;}
+
+                        else if ( (LA12_0=='s') ) {s = 3;}
+
+                        else if ( (LA12_0=='v') ) {s = 4;}
+
+                        else if ( (LA12_0=='{') ) {s = 5;}
+
+                        else if ( (LA12_0=='e') ) {s = 6;}
+
+                        else if ( (LA12_0==';') ) {s = 7;}
+
+                        else if ( (LA12_0=='}') ) {s = 8;}
+
+                        else if ( (LA12_0=='c') ) {s = 9;}
+
+                        else if ( (LA12_0=='=') ) {s = 10;}
+
+                        else if ( (LA12_0=='^') ) {s = 11;}
+
+                        else if ( ((LA12_0>='A' && LA12_0<='Z')||LA12_0=='_'||(LA12_0>='a' && LA12_0<='b')||LA12_0=='d'||(LA12_0>='f' && LA12_0<='h')||(LA12_0>='j' && LA12_0<='l')||(LA12_0>='n' && LA12_0<='r')||(LA12_0>='t' && LA12_0<='u')||(LA12_0>='w' && LA12_0<='z')) ) {s = 12;}
+
+                        else if ( ((LA12_0>='0' && LA12_0<='9')) ) {s = 13;}
+
+                        else if ( (LA12_0=='\"') ) {s = 14;}
+
+                        else if ( (LA12_0=='\'') ) {s = 15;}
+
+                        else if ( (LA12_0=='/') ) {s = 16;}
+
+                        else if ( ((LA12_0>='\t' && LA12_0<='\n')||LA12_0=='\r'||LA12_0==' ') ) {s = 17;}
+
+                        else if ( ((LA12_0>='\u0000' && LA12_0<='\b')||(LA12_0>='\u000B' && LA12_0<='\f')||(LA12_0>='\u000E' && LA12_0<='\u001F')||LA12_0=='!'||(LA12_0>='#' && LA12_0<='&')||(LA12_0>='(' && LA12_0<='.')||LA12_0==':'||LA12_0=='<'||(LA12_0>='>' && LA12_0<='@')||(LA12_0>='[' && LA12_0<=']')||LA12_0=='`'||LA12_0=='|'||(LA12_0>='~' && LA12_0<='\uFFFF')) ) {s = 18;}
+
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 12, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+ 
+
+}
\ No newline at end of file
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStatesParser.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStatesParser.java
new file mode 100644
index 0000000..8f5fe46
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStatesParser.java
@@ -0,0 +1,1417 @@
+package org.eclipse.ocl.tutorial.eclipsecon2011.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.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 org.eclipse.ocl.tutorial.eclipsecon2011.services.OCLStatesGrammarAccess;
+
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+@SuppressWarnings("all")
+public class InternalOCLStatesParser extends AbstractInternalAntlrParser {
+    public static final String[] tokenNames = new String[] {
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_STRING", "RULE_ID", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'module'", "'initial'", "'statemachine'", "'value'", "'{'", "'events'", "';'", "'}'", "'state'", "'compound'", "'machine'", "'=>'"
+    };
+    public static final int RULE_ML_COMMENT=7;
+    public static final int T__12=12;
+    public static final int RULE_ID=5;
+    public static final int T__20=20;
+    public static final int T__13=13;
+    public static final int RULE_STRING=4;
+    public static final int T__21=21;
+    public static final int T__19=19;
+    public static final int T__14=14;
+    public static final int T__11=11;
+    public static final int T__22=22;
+    public static final int RULE_WS=9;
+    public static final int T__17=17;
+    public static final int EOF=-1;
+    public static final int RULE_INT=6;
+    public static final int T__16=16;
+    public static final int RULE_ANY_OTHER=10;
+    public static final int RULE_SL_COMMENT=8;
+    public static final int T__18=18;
+    public static final int T__15=15;
+
+    // delegates
+    // delegators
+
+
+        public InternalOCLStatesParser(TokenStream input) {
+            this(input, new RecognizerSharedState());
+        }
+        public InternalOCLStatesParser(TokenStream input, RecognizerSharedState state) {
+            super(input, state);
+             
+        }
+        
+
+    public String[] getTokenNames() { return InternalOCLStatesParser.tokenNames; }
+    public String getGrammarFileName() { return "../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g"; }
+
+
+
+     	private OCLStatesGrammarAccess grammarAccess;
+     	
+        public InternalOCLStatesParser(TokenStream input, OCLStatesGrammarAccess grammarAccess) {
+            this(input);
+            this.grammarAccess = grammarAccess;
+            registerRules(grammarAccess.getGrammar());
+        }
+        
+        @Override
+        protected String getFirstRuleName() {
+        	return "Module";	
+       	}
+       	
+       	@Override
+       	protected OCLStatesGrammarAccess getGrammarAccess() {
+       		return grammarAccess;
+       	}
+
+
+
+    // $ANTLR start "entryRuleModule"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:67:1: entryRuleModule returns [EObject current=null] : iv_ruleModule= ruleModule EOF ;
+    public final EObject entryRuleModule() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleModule = null;
+
+
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:68:2: (iv_ruleModule= ruleModule EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:69:2: iv_ruleModule= ruleModule EOF
+            {
+             newCompositeNode(grammarAccess.getModuleRule()); 
+            pushFollow(FOLLOW_ruleModule_in_entryRuleModule75);
+            iv_ruleModule=ruleModule();
+
+            state._fsp--;
+
+             current =iv_ruleModule; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleModule85); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleModule"
+
+
+    // $ANTLR start "ruleModule"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:76:1: ruleModule returns [EObject current=null] : (otherlv_0= 'module' ( (lv_name_1_0= RULE_STRING ) ) ( (lv_machines_2_0= ruleStatemachine ) )* ) ;
+    public final EObject ruleModule() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token lv_name_1_0=null;
+        EObject lv_machines_2_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:79:28: ( (otherlv_0= 'module' ( (lv_name_1_0= RULE_STRING ) ) ( (lv_machines_2_0= ruleStatemachine ) )* ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:80:1: (otherlv_0= 'module' ( (lv_name_1_0= RULE_STRING ) ) ( (lv_machines_2_0= ruleStatemachine ) )* )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:80:1: (otherlv_0= 'module' ( (lv_name_1_0= RULE_STRING ) ) ( (lv_machines_2_0= ruleStatemachine ) )* )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:80:3: otherlv_0= 'module' ( (lv_name_1_0= RULE_STRING ) ) ( (lv_machines_2_0= ruleStatemachine ) )*
+            {
+            otherlv_0=(Token)match(input,11,FOLLOW_11_in_ruleModule122); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getModuleAccess().getModuleKeyword_0());
+                
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:84:1: ( (lv_name_1_0= RULE_STRING ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:85:1: (lv_name_1_0= RULE_STRING )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:85:1: (lv_name_1_0= RULE_STRING )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:86:3: lv_name_1_0= RULE_STRING
+            {
+            lv_name_1_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleModule139); 
+
+            			newLeafNode(lv_name_1_0, grammarAccess.getModuleAccess().getNameSTRINGTerminalRuleCall_1_0()); 
+            		
+
+            	        if (current==null) {
+            	            current = createModelElement(grammarAccess.getModuleRule());
+            	        }
+                   		setWithLastConsumed(
+                   			current, 
+                   			"name",
+                    		lv_name_1_0, 
+                    		"STRING");
+            	    
+
+            }
+
+
+            }
+
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:102:2: ( (lv_machines_2_0= ruleStatemachine ) )*
+            loop1:
+            do {
+                int alt1=2;
+                int LA1_0 = input.LA(1);
+
+                if ( ((LA1_0>=12 && LA1_0<=13)) ) {
+                    alt1=1;
+                }
+
+
+                switch (alt1) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:103:1: (lv_machines_2_0= ruleStatemachine )
+            	    {
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:103:1: (lv_machines_2_0= ruleStatemachine )
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:104:3: lv_machines_2_0= ruleStatemachine
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getModuleAccess().getMachinesStatemachineParserRuleCall_2_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleStatemachine_in_ruleModule165);
+            	    lv_machines_2_0=ruleStatemachine();
+
+            	    state._fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = createModelElementForParent(grammarAccess.getModuleRule());
+            	    	        }
+            	           		add(
+            	           			current, 
+            	           			"machines",
+            	            		lv_machines_2_0, 
+            	            		"Statemachine");
+            	    	        afterParserOrEnumRuleCall();
+            	    	    
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop1;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleModule"
+
+
+    // $ANTLR start "entryRuleStatemachine"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:128:1: entryRuleStatemachine returns [EObject current=null] : iv_ruleStatemachine= ruleStatemachine EOF ;
+    public final EObject entryRuleStatemachine() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleStatemachine = null;
+
+
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:129:2: (iv_ruleStatemachine= ruleStatemachine EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:130:2: iv_ruleStatemachine= ruleStatemachine EOF
+            {
+             newCompositeNode(grammarAccess.getStatemachineRule()); 
+            pushFollow(FOLLOW_ruleStatemachine_in_entryRuleStatemachine202);
+            iv_ruleStatemachine=ruleStatemachine();
+
+            state._fsp--;
+
+             current =iv_ruleStatemachine; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleStatemachine212); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleStatemachine"
+
+
+    // $ANTLR start "ruleStatemachine"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:137:1: ruleStatemachine returns [EObject current=null] : ( ( (lv_initial_0_0= 'initial' ) )? otherlv_1= 'statemachine' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'value' ( (lv_value_4_0= RULE_INT ) ) )? otherlv_5= '{' otherlv_6= 'events' ( (lv_events_7_0= ruleEvent ) )* otherlv_8= ';' ( (lv_states_9_0= ruleState ) )* otherlv_10= '}' ) ;
+    public final EObject ruleStatemachine() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_initial_0_0=null;
+        Token otherlv_1=null;
+        Token lv_name_2_0=null;
+        Token otherlv_3=null;
+        Token lv_value_4_0=null;
+        Token otherlv_5=null;
+        Token otherlv_6=null;
+        Token otherlv_8=null;
+        Token otherlv_10=null;
+        EObject lv_events_7_0 = null;
+
+        EObject lv_states_9_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:140:28: ( ( ( (lv_initial_0_0= 'initial' ) )? otherlv_1= 'statemachine' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'value' ( (lv_value_4_0= RULE_INT ) ) )? otherlv_5= '{' otherlv_6= 'events' ( (lv_events_7_0= ruleEvent ) )* otherlv_8= ';' ( (lv_states_9_0= ruleState ) )* otherlv_10= '}' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:141:1: ( ( (lv_initial_0_0= 'initial' ) )? otherlv_1= 'statemachine' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'value' ( (lv_value_4_0= RULE_INT ) ) )? otherlv_5= '{' otherlv_6= 'events' ( (lv_events_7_0= ruleEvent ) )* otherlv_8= ';' ( (lv_states_9_0= ruleState ) )* otherlv_10= '}' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:141:1: ( ( (lv_initial_0_0= 'initial' ) )? otherlv_1= 'statemachine' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'value' ( (lv_value_4_0= RULE_INT ) ) )? otherlv_5= '{' otherlv_6= 'events' ( (lv_events_7_0= ruleEvent ) )* otherlv_8= ';' ( (lv_states_9_0= ruleState ) )* otherlv_10= '}' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:141:2: ( (lv_initial_0_0= 'initial' ) )? otherlv_1= 'statemachine' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'value' ( (lv_value_4_0= RULE_INT ) ) )? otherlv_5= '{' otherlv_6= 'events' ( (lv_events_7_0= ruleEvent ) )* otherlv_8= ';' ( (lv_states_9_0= ruleState ) )* otherlv_10= '}'
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:141:2: ( (lv_initial_0_0= 'initial' ) )?
+            int alt2=2;
+            int LA2_0 = input.LA(1);
+
+            if ( (LA2_0==12) ) {
+                alt2=1;
+            }
+            switch (alt2) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:142:1: (lv_initial_0_0= 'initial' )
+                    {
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:142:1: (lv_initial_0_0= 'initial' )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:143:3: lv_initial_0_0= 'initial'
+                    {
+                    lv_initial_0_0=(Token)match(input,12,FOLLOW_12_in_ruleStatemachine255); 
+
+                            newLeafNode(lv_initial_0_0, grammarAccess.getStatemachineAccess().getInitialInitialKeyword_0_0());
+                        
+
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getStatemachineRule());
+                    	        }
+                           		setWithLastConsumed(current, "initial", true, "initial");
+                    	    
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            otherlv_1=(Token)match(input,13,FOLLOW_13_in_ruleStatemachine281); 
+
+                	newLeafNode(otherlv_1, grammarAccess.getStatemachineAccess().getStatemachineKeyword_1());
+                
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:160:1: ( (lv_name_2_0= RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:161:1: (lv_name_2_0= RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:161:1: (lv_name_2_0= RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:162:3: lv_name_2_0= RULE_ID
+            {
+            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleStatemachine298); 
+
+            			newLeafNode(lv_name_2_0, grammarAccess.getStatemachineAccess().getNameIDTerminalRuleCall_2_0()); 
+            		
+
+            	        if (current==null) {
+            	            current = createModelElement(grammarAccess.getStatemachineRule());
+            	        }
+                   		setWithLastConsumed(
+                   			current, 
+                   			"name",
+                    		lv_name_2_0, 
+                    		"ID");
+            	    
+
+            }
+
+
+            }
+
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:178:2: (otherlv_3= 'value' ( (lv_value_4_0= RULE_INT ) ) )?
+            int alt3=2;
+            int LA3_0 = input.LA(1);
+
+            if ( (LA3_0==14) ) {
+                alt3=1;
+            }
+            switch (alt3) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:178:4: otherlv_3= 'value' ( (lv_value_4_0= RULE_INT ) )
+                    {
+                    otherlv_3=(Token)match(input,14,FOLLOW_14_in_ruleStatemachine316); 
+
+                        	newLeafNode(otherlv_3, grammarAccess.getStatemachineAccess().getValueKeyword_3_0());
+                        
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:182:1: ( (lv_value_4_0= RULE_INT ) )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:183:1: (lv_value_4_0= RULE_INT )
+                    {
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:183:1: (lv_value_4_0= RULE_INT )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:184:3: lv_value_4_0= RULE_INT
+                    {
+                    lv_value_4_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleStatemachine333); 
+
+                    			newLeafNode(lv_value_4_0, grammarAccess.getStatemachineAccess().getValueINTTerminalRuleCall_3_1_0()); 
+                    		
+
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getStatemachineRule());
+                    	        }
+                           		setWithLastConsumed(
+                           			current, 
+                           			"value",
+                            		lv_value_4_0, 
+                            		"INT");
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            otherlv_5=(Token)match(input,15,FOLLOW_15_in_ruleStatemachine352); 
+
+                	newLeafNode(otherlv_5, grammarAccess.getStatemachineAccess().getLeftCurlyBracketKeyword_4());
+                
+            otherlv_6=(Token)match(input,16,FOLLOW_16_in_ruleStatemachine364); 
+
+                	newLeafNode(otherlv_6, grammarAccess.getStatemachineAccess().getEventsKeyword_5());
+                
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:208:1: ( (lv_events_7_0= ruleEvent ) )*
+            loop4:
+            do {
+                int alt4=2;
+                int LA4_0 = input.LA(1);
+
+                if ( (LA4_0==RULE_ID) ) {
+                    alt4=1;
+                }
+
+
+                switch (alt4) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:209:1: (lv_events_7_0= ruleEvent )
+            	    {
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:209:1: (lv_events_7_0= ruleEvent )
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:210:3: lv_events_7_0= ruleEvent
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getStatemachineAccess().getEventsEventParserRuleCall_6_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleEvent_in_ruleStatemachine385);
+            	    lv_events_7_0=ruleEvent();
+
+            	    state._fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = createModelElementForParent(grammarAccess.getStatemachineRule());
+            	    	        }
+            	           		add(
+            	           			current, 
+            	           			"events",
+            	            		lv_events_7_0, 
+            	            		"Event");
+            	    	        afterParserOrEnumRuleCall();
+            	    	    
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop4;
+                }
+            } while (true);
+
+            otherlv_8=(Token)match(input,17,FOLLOW_17_in_ruleStatemachine398); 
+
+                	newLeafNode(otherlv_8, grammarAccess.getStatemachineAccess().getSemicolonKeyword_7());
+                
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:230:1: ( (lv_states_9_0= ruleState ) )*
+            loop5:
+            do {
+                int alt5=2;
+                int LA5_0 = input.LA(1);
+
+                if ( (LA5_0==12||(LA5_0>=19 && LA5_0<=20)) ) {
+                    alt5=1;
+                }
+
+
+                switch (alt5) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:231:1: (lv_states_9_0= ruleState )
+            	    {
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:231:1: (lv_states_9_0= ruleState )
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:232:3: lv_states_9_0= ruleState
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getStatemachineAccess().getStatesStateParserRuleCall_8_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleState_in_ruleStatemachine419);
+            	    lv_states_9_0=ruleState();
+
+            	    state._fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = createModelElementForParent(grammarAccess.getStatemachineRule());
+            	    	        }
+            	           		add(
+            	           			current, 
+            	           			"states",
+            	            		lv_states_9_0, 
+            	            		"State");
+            	    	        afterParserOrEnumRuleCall();
+            	    	    
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop5;
+                }
+            } while (true);
+
+            otherlv_10=(Token)match(input,18,FOLLOW_18_in_ruleStatemachine432); 
+
+                	newLeafNode(otherlv_10, grammarAccess.getStatemachineAccess().getRightCurlyBracketKeyword_9());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleStatemachine"
+
+
+    // $ANTLR start "entryRuleEvent"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:260:1: entryRuleEvent returns [EObject current=null] : iv_ruleEvent= ruleEvent EOF ;
+    public final EObject entryRuleEvent() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleEvent = null;
+
+
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:261:2: (iv_ruleEvent= ruleEvent EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:262:2: iv_ruleEvent= ruleEvent EOF
+            {
+             newCompositeNode(grammarAccess.getEventRule()); 
+            pushFollow(FOLLOW_ruleEvent_in_entryRuleEvent468);
+            iv_ruleEvent=ruleEvent();
+
+            state._fsp--;
+
+             current =iv_ruleEvent; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleEvent478); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleEvent"
+
+
+    // $ANTLR start "ruleEvent"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:269:1: ruleEvent returns [EObject current=null] : ( (lv_name_0_0= RULE_ID ) ) ;
+    public final EObject ruleEvent() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_name_0_0=null;
+
+         enterRule(); 
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:272:28: ( ( (lv_name_0_0= RULE_ID ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:273:1: ( (lv_name_0_0= RULE_ID ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:273:1: ( (lv_name_0_0= RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:274:1: (lv_name_0_0= RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:274:1: (lv_name_0_0= RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:275:3: lv_name_0_0= RULE_ID
+            {
+            lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleEvent519); 
+
+            			newLeafNode(lv_name_0_0, grammarAccess.getEventAccess().getNameIDTerminalRuleCall_0()); 
+            		
+
+            	        if (current==null) {
+            	            current = createModelElement(grammarAccess.getEventRule());
+            	        }
+                   		setWithLastConsumed(
+                   			current, 
+                   			"name",
+                    		lv_name_0_0, 
+                    		"ID");
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleEvent"
+
+
+    // $ANTLR start "entryRuleState"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:299:1: entryRuleState returns [EObject current=null] : iv_ruleState= ruleState EOF ;
+    public final EObject entryRuleState() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleState = null;
+
+
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:300:2: (iv_ruleState= ruleState EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:301:2: iv_ruleState= ruleState EOF
+            {
+             newCompositeNode(grammarAccess.getStateRule()); 
+            pushFollow(FOLLOW_ruleState_in_entryRuleState559);
+            iv_ruleState=ruleState();
+
+            state._fsp--;
+
+             current =iv_ruleState; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleState569); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleState"
+
+
+    // $ANTLR start "ruleState"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:308:1: ruleState returns [EObject current=null] : (this_SimpleState_0= ruleSimpleState | this_CompoundState_1= ruleCompoundState ) ;
+    public final EObject ruleState() throws RecognitionException {
+        EObject current = null;
+
+        EObject this_SimpleState_0 = null;
+
+        EObject this_CompoundState_1 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:311:28: ( (this_SimpleState_0= ruleSimpleState | this_CompoundState_1= ruleCompoundState ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:312:1: (this_SimpleState_0= ruleSimpleState | this_CompoundState_1= ruleCompoundState )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:312:1: (this_SimpleState_0= ruleSimpleState | this_CompoundState_1= ruleCompoundState )
+            int alt6=2;
+            int LA6_0 = input.LA(1);
+
+            if ( (LA6_0==12||LA6_0==19) ) {
+                alt6=1;
+            }
+            else if ( (LA6_0==20) ) {
+                alt6=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 6, 0, input);
+
+                throw nvae;
+            }
+            switch (alt6) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:313:5: this_SimpleState_0= ruleSimpleState
+                    {
+                     
+                            newCompositeNode(grammarAccess.getStateAccess().getSimpleStateParserRuleCall_0()); 
+                        
+                    pushFollow(FOLLOW_ruleSimpleState_in_ruleState616);
+                    this_SimpleState_0=ruleSimpleState();
+
+                    state._fsp--;
+
+                     
+                            current = this_SimpleState_0; 
+                            afterParserOrEnumRuleCall();
+                        
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:323:5: this_CompoundState_1= ruleCompoundState
+                    {
+                     
+                            newCompositeNode(grammarAccess.getStateAccess().getCompoundStateParserRuleCall_1()); 
+                        
+                    pushFollow(FOLLOW_ruleCompoundState_in_ruleState643);
+                    this_CompoundState_1=ruleCompoundState();
+
+                    state._fsp--;
+
+                     
+                            current = this_CompoundState_1; 
+                            afterParserOrEnumRuleCall();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleState"
+
+
+    // $ANTLR start "entryRuleSimpleState"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:339:1: entryRuleSimpleState returns [EObject current=null] : iv_ruleSimpleState= ruleSimpleState EOF ;
+    public final EObject entryRuleSimpleState() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleSimpleState = null;
+
+
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:340:2: (iv_ruleSimpleState= ruleSimpleState EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:341:2: iv_ruleSimpleState= ruleSimpleState EOF
+            {
+             newCompositeNode(grammarAccess.getSimpleStateRule()); 
+            pushFollow(FOLLOW_ruleSimpleState_in_entryRuleSimpleState678);
+            iv_ruleSimpleState=ruleSimpleState();
+
+            state._fsp--;
+
+             current =iv_ruleSimpleState; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleSimpleState688); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleSimpleState"
+
+
+    // $ANTLR start "ruleSimpleState"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:348:1: ruleSimpleState returns [EObject current=null] : ( ( (lv_initial_0_0= 'initial' ) )? otherlv_1= 'state' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'value' ( (lv_value_4_0= RULE_INT ) ) )? otherlv_5= '{' ( (lv_transitions_6_0= ruleTransition ) )* otherlv_7= '}' ) ;
+    public final EObject ruleSimpleState() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_initial_0_0=null;
+        Token otherlv_1=null;
+        Token lv_name_2_0=null;
+        Token otherlv_3=null;
+        Token lv_value_4_0=null;
+        Token otherlv_5=null;
+        Token otherlv_7=null;
+        EObject lv_transitions_6_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:351:28: ( ( ( (lv_initial_0_0= 'initial' ) )? otherlv_1= 'state' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'value' ( (lv_value_4_0= RULE_INT ) ) )? otherlv_5= '{' ( (lv_transitions_6_0= ruleTransition ) )* otherlv_7= '}' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:352:1: ( ( (lv_initial_0_0= 'initial' ) )? otherlv_1= 'state' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'value' ( (lv_value_4_0= RULE_INT ) ) )? otherlv_5= '{' ( (lv_transitions_6_0= ruleTransition ) )* otherlv_7= '}' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:352:1: ( ( (lv_initial_0_0= 'initial' ) )? otherlv_1= 'state' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'value' ( (lv_value_4_0= RULE_INT ) ) )? otherlv_5= '{' ( (lv_transitions_6_0= ruleTransition ) )* otherlv_7= '}' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:352:2: ( (lv_initial_0_0= 'initial' ) )? otherlv_1= 'state' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'value' ( (lv_value_4_0= RULE_INT ) ) )? otherlv_5= '{' ( (lv_transitions_6_0= ruleTransition ) )* otherlv_7= '}'
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:352:2: ( (lv_initial_0_0= 'initial' ) )?
+            int alt7=2;
+            int LA7_0 = input.LA(1);
+
+            if ( (LA7_0==12) ) {
+                alt7=1;
+            }
+            switch (alt7) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:353:1: (lv_initial_0_0= 'initial' )
+                    {
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:353:1: (lv_initial_0_0= 'initial' )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:354:3: lv_initial_0_0= 'initial'
+                    {
+                    lv_initial_0_0=(Token)match(input,12,FOLLOW_12_in_ruleSimpleState731); 
+
+                            newLeafNode(lv_initial_0_0, grammarAccess.getSimpleStateAccess().getInitialInitialKeyword_0_0());
+                        
+
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getSimpleStateRule());
+                    	        }
+                           		setWithLastConsumed(current, "initial", true, "initial");
+                    	    
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            otherlv_1=(Token)match(input,19,FOLLOW_19_in_ruleSimpleState757); 
+
+                	newLeafNode(otherlv_1, grammarAccess.getSimpleStateAccess().getStateKeyword_1());
+                
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:371:1: ( (lv_name_2_0= RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:372:1: (lv_name_2_0= RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:372:1: (lv_name_2_0= RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:373:3: lv_name_2_0= RULE_ID
+            {
+            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleSimpleState774); 
+
+            			newLeafNode(lv_name_2_0, grammarAccess.getSimpleStateAccess().getNameIDTerminalRuleCall_2_0()); 
+            		
+
+            	        if (current==null) {
+            	            current = createModelElement(grammarAccess.getSimpleStateRule());
+            	        }
+                   		setWithLastConsumed(
+                   			current, 
+                   			"name",
+                    		lv_name_2_0, 
+                    		"ID");
+            	    
+
+            }
+
+
+            }
+
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:389:2: (otherlv_3= 'value' ( (lv_value_4_0= RULE_INT ) ) )?
+            int alt8=2;
+            int LA8_0 = input.LA(1);
+
+            if ( (LA8_0==14) ) {
+                alt8=1;
+            }
+            switch (alt8) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:389:4: otherlv_3= 'value' ( (lv_value_4_0= RULE_INT ) )
+                    {
+                    otherlv_3=(Token)match(input,14,FOLLOW_14_in_ruleSimpleState792); 
+
+                        	newLeafNode(otherlv_3, grammarAccess.getSimpleStateAccess().getValueKeyword_3_0());
+                        
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:393:1: ( (lv_value_4_0= RULE_INT ) )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:394:1: (lv_value_4_0= RULE_INT )
+                    {
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:394:1: (lv_value_4_0= RULE_INT )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:395:3: lv_value_4_0= RULE_INT
+                    {
+                    lv_value_4_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleSimpleState809); 
+
+                    			newLeafNode(lv_value_4_0, grammarAccess.getSimpleStateAccess().getValueINTTerminalRuleCall_3_1_0()); 
+                    		
+
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getSimpleStateRule());
+                    	        }
+                           		setWithLastConsumed(
+                           			current, 
+                           			"value",
+                            		lv_value_4_0, 
+                            		"INT");
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            otherlv_5=(Token)match(input,15,FOLLOW_15_in_ruleSimpleState828); 
+
+                	newLeafNode(otherlv_5, grammarAccess.getSimpleStateAccess().getLeftCurlyBracketKeyword_4());
+                
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:415:1: ( (lv_transitions_6_0= ruleTransition ) )*
+            loop9:
+            do {
+                int alt9=2;
+                int LA9_0 = input.LA(1);
+
+                if ( (LA9_0==RULE_ID) ) {
+                    alt9=1;
+                }
+
+
+                switch (alt9) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:416:1: (lv_transitions_6_0= ruleTransition )
+            	    {
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:416:1: (lv_transitions_6_0= ruleTransition )
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:417:3: lv_transitions_6_0= ruleTransition
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getSimpleStateAccess().getTransitionsTransitionParserRuleCall_5_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleTransition_in_ruleSimpleState849);
+            	    lv_transitions_6_0=ruleTransition();
+
+            	    state._fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = createModelElementForParent(grammarAccess.getSimpleStateRule());
+            	    	        }
+            	           		add(
+            	           			current, 
+            	           			"transitions",
+            	            		lv_transitions_6_0, 
+            	            		"Transition");
+            	    	        afterParserOrEnumRuleCall();
+            	    	    
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop9;
+                }
+            } while (true);
+
+            otherlv_7=(Token)match(input,18,FOLLOW_18_in_ruleSimpleState862); 
+
+                	newLeafNode(otherlv_7, grammarAccess.getSimpleStateAccess().getRightCurlyBracketKeyword_6());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleSimpleState"
+
+
+    // $ANTLR start "entryRuleCompoundState"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:445:1: entryRuleCompoundState returns [EObject current=null] : iv_ruleCompoundState= ruleCompoundState EOF ;
+    public final EObject entryRuleCompoundState() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleCompoundState = null;
+
+
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:446:2: (iv_ruleCompoundState= ruleCompoundState EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:447:2: iv_ruleCompoundState= ruleCompoundState EOF
+            {
+             newCompositeNode(grammarAccess.getCompoundStateRule()); 
+            pushFollow(FOLLOW_ruleCompoundState_in_entryRuleCompoundState898);
+            iv_ruleCompoundState=ruleCompoundState();
+
+            state._fsp--;
+
+             current =iv_ruleCompoundState; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleCompoundState908); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleCompoundState"
+
+
+    // $ANTLR start "ruleCompoundState"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:454:1: ruleCompoundState returns [EObject current=null] : (otherlv_0= 'compound' ( (lv_initial_1_0= 'initial' ) )? otherlv_2= 'state' ( (lv_name_3_0= RULE_ID ) ) otherlv_4= 'machine' ( (otherlv_5= RULE_ID ) ) otherlv_6= '{' ( (lv_transitions_7_0= ruleTransition ) )* otherlv_8= '}' ) ;
+    public final EObject ruleCompoundState() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token lv_initial_1_0=null;
+        Token otherlv_2=null;
+        Token lv_name_3_0=null;
+        Token otherlv_4=null;
+        Token otherlv_5=null;
+        Token otherlv_6=null;
+        Token otherlv_8=null;
+        EObject lv_transitions_7_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:457:28: ( (otherlv_0= 'compound' ( (lv_initial_1_0= 'initial' ) )? otherlv_2= 'state' ( (lv_name_3_0= RULE_ID ) ) otherlv_4= 'machine' ( (otherlv_5= RULE_ID ) ) otherlv_6= '{' ( (lv_transitions_7_0= ruleTransition ) )* otherlv_8= '}' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:458:1: (otherlv_0= 'compound' ( (lv_initial_1_0= 'initial' ) )? otherlv_2= 'state' ( (lv_name_3_0= RULE_ID ) ) otherlv_4= 'machine' ( (otherlv_5= RULE_ID ) ) otherlv_6= '{' ( (lv_transitions_7_0= ruleTransition ) )* otherlv_8= '}' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:458:1: (otherlv_0= 'compound' ( (lv_initial_1_0= 'initial' ) )? otherlv_2= 'state' ( (lv_name_3_0= RULE_ID ) ) otherlv_4= 'machine' ( (otherlv_5= RULE_ID ) ) otherlv_6= '{' ( (lv_transitions_7_0= ruleTransition ) )* otherlv_8= '}' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:458:3: otherlv_0= 'compound' ( (lv_initial_1_0= 'initial' ) )? otherlv_2= 'state' ( (lv_name_3_0= RULE_ID ) ) otherlv_4= 'machine' ( (otherlv_5= RULE_ID ) ) otherlv_6= '{' ( (lv_transitions_7_0= ruleTransition ) )* otherlv_8= '}'
+            {
+            otherlv_0=(Token)match(input,20,FOLLOW_20_in_ruleCompoundState945); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getCompoundStateAccess().getCompoundKeyword_0());
+                
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:462:1: ( (lv_initial_1_0= 'initial' ) )?
+            int alt10=2;
+            int LA10_0 = input.LA(1);
+
+            if ( (LA10_0==12) ) {
+                alt10=1;
+            }
+            switch (alt10) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:463:1: (lv_initial_1_0= 'initial' )
+                    {
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:463:1: (lv_initial_1_0= 'initial' )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:464:3: lv_initial_1_0= 'initial'
+                    {
+                    lv_initial_1_0=(Token)match(input,12,FOLLOW_12_in_ruleCompoundState963); 
+
+                            newLeafNode(lv_initial_1_0, grammarAccess.getCompoundStateAccess().getInitialInitialKeyword_1_0());
+                        
+
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getCompoundStateRule());
+                    	        }
+                           		setWithLastConsumed(current, "initial", true, "initial");
+                    	    
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            otherlv_2=(Token)match(input,19,FOLLOW_19_in_ruleCompoundState989); 
+
+                	newLeafNode(otherlv_2, grammarAccess.getCompoundStateAccess().getStateKeyword_2());
+                
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:481:1: ( (lv_name_3_0= RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:482:1: (lv_name_3_0= RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:482:1: (lv_name_3_0= RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:483:3: lv_name_3_0= RULE_ID
+            {
+            lv_name_3_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleCompoundState1006); 
+
+            			newLeafNode(lv_name_3_0, grammarAccess.getCompoundStateAccess().getNameIDTerminalRuleCall_3_0()); 
+            		
+
+            	        if (current==null) {
+            	            current = createModelElement(grammarAccess.getCompoundStateRule());
+            	        }
+                   		setWithLastConsumed(
+                   			current, 
+                   			"name",
+                    		lv_name_3_0, 
+                    		"ID");
+            	    
+
+            }
+
+
+            }
+
+            otherlv_4=(Token)match(input,21,FOLLOW_21_in_ruleCompoundState1023); 
+
+                	newLeafNode(otherlv_4, grammarAccess.getCompoundStateAccess().getMachineKeyword_4());
+                
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:503:1: ( (otherlv_5= RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:504:1: (otherlv_5= RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:504:1: (otherlv_5= RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:505:3: otherlv_5= RULE_ID
+            {
+
+            			if (current==null) {
+            	            current = createModelElement(grammarAccess.getCompoundStateRule());
+            	        }
+                    
+            otherlv_5=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleCompoundState1043); 
+
+            		newLeafNode(otherlv_5, grammarAccess.getCompoundStateAccess().getMachineStatemachineCrossReference_5_0()); 
+            	
+
+            }
+
+
+            }
+
+            otherlv_6=(Token)match(input,15,FOLLOW_15_in_ruleCompoundState1055); 
+
+                	newLeafNode(otherlv_6, grammarAccess.getCompoundStateAccess().getLeftCurlyBracketKeyword_6());
+                
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:520:1: ( (lv_transitions_7_0= ruleTransition ) )*
+            loop11:
+            do {
+                int alt11=2;
+                int LA11_0 = input.LA(1);
+
+                if ( (LA11_0==RULE_ID) ) {
+                    alt11=1;
+                }
+
+
+                switch (alt11) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:521:1: (lv_transitions_7_0= ruleTransition )
+            	    {
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:521:1: (lv_transitions_7_0= ruleTransition )
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:522:3: lv_transitions_7_0= ruleTransition
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getCompoundStateAccess().getTransitionsTransitionParserRuleCall_7_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleTransition_in_ruleCompoundState1076);
+            	    lv_transitions_7_0=ruleTransition();
+
+            	    state._fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = createModelElementForParent(grammarAccess.getCompoundStateRule());
+            	    	        }
+            	           		add(
+            	           			current, 
+            	           			"transitions",
+            	            		lv_transitions_7_0, 
+            	            		"Transition");
+            	    	        afterParserOrEnumRuleCall();
+            	    	    
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop11;
+                }
+            } while (true);
+
+            otherlv_8=(Token)match(input,18,FOLLOW_18_in_ruleCompoundState1089); 
+
+                	newLeafNode(otherlv_8, grammarAccess.getCompoundStateAccess().getRightCurlyBracketKeyword_8());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleCompoundState"
+
+
+    // $ANTLR start "entryRuleTransition"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:550:1: entryRuleTransition returns [EObject current=null] : iv_ruleTransition= ruleTransition EOF ;
+    public final EObject entryRuleTransition() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleTransition = null;
+
+
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:551:2: (iv_ruleTransition= ruleTransition EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:552:2: iv_ruleTransition= ruleTransition EOF
+            {
+             newCompositeNode(grammarAccess.getTransitionRule()); 
+            pushFollow(FOLLOW_ruleTransition_in_entryRuleTransition1125);
+            iv_ruleTransition=ruleTransition();
+
+            state._fsp--;
+
+             current =iv_ruleTransition; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleTransition1135); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleTransition"
+
+
+    // $ANTLR start "ruleTransition"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:559:1: ruleTransition returns [EObject current=null] : ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '=>' ( (otherlv_2= RULE_ID ) ) ) ;
+    public final EObject ruleTransition() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_1=null;
+        Token otherlv_2=null;
+
+         enterRule(); 
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:562:28: ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '=>' ( (otherlv_2= RULE_ID ) ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:563:1: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '=>' ( (otherlv_2= RULE_ID ) ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:563:1: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '=>' ( (otherlv_2= RULE_ID ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:563:2: ( (otherlv_0= RULE_ID ) ) otherlv_1= '=>' ( (otherlv_2= RULE_ID ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:563:2: ( (otherlv_0= RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:564:1: (otherlv_0= RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:564:1: (otherlv_0= RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:565:3: otherlv_0= RULE_ID
+            {
+
+            			if (current==null) {
+            	            current = createModelElement(grammarAccess.getTransitionRule());
+            	        }
+                    
+            otherlv_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleTransition1180); 
+
+            		newLeafNode(otherlv_0, grammarAccess.getTransitionAccess().getEventEventCrossReference_0_0()); 
+            	
+
+            }
+
+
+            }
+
+            otherlv_1=(Token)match(input,22,FOLLOW_22_in_ruleTransition1192); 
+
+                	newLeafNode(otherlv_1, grammarAccess.getTransitionAccess().getEqualsSignGreaterThanSignKeyword_1());
+                
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:580:1: ( (otherlv_2= RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:581:1: (otherlv_2= RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:581:1: (otherlv_2= RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalOCLStates.g:582:3: otherlv_2= RULE_ID
+            {
+
+            			if (current==null) {
+            	            current = createModelElement(grammarAccess.getTransitionRule());
+            	        }
+                    
+            otherlv_2=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleTransition1212); 
+
+            		newLeafNode(otherlv_2, grammarAccess.getTransitionAccess().getStateStateCrossReference_2_0()); 
+            	
+
+            }
+
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleTransition"
+
+    // Delegated rules
+
+
+ 
+
+    public static final BitSet FOLLOW_ruleModule_in_entryRuleModule75 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleModule85 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_11_in_ruleModule122 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_STRING_in_ruleModule139 = new BitSet(new long[]{0x0000000000003002L});
+    public static final BitSet FOLLOW_ruleStatemachine_in_ruleModule165 = new BitSet(new long[]{0x0000000000003002L});
+    public static final BitSet FOLLOW_ruleStatemachine_in_entryRuleStatemachine202 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleStatemachine212 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_12_in_ruleStatemachine255 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_13_in_ruleStatemachine281 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleStatemachine298 = new BitSet(new long[]{0x000000000000C000L});
+    public static final BitSet FOLLOW_14_in_ruleStatemachine316 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_RULE_INT_in_ruleStatemachine333 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_15_in_ruleStatemachine352 = new BitSet(new long[]{0x0000000000010000L});
+    public static final BitSet FOLLOW_16_in_ruleStatemachine364 = new BitSet(new long[]{0x0000000000020020L});
+    public static final BitSet FOLLOW_ruleEvent_in_ruleStatemachine385 = new BitSet(new long[]{0x0000000000020020L});
+    public static final BitSet FOLLOW_17_in_ruleStatemachine398 = new BitSet(new long[]{0x00000000001C1000L});
+    public static final BitSet FOLLOW_ruleState_in_ruleStatemachine419 = new BitSet(new long[]{0x00000000001C1000L});
+    public static final BitSet FOLLOW_18_in_ruleStatemachine432 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleEvent_in_entryRuleEvent468 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleEvent478 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleEvent519 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleState_in_entryRuleState559 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleState569 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSimpleState_in_ruleState616 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleCompoundState_in_ruleState643 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSimpleState_in_entryRuleSimpleState678 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleSimpleState688 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_12_in_ruleSimpleState731 = new BitSet(new long[]{0x0000000000080000L});
+    public static final BitSet FOLLOW_19_in_ruleSimpleState757 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleSimpleState774 = new BitSet(new long[]{0x000000000000C000L});
+    public static final BitSet FOLLOW_14_in_ruleSimpleState792 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_RULE_INT_in_ruleSimpleState809 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_15_in_ruleSimpleState828 = new BitSet(new long[]{0x0000000000040020L});
+    public static final BitSet FOLLOW_ruleTransition_in_ruleSimpleState849 = new BitSet(new long[]{0x0000000000040020L});
+    public static final BitSet FOLLOW_18_in_ruleSimpleState862 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleCompoundState_in_entryRuleCompoundState898 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleCompoundState908 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_20_in_ruleCompoundState945 = new BitSet(new long[]{0x0000000000081000L});
+    public static final BitSet FOLLOW_12_in_ruleCompoundState963 = new BitSet(new long[]{0x0000000000080000L});
+    public static final BitSet FOLLOW_19_in_ruleCompoundState989 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleCompoundState1006 = new BitSet(new long[]{0x0000000000200000L});
+    public static final BitSet FOLLOW_21_in_ruleCompoundState1023 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleCompoundState1043 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_15_in_ruleCompoundState1055 = new BitSet(new long[]{0x0000000000040020L});
+    public static final BitSet FOLLOW_ruleTransition_in_ruleCompoundState1076 = new BitSet(new long[]{0x0000000000040020L});
+    public static final BitSet FOLLOW_18_in_ruleCompoundState1089 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleTransition_in_entryRuleTransition1125 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleTransition1135 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleTransition1180 = new BitSet(new long[]{0x0000000000400000L});
+    public static final BitSet FOLLOW_22_in_ruleTransition1192 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleTransition1212 = new BitSet(new long[]{0x0000000000000002L});
+
+}
\ No newline at end of file
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/services/OCLStatesGrammarAccess.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/services/OCLStatesGrammarAccess.java
new file mode 100644
index 0000000..b5c3b78
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/services/OCLStatesGrammarAccess.java
@@ -0,0 +1,482 @@
+/*
+* generated by Xtext
+*/
+
+package org.eclipse.ocl.tutorial.eclipsecon2011.services;
+
+import com.google.inject.Singleton;
+import com.google.inject.Inject;
+
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.service.GrammarProvider;
+import org.eclipse.xtext.service.AbstractElementFinder.*;
+
+import org.eclipse.xtext.common.services.TerminalsGrammarAccess;
+
+@Singleton
+public class OCLStatesGrammarAccess extends AbstractGrammarElementFinder {
+	
+	
+	public class ModuleElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Module");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cModuleKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cNameSTRINGTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
+		private final Assignment cMachinesAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final RuleCall cMachinesStatemachineParserRuleCall_2_0 = (RuleCall)cMachinesAssignment_2.eContents().get(0);
+		
+		//Module:
+		//	"module" name=STRING machines+=Statemachine*;
+		public ParserRule getRule() { return rule; }
+
+		//"module" name=STRING machines+=Statemachine*
+		public Group getGroup() { return cGroup; }
+
+		//"module"
+		public Keyword getModuleKeyword_0() { return cModuleKeyword_0; }
+
+		//name=STRING
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+
+		//STRING
+		public RuleCall getNameSTRINGTerminalRuleCall_1_0() { return cNameSTRINGTerminalRuleCall_1_0; }
+
+		//machines+=Statemachine*
+		public Assignment getMachinesAssignment_2() { return cMachinesAssignment_2; }
+
+		//Statemachine
+		public RuleCall getMachinesStatemachineParserRuleCall_2_0() { return cMachinesStatemachineParserRuleCall_2_0; }
+	}
+
+	public class StatemachineElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Statemachine");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cInitialAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final Keyword cInitialInitialKeyword_0_0 = (Keyword)cInitialAssignment_0.eContents().get(0);
+		private final Keyword cStatemachineKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		private final Assignment cNameAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final RuleCall cNameIDTerminalRuleCall_2_0 = (RuleCall)cNameAssignment_2.eContents().get(0);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Keyword cValueKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
+		private final Assignment cValueAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
+		private final RuleCall cValueINTTerminalRuleCall_3_1_0 = (RuleCall)cValueAssignment_3_1.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
+		private final Keyword cEventsKeyword_5 = (Keyword)cGroup.eContents().get(5);
+		private final Assignment cEventsAssignment_6 = (Assignment)cGroup.eContents().get(6);
+		private final RuleCall cEventsEventParserRuleCall_6_0 = (RuleCall)cEventsAssignment_6.eContents().get(0);
+		private final Keyword cSemicolonKeyword_7 = (Keyword)cGroup.eContents().get(7);
+		private final Assignment cStatesAssignment_8 = (Assignment)cGroup.eContents().get(8);
+		private final RuleCall cStatesStateParserRuleCall_8_0 = (RuleCall)cStatesAssignment_8.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_9 = (Keyword)cGroup.eContents().get(9);
+		
+		//Statemachine:
+		//	initial?="initial"? "statemachine" name=ID ("value" value=INT)? "{" "events" events+=Event* ";" states+=State* "}";
+		public ParserRule getRule() { return rule; }
+
+		//initial?="initial"? "statemachine" name=ID ("value" value=INT)? "{" "events" events+=Event* ";" states+=State* "}"
+		public Group getGroup() { return cGroup; }
+
+		//initial?="initial"?
+		public Assignment getInitialAssignment_0() { return cInitialAssignment_0; }
+
+		//"initial"
+		public Keyword getInitialInitialKeyword_0_0() { return cInitialInitialKeyword_0_0; }
+
+		//"statemachine"
+		public Keyword getStatemachineKeyword_1() { return cStatemachineKeyword_1; }
+
+		//name=ID
+		public Assignment getNameAssignment_2() { return cNameAssignment_2; }
+
+		//ID
+		public RuleCall getNameIDTerminalRuleCall_2_0() { return cNameIDTerminalRuleCall_2_0; }
+
+		//("value" value=INT)?
+		public Group getGroup_3() { return cGroup_3; }
+
+		//"value"
+		public Keyword getValueKeyword_3_0() { return cValueKeyword_3_0; }
+
+		//value=INT
+		public Assignment getValueAssignment_3_1() { return cValueAssignment_3_1; }
+
+		//INT
+		public RuleCall getValueINTTerminalRuleCall_3_1_0() { return cValueINTTerminalRuleCall_3_1_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_4() { return cLeftCurlyBracketKeyword_4; }
+
+		//"events"
+		public Keyword getEventsKeyword_5() { return cEventsKeyword_5; }
+
+		//events+=Event*
+		public Assignment getEventsAssignment_6() { return cEventsAssignment_6; }
+
+		//Event
+		public RuleCall getEventsEventParserRuleCall_6_0() { return cEventsEventParserRuleCall_6_0; }
+
+		//";"
+		public Keyword getSemicolonKeyword_7() { return cSemicolonKeyword_7; }
+
+		//states+=State*
+		public Assignment getStatesAssignment_8() { return cStatesAssignment_8; }
+
+		//State
+		public RuleCall getStatesStateParserRuleCall_8_0() { return cStatesStateParserRuleCall_8_0; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_9() { return cRightCurlyBracketKeyword_9; }
+	}
+
+	public class EventElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Event");
+		private final Assignment cNameAssignment = (Assignment)rule.eContents().get(1);
+		private final RuleCall cNameIDTerminalRuleCall_0 = (RuleCall)cNameAssignment.eContents().get(0);
+		
+		//Event:
+		//	name=ID;
+		public ParserRule getRule() { return rule; }
+
+		//name=ID
+		public Assignment getNameAssignment() { return cNameAssignment; }
+
+		//ID
+		public RuleCall getNameIDTerminalRuleCall_0() { return cNameIDTerminalRuleCall_0; }
+	}
+
+	public class StateElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "State");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cSimpleStateParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cCompoundStateParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		
+		//State:
+		//	SimpleState | CompoundState;
+		public ParserRule getRule() { return rule; }
+
+		//SimpleState | CompoundState
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//SimpleState
+		public RuleCall getSimpleStateParserRuleCall_0() { return cSimpleStateParserRuleCall_0; }
+
+		//CompoundState
+		public RuleCall getCompoundStateParserRuleCall_1() { return cCompoundStateParserRuleCall_1; }
+	}
+
+	public class SimpleStateElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "SimpleState");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cInitialAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final Keyword cInitialInitialKeyword_0_0 = (Keyword)cInitialAssignment_0.eContents().get(0);
+		private final Keyword cStateKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		private final Assignment cNameAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final RuleCall cNameIDTerminalRuleCall_2_0 = (RuleCall)cNameAssignment_2.eContents().get(0);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Keyword cValueKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
+		private final Assignment cValueAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
+		private final RuleCall cValueINTTerminalRuleCall_3_1_0 = (RuleCall)cValueAssignment_3_1.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
+		private final Assignment cTransitionsAssignment_5 = (Assignment)cGroup.eContents().get(5);
+		private final RuleCall cTransitionsTransitionParserRuleCall_5_0 = (RuleCall)cTransitionsAssignment_5.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_6 = (Keyword)cGroup.eContents().get(6);
+		
+		//SimpleState:
+		//	initial?="initial"? "state" name=ID ("value" value=INT)? "{" transitions+=Transition* "}";
+		public ParserRule getRule() { return rule; }
+
+		//initial?="initial"? "state" name=ID ("value" value=INT)? "{" transitions+=Transition* "}"
+		public Group getGroup() { return cGroup; }
+
+		//initial?="initial"?
+		public Assignment getInitialAssignment_0() { return cInitialAssignment_0; }
+
+		//"initial"
+		public Keyword getInitialInitialKeyword_0_0() { return cInitialInitialKeyword_0_0; }
+
+		//"state"
+		public Keyword getStateKeyword_1() { return cStateKeyword_1; }
+
+		//name=ID
+		public Assignment getNameAssignment_2() { return cNameAssignment_2; }
+
+		//ID
+		public RuleCall getNameIDTerminalRuleCall_2_0() { return cNameIDTerminalRuleCall_2_0; }
+
+		//("value" value=INT)?
+		public Group getGroup_3() { return cGroup_3; }
+
+		//"value"
+		public Keyword getValueKeyword_3_0() { return cValueKeyword_3_0; }
+
+		//value=INT
+		public Assignment getValueAssignment_3_1() { return cValueAssignment_3_1; }
+
+		//INT
+		public RuleCall getValueINTTerminalRuleCall_3_1_0() { return cValueINTTerminalRuleCall_3_1_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_4() { return cLeftCurlyBracketKeyword_4; }
+
+		//transitions+=Transition*
+		public Assignment getTransitionsAssignment_5() { return cTransitionsAssignment_5; }
+
+		//Transition
+		public RuleCall getTransitionsTransitionParserRuleCall_5_0() { return cTransitionsTransitionParserRuleCall_5_0; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_6() { return cRightCurlyBracketKeyword_6; }
+	}
+
+	public class CompoundStateElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "CompoundState");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cCompoundKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cInitialAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final Keyword cInitialInitialKeyword_1_0 = (Keyword)cInitialAssignment_1.eContents().get(0);
+		private final Keyword cStateKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Assignment cNameAssignment_3 = (Assignment)cGroup.eContents().get(3);
+		private final RuleCall cNameIDTerminalRuleCall_3_0 = (RuleCall)cNameAssignment_3.eContents().get(0);
+		private final Keyword cMachineKeyword_4 = (Keyword)cGroup.eContents().get(4);
+		private final Assignment cMachineAssignment_5 = (Assignment)cGroup.eContents().get(5);
+		private final CrossReference cMachineStatemachineCrossReference_5_0 = (CrossReference)cMachineAssignment_5.eContents().get(0);
+		private final RuleCall cMachineStatemachineIDTerminalRuleCall_5_0_1 = (RuleCall)cMachineStatemachineCrossReference_5_0.eContents().get(1);
+		private final Keyword cLeftCurlyBracketKeyword_6 = (Keyword)cGroup.eContents().get(6);
+		private final Assignment cTransitionsAssignment_7 = (Assignment)cGroup.eContents().get(7);
+		private final RuleCall cTransitionsTransitionParserRuleCall_7_0 = (RuleCall)cTransitionsAssignment_7.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_8 = (Keyword)cGroup.eContents().get(8);
+		
+		//CompoundState:
+		//	"compound" initial?="initial"? "state" name=ID "machine" machine=[Statemachine] "{" transitions+=Transition* "}";
+		public ParserRule getRule() { return rule; }
+
+		//"compound" initial?="initial"? "state" name=ID "machine" machine=[Statemachine] "{" transitions+=Transition* "}"
+		public Group getGroup() { return cGroup; }
+
+		//"compound"
+		public Keyword getCompoundKeyword_0() { return cCompoundKeyword_0; }
+
+		//initial?="initial"?
+		public Assignment getInitialAssignment_1() { return cInitialAssignment_1; }
+
+		//"initial"
+		public Keyword getInitialInitialKeyword_1_0() { return cInitialInitialKeyword_1_0; }
+
+		//"state"
+		public Keyword getStateKeyword_2() { return cStateKeyword_2; }
+
+		//name=ID
+		public Assignment getNameAssignment_3() { return cNameAssignment_3; }
+
+		//ID
+		public RuleCall getNameIDTerminalRuleCall_3_0() { return cNameIDTerminalRuleCall_3_0; }
+
+		//"machine"
+		public Keyword getMachineKeyword_4() { return cMachineKeyword_4; }
+
+		//machine=[Statemachine]
+		public Assignment getMachineAssignment_5() { return cMachineAssignment_5; }
+
+		//[Statemachine]
+		public CrossReference getMachineStatemachineCrossReference_5_0() { return cMachineStatemachineCrossReference_5_0; }
+
+		//ID
+		public RuleCall getMachineStatemachineIDTerminalRuleCall_5_0_1() { return cMachineStatemachineIDTerminalRuleCall_5_0_1; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_6() { return cLeftCurlyBracketKeyword_6; }
+
+		//transitions+=Transition*
+		public Assignment getTransitionsAssignment_7() { return cTransitionsAssignment_7; }
+
+		//Transition
+		public RuleCall getTransitionsTransitionParserRuleCall_7_0() { return cTransitionsTransitionParserRuleCall_7_0; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_8() { return cRightCurlyBracketKeyword_8; }
+	}
+
+	public class TransitionElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Transition");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cEventAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final CrossReference cEventEventCrossReference_0_0 = (CrossReference)cEventAssignment_0.eContents().get(0);
+		private final RuleCall cEventEventIDTerminalRuleCall_0_0_1 = (RuleCall)cEventEventCrossReference_0_0.eContents().get(1);
+		private final Keyword cEqualsSignGreaterThanSignKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		private final Assignment cStateAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final CrossReference cStateStateCrossReference_2_0 = (CrossReference)cStateAssignment_2.eContents().get(0);
+		private final RuleCall cStateStateIDTerminalRuleCall_2_0_1 = (RuleCall)cStateStateCrossReference_2_0.eContents().get(1);
+		
+		//Transition:
+		//	event=[Event] "=>" state=[State];
+		public ParserRule getRule() { return rule; }
+
+		//event=[Event] "=>" state=[State]
+		public Group getGroup() { return cGroup; }
+
+		//event=[Event]
+		public Assignment getEventAssignment_0() { return cEventAssignment_0; }
+
+		//[Event]
+		public CrossReference getEventEventCrossReference_0_0() { return cEventEventCrossReference_0_0; }
+
+		//ID
+		public RuleCall getEventEventIDTerminalRuleCall_0_0_1() { return cEventEventIDTerminalRuleCall_0_0_1; }
+
+		//"=>"
+		public Keyword getEqualsSignGreaterThanSignKeyword_1() { return cEqualsSignGreaterThanSignKeyword_1; }
+
+		//state=[State]
+		public Assignment getStateAssignment_2() { return cStateAssignment_2; }
+
+		//[State]
+		public CrossReference getStateStateCrossReference_2_0() { return cStateStateCrossReference_2_0; }
+
+		//ID
+		public RuleCall getStateStateIDTerminalRuleCall_2_0_1() { return cStateStateIDTerminalRuleCall_2_0_1; }
+	}
+	
+	
+	private ModuleElements pModule;
+	private StatemachineElements pStatemachine;
+	private EventElements pEvent;
+	private StateElements pState;
+	private SimpleStateElements pSimpleState;
+	private CompoundStateElements pCompoundState;
+	private TransitionElements pTransition;
+	
+	private final GrammarProvider grammarProvider;
+
+	private TerminalsGrammarAccess gaTerminals;
+
+	@Inject
+	public OCLStatesGrammarAccess(GrammarProvider grammarProvider,
+		TerminalsGrammarAccess gaTerminals) {
+		this.grammarProvider = grammarProvider;
+		this.gaTerminals = gaTerminals;
+	}
+	
+	public Grammar getGrammar() {	
+		return grammarProvider.getGrammar(this);
+	}
+	
+
+	public TerminalsGrammarAccess getTerminalsGrammarAccess() {
+		return gaTerminals;
+	}
+
+	
+	//Module:
+	//	"module" name=STRING machines+=Statemachine*;
+	public ModuleElements getModuleAccess() {
+		return (pModule != null) ? pModule : (pModule = new ModuleElements());
+	}
+	
+	public ParserRule getModuleRule() {
+		return getModuleAccess().getRule();
+	}
+
+	//Statemachine:
+	//	initial?="initial"? "statemachine" name=ID ("value" value=INT)? "{" "events" events+=Event* ";" states+=State* "}";
+	public StatemachineElements getStatemachineAccess() {
+		return (pStatemachine != null) ? pStatemachine : (pStatemachine = new StatemachineElements());
+	}
+	
+	public ParserRule getStatemachineRule() {
+		return getStatemachineAccess().getRule();
+	}
+
+	//Event:
+	//	name=ID;
+	public EventElements getEventAccess() {
+		return (pEvent != null) ? pEvent : (pEvent = new EventElements());
+	}
+	
+	public ParserRule getEventRule() {
+		return getEventAccess().getRule();
+	}
+
+	//State:
+	//	SimpleState | CompoundState;
+	public StateElements getStateAccess() {
+		return (pState != null) ? pState : (pState = new StateElements());
+	}
+	
+	public ParserRule getStateRule() {
+		return getStateAccess().getRule();
+	}
+
+	//SimpleState:
+	//	initial?="initial"? "state" name=ID ("value" value=INT)? "{" transitions+=Transition* "}";
+	public SimpleStateElements getSimpleStateAccess() {
+		return (pSimpleState != null) ? pSimpleState : (pSimpleState = new SimpleStateElements());
+	}
+	
+	public ParserRule getSimpleStateRule() {
+		return getSimpleStateAccess().getRule();
+	}
+
+	//CompoundState:
+	//	"compound" initial?="initial"? "state" name=ID "machine" machine=[Statemachine] "{" transitions+=Transition* "}";
+	public CompoundStateElements getCompoundStateAccess() {
+		return (pCompoundState != null) ? pCompoundState : (pCompoundState = new CompoundStateElements());
+	}
+	
+	public ParserRule getCompoundStateRule() {
+		return getCompoundStateAccess().getRule();
+	}
+
+	//Transition:
+	//	event=[Event] "=>" state=[State];
+	public TransitionElements getTransitionAccess() {
+		return (pTransition != null) ? pTransition : (pTransition = new TransitionElements());
+	}
+	
+	public ParserRule getTransitionRule() {
+		return getTransitionAccess().getRule();
+	}
+
+	//terminal ID:
+	//	"^"? ("a".."z" | "A".."Z" | "_") ("a".."z" | "A".."Z" | "_" | "0".."9")*;
+	public TerminalRule getIDRule() {
+		return gaTerminals.getIDRule();
+	} 
+
+	//terminal INT returns ecore::EInt:
+	//	"0".."9"+;
+	public TerminalRule getINTRule() {
+		return gaTerminals.getINTRule();
+	} 
+
+	//terminal STRING:
+	//	"\"" ("\\" ("b" | "t" | "n" | "f" | "r" | "u" | "\"" | "\'" | "\\") | !("\\" | "\""))* "\"" | "\'" ("\\" ("b" | "t" |
+	//	"n" | "f" | "r" | "u" | "\"" | "\'" | "\\") | !("\\" | "\'"))* "\'";
+	public TerminalRule getSTRINGRule() {
+		return gaTerminals.getSTRINGRule();
+	} 
+
+	//terminal ML_COMMENT:
+	//	"/ *"->"* /";
+	public TerminalRule getML_COMMENTRule() {
+		return gaTerminals.getML_COMMENTRule();
+	} 
+
+	//terminal SL_COMMENT:
+	//	"//" !("\n" | "\r")* ("\r"? "\n")?;
+	public TerminalRule getSL_COMMENTRule() {
+		return gaTerminals.getSL_COMMENTRule();
+	} 
+
+	//terminal WS:
+	//	(" " | "\t" | "\r" | "\n")+;
+	public TerminalRule getWSRule() {
+		return gaTerminals.getWSRule();
+	} 
+
+	//terminal ANY_OTHER:
+	//	.;
+	public TerminalRule getANY_OTHERRule() {
+		return gaTerminals.getANY_OTHERRule();
+	} 
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/validation/AbstractOCLStatesJavaValidator.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/validation/AbstractOCLStatesJavaValidator.java
new file mode 100644
index 0000000..efb2078
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/validation/AbstractOCLStatesJavaValidator.java
@@ -0,0 +1,18 @@
+package org.eclipse.ocl.tutorial.eclipsecon2011.validation;
+ 
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.xtext.validation.AbstractDeclarativeValidator;
+
+public class AbstractOCLStatesJavaValidator extends AbstractDeclarativeValidator {
+
+	@Override
+	protected List<EPackage> getEPackages() {
+	    List<EPackage> result = new ArrayList<EPackage>();
+	    result.add(EPackage.Registry.INSTANCE.getEPackage("http://ocl.eclipse.org/tutorial/eclipsecon2011/OCLStates"));
+		return result;
+	}
+
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src/org/eclipse/ocl/tutorial/eclipsecon2011/OCLStates.mwe2 b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src/org/eclipse/ocl/tutorial/eclipsecon2011/OCLStates.mwe2
new file mode 100644
index 0000000..05b6318
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src/org/eclipse/ocl/tutorial/eclipsecon2011/OCLStates.mwe2
@@ -0,0 +1,86 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2011 E.D.Willink and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   E.D.Willink - Initial API and implementation
+ *
+ * </copyright>
+ *
+ * $Id: OCLStates.mwe2,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+module org.eclipse.ocl.tutorial.eclipsecon2011.GenerateOCLStates
+
+import org.eclipse.emf.mwe.utils.*
+import org.eclipse.xtext.generator.*
+import org.eclipse.xtext.ui.generator.*
+
+var grammarURI = "classpath:/org/eclipse/ocl/tutorial/eclipsecon2011/OCLStates.xtext"
+var file.extensions = "oclstates"
+var projectName = "org.eclipse.ocl.tutorial.eclipsecon2011.oclstates"
+var runtimeProject = "../${projectName}"
+
+Workflow {
+
+	bean = StandaloneSetup {
+		platformUri = "${runtimeProject}/../.."
+	}
+
+	component = DirectoryCleaner {
+		directory = "${runtimeProject}/src-gen"
+	}
+
+	component = DirectoryCleaner {
+		directory = "${runtimeProject}.ui/src-gen"
+	}
+
+	component = Generator {
+		pathRtProject = runtimeProject
+		pathUiProject = "${runtimeProject}.ui"
+		projectNameRt = projectName
+		projectNameUi = "${projectName}.ui"
+		language = {
+			uri = grammarURI
+			fileExtensions = file.extensions
+
+			// Java API to access grammar elements (required by several other fragments)
+			fragment = grammarAccess.GrammarAccessFragment {}
+
+			// Generate java classes for Ecore models
+			fragment = ecore.EcoreGeneratorFragment {}
+
+			// the serialization component
+			fragment = parseTreeConstructor.ParseTreeConstructorFragment {}
+
+			// a custom ResourceFactory for use with EMF 
+			fragment = resourceFactory.ResourceFactoryFragment {
+				fileExtensions = file.extensions
+			}
+
+			// the following fragment tries to use the Antlr Generator fragment which can be installed via update manager from http://download.itemis.com/updates/ -->
+			fragment = parser.antlr.XtextAntlrGeneratorFragment {}
+
+			// Check based validation 
+			fragment = validation.JavaValidatorFragment {}
+
+			// formatter API 
+			fragment = formatting.FormatterFragment {}
+
+			// labeling API 
+			fragment = labeling.LabelProviderFragment {}
+
+			// outline API
+			fragment = outline.OutlineTreeProviderFragment {}
+			fragment = outline.QuickOutlineFragment {}
+
+			// java-based API for content assistance 
+			fragment = contentAssist.JavaBasedContentAssistFragment {}
+			fragment = parser.antlr.XtextAntlrUiGeneratorFragment {}
+		}
+	}
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src/org/eclipse/ocl/tutorial/eclipsecon2011/OCLStates.xtext b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src/org/eclipse/ocl/tutorial/eclipsecon2011/OCLStates.xtext
new file mode 100644
index 0000000..9728e63
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src/org/eclipse/ocl/tutorial/eclipsecon2011/OCLStates.xtext
@@ -0,0 +1,50 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2011 E.D.Willink and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   E.D.Willink - Initial API and implementation
+ *
+ * </copyright>
+ *
+ * $Id: OCLStates.xtext,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+grammar org.eclipse.ocl.tutorial.eclipsecon2011.OCLStates with org.eclipse.xtext.common.Terminals
+
+import "platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/model/OCLStates.ecore"
+
+Module:
+	'module' name=STRING
+	(machines+=Statemachine)*
+;
+
+Statemachine:
+	(initial?='initial')? 'statemachine' name=ID ('value' value=INT)? '{'
+	'events' (events+=Event)* ';'
+	(states+=State)* '}'
+;
+
+Event:
+	name=ID;
+
+State: SimpleState | CompoundState;
+
+SimpleState:
+	(initial?='initial')? 'state' name=ID ('value' value=INT)?
+	'{' (transitions+=Transition)* '}'
+;
+
+CompoundState:
+	'compound' (initial?='initial')? 'state' name=ID
+	'machine' machine=[Statemachine]
+	'{' (transitions+=Transition)* '}'
+;
+
+Transition:
+	event=[Event] '=>' state=[State]
+;
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src/org/eclipse/ocl/tutorial/eclipsecon2011/OCLStatesRuntimeModule.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src/org/eclipse/ocl/tutorial/eclipsecon2011/OCLStatesRuntimeModule.java
new file mode 100644
index 0000000..272217a
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src/org/eclipse/ocl/tutorial/eclipsecon2011/OCLStatesRuntimeModule.java
@@ -0,0 +1,29 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2011 E.D.Willink and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   E.D.Willink - Initial API and implementation
+ *
+ * </copyright>
+ *
+ * $Id: OCLStatesRuntimeModule.java,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011;
+
+import org.eclipse.ocl.examples.xtext.base.utilities.NoEObjectCompositeEValidator;
+import org.eclipse.xtext.validation.CompositeEValidator;
+
+/**
+ * Use this class to register components to be used at runtime / without the Equinox extension registry.
+ */
+public class OCLStatesRuntimeModule extends org.eclipse.ocl.tutorial.eclipsecon2011.AbstractOCLStatesRuntimeModule {
+    public Class<? extends CompositeEValidator> bindCompositeEValidator() {
+        return NoEObjectCompositeEValidator.class;
+    }
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src/org/eclipse/ocl/tutorial/eclipsecon2011/OCLStatesStandaloneSetup.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src/org/eclipse/ocl/tutorial/eclipsecon2011/OCLStatesStandaloneSetup.java
new file mode 100644
index 0000000..f1c4668
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src/org/eclipse/ocl/tutorial/eclipsecon2011/OCLStatesStandaloneSetup.java
@@ -0,0 +1,29 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2011 E.D.Willink and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   E.D.Willink - Initial API and implementation
+ *
+ * </copyright>
+ *
+ * $Id: OCLStatesStandaloneSetup.java,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011;
+
+/**
+ * Initialization support for running Xtext languages 
+ * without equinox extension registry
+ */
+public class OCLStatesStandaloneSetup extends OCLStatesStandaloneSetupGenerated{
+
+	public static void doSetup() {
+		new OCLStatesStandaloneSetup().createInjectorAndDoEMFRegistration();
+	}
+}
+
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src/org/eclipse/ocl/tutorial/eclipsecon2011/formatting/OCLStatesFormatter.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src/org/eclipse/ocl/tutorial/eclipsecon2011/formatting/OCLStatesFormatter.java
new file mode 100644
index 0000000..f7f66ae
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src/org/eclipse/ocl/tutorial/eclipsecon2011/formatting/OCLStatesFormatter.java
@@ -0,0 +1,78 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2011 E.D.Willink and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   E.D.Willink - Initial API and implementation
+ *
+ * </copyright>
+ *
+ * $Id: OCLStatesFormatter.java,v 1.1 2011/03/15 07:51:55 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.formatting;
+
+import org.eclipse.ocl.tutorial.eclipsecon2011.services.OCLStatesGrammarAccess;
+import org.eclipse.ocl.tutorial.eclipsecon2011.services.OCLStatesGrammarAccess.CompoundStateElements;
+import org.eclipse.ocl.tutorial.eclipsecon2011.services.OCLStatesGrammarAccess.SimpleStateElements;
+import org.eclipse.ocl.tutorial.eclipsecon2011.services.OCLStatesGrammarAccess.StatemachineElements;
+import org.eclipse.ocl.tutorial.eclipsecon2011.services.OCLStatesGrammarAccess.TransitionElements;
+import org.eclipse.xtext.Keyword;
+import org.eclipse.xtext.formatting.impl.AbstractDeclarativeFormatter;
+import org.eclipse.xtext.formatting.impl.FormattingConfig;
+
+/**
+ * This class contains custom formatting description.
+ * 
+ * see : http://www.eclipse.org/Xtext/documentation/latest/xtext.html#formatting
+ * on how and when to use it 
+ * 
+ * Also see {@link org.eclipse.xtext.xtext.XtextFormattingTokenSerializer} as an example
+ */
+public class OCLStatesFormatter extends AbstractDeclarativeFormatter {
+	
+	@Override
+	protected void configureFormatting(FormattingConfig c) {
+
+	    c.setAutoLinewrap(120);
+
+	    OCLStatesGrammarAccess f = (OCLStatesGrammarAccess) getGrammarAccess();
+	    
+	    {
+	    	CompoundStateElements a = f.getCompoundStateAccess();
+		    c.setLinewrap(2).before(a.getRule());
+			setBraces(c, a.getLeftCurlyBracketKeyword_6(), a.getRightCurlyBracketKeyword_8());
+	    }
+	    {
+	    	SimpleStateElements a = f.getSimpleStateAccess();
+		    c.setLinewrap(2).before(a.getRule());
+			setBraces(c, a.getLeftCurlyBracketKeyword_4(), a.getRightCurlyBracketKeyword_6());
+	    }
+	    {
+	    	StatemachineElements a = f.getStatemachineAccess();
+		    c.setLinewrap(2).before(a.getRule());
+		    c.setLinewrap(1).before(a.getEventsKeyword_5());
+		    c.setNoSpace().before(a.getSemicolonKeyword_7());
+			setBraces(c, a.getLeftCurlyBracketKeyword_4(), a.getRightCurlyBracketKeyword_9());
+	    }
+	    {
+	    	TransitionElements a = f.getTransitionAccess();
+		    c.setLinewrap(1).before(a.getRule());
+	    }
+	    {	// comments
+	    	c.setNoLinewrap().before(f.getSL_COMMENTRule());
+	    }
+	}
+
+	public void setBraces(FormattingConfig c, Keyword leftBrace, Keyword rightBrace) {
+		c.setIndentation(leftBrace, rightBrace);
+	    c.setLinewrap().before(leftBrace);
+	    c.setLinewrap().after(leftBrace);
+	    c.setLinewrap().before(rightBrace);
+	    c.setLinewrap().after(rightBrace);
+	}
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src/org/eclipse/ocl/tutorial/eclipsecon2011/validation/OCLStatesJavaValidator.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src/org/eclipse/ocl/tutorial/eclipsecon2011/validation/OCLStatesJavaValidator.java
new file mode 100644
index 0000000..e571b46
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.oclstates/src/org/eclipse/ocl/tutorial/eclipsecon2011/validation/OCLStatesJavaValidator.java
@@ -0,0 +1,27 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2011 E.D.Willink and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   E.D.Willink - Initial API and implementation
+ *
+ * </copyright>
+ *
+ * $Id: OCLStatesJavaValidator.java,v 1.1 2011/03/15 07:51:54 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.validation;
+
+public class OCLStatesJavaValidator extends AbstractOCLStatesJavaValidator {
+
+//	@Check
+//	public void checkGreetingStartsWithCapital(Greeting greeting) {
+//		if (!Character.isUpperCase(greeting.getName().charAt(0))) {
+//			warning("Name should start with a capital", MyDslPackage.GREETING__NAME);
+//		}
+//	}
+}