Initial Commit
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/.cvsignore b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/.cvsignore
new file mode 100644
index 0000000..a3de7db
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/.cvsignore
@@ -0,0 +1 @@
+*.qvtotrace
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/.project b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/.project
new file mode 100644
index 0000000..e1cb584
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2m.qvt.oml.project.QVTOBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.m2m.qvt.oml.project.QVTONature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/Flatten States to XMI.launch b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/Flatten States to XMI.launch
new file mode 100644
index 0000000..7ebff3b
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/Flatten States to XMI.launch
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<launchConfiguration type="org.eclipse.m2m.qvt.oml.QvtTransformation">
+<booleanAttribute key="org.eclipse.m2m.qvt.oml.interpreter.clearContents1" value="true"/>
+<booleanAttribute key="org.eclipse.m2m.qvt.oml.interpreter.clearContents2" value="true"/>
+<mapAttribute key="org.eclipse.m2m.qvt.oml.interpreter.configurationProperties"/>
+<intAttribute key="org.eclipse.m2m.qvt.oml.interpreter.elemCount" value="2"/>
+<stringAttribute key="org.eclipse.m2m.qvt.oml.interpreter.featureName1" value=""/>
+<stringAttribute key="org.eclipse.m2m.qvt.oml.interpreter.featureName2" value=""/>
+<stringAttribute key="org.eclipse.m2m.qvt.oml.interpreter.module" value="platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/FlattenStates.qvto"/>
+<stringAttribute key="org.eclipse.m2m.qvt.oml.interpreter.targetModel1" value="platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/compound.states"/>
+<stringAttribute key="org.eclipse.m2m.qvt.oml.interpreter.targetModel2" value="platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/flattened.xmi"/>
+<stringAttribute key="org.eclipse.m2m.qvt.oml.interpreter.targetType1" value="NEW_MODEL"/>
+<stringAttribute key="org.eclipse.m2m.qvt.oml.interpreter.targetType2" value="NEW_MODEL"/>
+<stringAttribute key="org.eclipse.m2m.qvt.oml.interpreter.traceFile" value="platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/FlattenStates.qvtotrace"/>
+<booleanAttribute key="org.eclipse.m2m.qvt.oml.interpreter.useTraceFile" value="true"/>
+</launchConfiguration>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/Flatten States.launch b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/Flatten States.launch
new file mode 100644
index 0000000..d1b0858
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/Flatten States.launch
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<launchConfiguration type="org.eclipse.m2m.qvt.oml.QvtTransformation">
+<booleanAttribute key="org.eclipse.m2m.qvt.oml.interpreter.clearContents1" value="true"/>
+<booleanAttribute key="org.eclipse.m2m.qvt.oml.interpreter.clearContents2" value="true"/>
+<mapAttribute key="org.eclipse.m2m.qvt.oml.interpreter.configurationProperties"/>
+<intAttribute key="org.eclipse.m2m.qvt.oml.interpreter.elemCount" value="2"/>
+<stringAttribute key="org.eclipse.m2m.qvt.oml.interpreter.featureName1" value=""/>
+<stringAttribute key="org.eclipse.m2m.qvt.oml.interpreter.featureName2" value=""/>
+<stringAttribute key="org.eclipse.m2m.qvt.oml.interpreter.module" value="platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/FlattenStates.qvto"/>
+<stringAttribute key="org.eclipse.m2m.qvt.oml.interpreter.targetModel1" value="platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/compound.states"/>
+<stringAttribute key="org.eclipse.m2m.qvt.oml.interpreter.targetModel2" value="platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/flattened.states"/>
+<stringAttribute key="org.eclipse.m2m.qvt.oml.interpreter.targetType1" value="NEW_MODEL"/>
+<stringAttribute key="org.eclipse.m2m.qvt.oml.interpreter.targetType2" value="NEW_MODEL"/>
+<stringAttribute key="org.eclipse.m2m.qvt.oml.interpreter.traceFile" value="platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/FlattenStates.qvtotrace"/>
+<booleanAttribute key="org.eclipse.m2m.qvt.oml.interpreter.useTraceFile" value="true"/>
+</launchConfiguration>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/FlattenStates.qvto b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/FlattenStates.qvto
new file mode 100644
index 0000000..600e18b
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/FlattenStates.qvto
@@ -0,0 +1,180 @@
+/**
+ * <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: FlattenStates.qvto,v 1.1 2011/03/12 20:46:04 ewillink Exp $
+ */
+modeltype HIER uses 'http://ocl.eclipse.org/tutorial/eclipsecon2011/States';
+modeltype FLAT uses 'http://ocl.eclipse.org/tutorial/eclipsecon2011/States';
+
+/*
+ * The transformation signature declares that a HIER modeltype is required as input, while an FLAT
+ * modeltype is produced as an output.  The HIER modeltype is referenced as 'hier' throughout the 
+ * transformation definition, while no name is needed for the output FLAT modeltype.  Note that OCL 
+ * type and namespace notation are used in operational QVT (: and :: respectively).
+ */
+transformation FlattenStates(in hier : HIER, out FLAT);
+
+/*
+ * The main entry point of the transformation.  The 'hier' reference to the input HIER modeltype 
+ * instance is used to collect all rootObjects() of type Model.  The rootObjects() operation 
+ * is available on all QVT Model objects (extents) and returns those objects found at the 
+ * root of the input model.  The [HIER::Model] statement following the call to rootObjects() 
+ * is shorthand notation for the imperative select (xselect) construct where the condition is 
+ * a type expression, which effectively performs a oclIsKindOf(HIER::Model) with type recasting 
+ * as a sequence.
+ *
+ * The invocation of the model2FLATModel() mapping is done using an -> operator, which is a 
+ * shorthand notation for the imperative collect (xcollect) construct.  Alternatively, it could
+ * be written as hier.rootObjects()[HIER::Model]->xcollect(a | a.map model2FLATModel());
+ */
+main() {
+	hier.rootObjects()[HIER::Module]->map model2FLATModel();
+}
+
+/*
+ * This mapping returns an FLAT::Model instance from the HIER::Model passed from main().  The name 
+ * attributes map directly using the OCL assignment operator.  The FLAT Model has a collection 
+ * of schemas populated by the package2schemas() mapping.  The Sequence of FLAT::Schema objects 
+ * that is returned by the mapping is converted into the required OrderedSet using the OCL operation 
+ * asOrderedSet().
+ *
+ * This mapping has no init or end section, leaving the body as an implicit population section.
+ */
+mapping HIER::Module::model2FLATModel() : FLAT::Module {
+	name := 'flattened.' + self.name;
+	var name2state : Dict(String, HIER::State);
+	var allMachines : Set(HIER::Statemachine) =
+		self.machines.allMachines()->asSet();
+	var allStates : Set(HIER::State) =
+		allMachines.states->asSet();
+	var allCompoundStates : Set(HIER::CompoundState) =
+		allStates->select(oclIsTypeOf(HIER::CompoundState))
+			->collect(oclAsType(HIER::CompoundState))->asSet();
+	var rootMachines : Set(HIER::Statemachine) =
+		allMachines->select(m : HIER::Statemachine
+			| not allCompoundStates->exists(machine = m));
+//	var nestedMachines : Set(HIER::Statemachine) = allMachines - rootMachines;
+	machines := rootMachines->map machine2machine(name2state);
+}
+
+mapping HIER::Statemachine::machine2machine(name2state : Dict(String, HIER::State)) : FLAT::Statemachine {
+	var exitTransitions : Dict(FLAT::Event, FLAT::State);
+	name := self.name;
+	events := self.allMachines().events->asSet().map event2event();
+	states := self.states.map state2states(name2state, Sequence{});
+	self.states.map state2transitions(name2state, Sequence{}, exitTransitions);
+}
+
+mapping HIER::Event::event2event() : FLAT::Event {
+	name := self.name;
+}
+
+mapping HIER::State::state2states(name2state : Dict(String, HIER::State), hierarchy : Sequence(HIER::CompoundState)) : Set(FLAT::State)
+	disjuncts HIER::SimpleState::simpleState2states,
+	HIER::CompoundState::compoundState2states {}
+
+mapping HIER::SimpleState::simpleState2states(name2state : Dict(String, HIER::State), hierarchy : Sequence(HIER::CompoundState)) : Set(FLAT::SimpleState) {
+	init {
+		result := self.map simpleState2state(name2state, hierarchy)->asSet();
+	}
+}
+
+mapping HIER::SimpleState::simpleState2state(name2state : Dict(String, HIER::State), hierarchy : Sequence(HIER::CompoundState)) : FLAT::SimpleState {
+	var stateName : String = self.getStateName(hierarchy);
+	name := stateName;
+	value := self.value;
+	initial := hierarchy->isEmpty() and self.initial;
+	name2state->put(stateName, result);
+}
+
+mapping HIER::CompoundState::compoundState2states(name2state : Dict(String, HIER::State), hierarchy : Sequence(HIER::CompoundState)) : Set(FLAT::State) {
+	init {
+		result := self.machine.states.map state2states(name2state, hierarchy->append(self))->asSet();
+	}
+}
+
+mapping HIER::State::state2transitions(name2state : Dict(String, HIER::State), hierarchy : Sequence(HIER::CompoundState), exitTransitions : Dict(FLAT::Event, FLAT::State)) : Set(FLAT::State)
+	disjuncts HIER::SimpleState::simpleState2transitions,
+	HIER::CompoundState::compoundState2transitions {}
+
+mapping HIER::SimpleState::simpleState2transitions(name2state : Dict(String, HIER::State), hierarchy : Sequence(HIER::CompoundState), exitTransitions : Dict(FLAT::Event, FLAT::State)) : Set(FLAT::State) {
+	init {
+		result := self.map simpleState2transitions2(name2state, hierarchy, exitTransitions)->asSet();
+	}
+}
+
+mapping HIER::SimpleState::simpleState2transitions2(name2state : Dict(String, HIER::State), hierarchy : Sequence(HIER::CompoundState), exitTransitions : Dict(FLAT::Event, FLAT::State)) : FLAT::State {
+	init {
+		var stateName : String = self.getStateName(hierarchy);
+		result := name2state->get(stateName);
+	}
+	transitions := exitTransitions->keys()->iterate(v : FLAT::Event;
+		acc : Sequence(HIER::Transition) =
+			self.transitions.map transition2transition(name2state, hierarchy)
+		| acc->append(object FLAT::Transition { state := exitTransitions->get(v); event := v; }));
+}
+
+mapping HIER::CompoundState::compoundState2transitions(name2state : Dict(String, HIER::State), hierarchy : Sequence(HIER::CompoundState), outerExitTransitions : Dict(FLAT::Event, FLAT::State)) : Set(FLAT::State) {
+	init {
+		var innerExitTransitions : Dict(FLAT::Event, FLAT::State);
+		self.transitions.cacheTransition(name2state, hierarchy, innerExitTransitions);
+		outerExitTransitions->keys().cacheTransition(innerExitTransitions, outerExitTransitions);
+		result := self.machine.states.map state2transitions(name2state, hierarchy->append(self), innerExitTransitions)->asSet();
+	}
+}
+
+mapping HIER::Transition::transition2transition(name2state : Dict(String, HIER::State), hierarchy : Sequence(HIER::CompoundState)) : FLAT::Transition {
+	init {
+		var stateName : String = self.state.initialStateName(hierarchy);
+		result := object FLAT::Transition {};
+		result.state := name2state->get(stateName);
+		result.event := self.event.resolveone(Event);
+	}
+}
+
+query HIER::Statemachine::allMachines() : Set(HIER::Statemachine) {
+	return self->asSet()->union(self->closure(sm : HIER::Statemachine
+			| sm.states->select(oclIsTypeOf(HIER::CompoundState))
+					->collect(oclAsType(HIER::CompoundState).machine)))
+}
+
+query HIER::State::initialStateName(hierarchy : Sequence(HIER::CompoundState)) : String {
+	var stateName : String = self.getStateName(hierarchy);
+	return if self.oclIsKindOf(HIER::CompoundState)
+	       then let compoundState : HIER::CompoundState =
+	       			self.oclAsType(HIER::CompoundState)
+	       		in compoundState.machine.states->any(initial)
+	       			.initialStateName(hierarchy->append(compoundState))
+	       else stateName
+	       endif
+}
+
+query HIER::State::getStateName(hierarchy : Sequence(HIER::CompoundState)) : String {
+	return hierarchy->iterate(c : HIER::CompoundState;
+		s : String = self.name |
+		c.name + '_' + s)
+}
+
+query HIER::Transition::cacheTransition(name2state : Dict(String, HIER::State), hierarchy : Sequence(HIER::CompoundState), exitTransitions : Dict(FLAT::Event, FLAT::State)) : Dict(FLAT::Event, FLAT::State) {
+	var stateName : String = self.state.initialStateName(hierarchy);
+	var state : HIER::State = name2state->get(stateName);
+	var event : HIER::Event = self.event.resolveone(Event);
+	exitTransitions->put(event, state);
+	return exitTransitions
+}
+
+query FLAT::Event::cacheTransition(innerExitTransitions : Dict(FLAT::Event, FLAT::State), outerExitTransitions : Dict(FLAT::Event, FLAT::State)) : Dict(FLAT::Event, FLAT::State) {
+	innerExitTransitions->put(self, outerExitTransitions->get(self));
+	return innerExitTransitions
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/META-INF/MANIFEST.MF b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..2b644c5
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/META-INF/MANIFEST.MF
@@ -0,0 +1,6 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: EclipseCon 2011 Tutorial using QVTo
+Bundle-SymbolicName: org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates;singleton:=true
+Bundle-Version: 1.0.0
+Bundle-Vendor: Eclipse Modeling Project
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/build.properties b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/build.properties
new file mode 100644
index 0000000..5f22cdd
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/build.properties
@@ -0,0 +1 @@
+bin.includes = META-INF/
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/compound.states b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/compound.states
new file mode 100644
index 0000000..7e387bf
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/compound.states
@@ -0,0 +1,41 @@
+module "compound.states"
+
+statemachine Outer
+{
+	events START STOP;
+
+	initial state Start value 4
+	{
+		START => CompoundA
+	}
+
+	state Stop value 5
+	{
+		STOP => CompoundB
+	}
+
+	compound state CompoundA machine Inner
+	{
+		START => Stop
+	}
+
+	compound state CompoundB machine Inner
+	{
+		STOP => Stop
+	}
+}
+
+statemachine Inner
+{
+	events LEFT RIGHT;
+
+	initial state Left value 1
+	{
+		LEFT => Right
+	}
+
+	state Right
+	{
+		RIGHT => Left
+	}
+}
\ No newline at end of file
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/sample.properties b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/sample.properties
new file mode 100644
index 0000000..34563fc
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates/sample.properties
@@ -0,0 +1,4 @@
+#
+#Wed Mar 09 07:59:35 GMT 2011
+projectName=org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates
+name=org.eclipse.ocl.tutorial.eclipsecon2011.flattenstates
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/.classpath b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/.classpath
new file mode 100644
index 0000000..8727917
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/.classpath
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/.cvsignore b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/.cvsignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/.cvsignore
@@ -0,0 +1 @@
+bin
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/.project b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/.project
new file mode 100644
index 0000000..1089f24
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.ocl.tutorial.eclipsecon2011.playspace</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/.settings/org.eclipse.jdt.core.prefs b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..8b3008e
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Wed Mar 09 06:22:52 GMT 2011
+eclipse.preferences.version=1
+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.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/flattened.states b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/flattened.states
new file mode 100644
index 0000000..1b8356c
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/flattened.states
@@ -0,0 +1,40 @@
+module "flattened.compound.states"
+
+statemachine Outer
+{
+	events START LEFT STOP RIGHT;
+
+	initial state Start value 4
+	{
+		START => CompoundA_Left
+	}
+
+	state Stop value 5
+	{
+		STOP => CompoundB_Left
+	}
+
+	state CompoundA_Right
+	{
+		RIGHT => CompoundA_Left
+		START => Stop
+	}
+
+	state CompoundA_Left value 1
+	{
+		LEFT => CompoundA_Right
+		START => Stop
+	}
+
+	state CompoundB_Right
+	{
+		RIGHT => CompoundB_Left
+		STOP => Stop
+	}
+
+	state CompoundB_Left value 1
+	{
+		LEFT => CompoundB_Right
+		STOP => Stop
+	}
+}
\ No newline at end of file
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/flattened.xmi b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/flattened.xmi
new file mode 100644
index 0000000..a1e503a
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/flattened.xmi
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<states:Module xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:states="http://ocl.eclipse.org/tutorial/eclipsecon2011/States" name="flattened.compound.states">
+  <machines name="Outer">
+    <events name="RIGHT"/>
+    <events name="START"/>
+    <events name="LEFT"/>
+    <events name="STOP"/>
+    <states xsi:type="states:SimpleState" initial="true" name="Start" value="4">
+      <transitions event="//@machines.0/@events.1" state="//@machines.0/@states.3"/>
+    </states>
+    <states xsi:type="states:SimpleState" name="Stop" value="5">
+      <transitions event="//@machines.0/@events.3" state="//@machines.0/@states.5"/>
+    </states>
+    <states xsi:type="states:SimpleState" name="CompoundA_Right">
+      <transitions event="//@machines.0/@events.0" state="//@machines.0/@states.3"/>
+      <transitions event="//@machines.0/@events.1" state="//@machines.0/@states.1"/>
+    </states>
+    <states xsi:type="states:SimpleState" name="CompoundA_Left" value="1">
+      <transitions event="//@machines.0/@events.2" state="//@machines.0/@states.2"/>
+      <transitions event="//@machines.0/@events.1" state="//@machines.0/@states.1"/>
+    </states>
+    <states xsi:type="states:SimpleState" name="CompoundB_Right">
+      <transitions event="//@machines.0/@events.0" state="//@machines.0/@states.5"/>
+      <transitions event="//@machines.0/@events.3" state="//@machines.0/@states.1"/>
+    </states>
+    <states xsi:type="states:SimpleState" name="CompoundB_Left" value="1">
+      <transitions event="//@machines.0/@events.2" state="//@machines.0/@states.4"/>
+      <transitions event="//@machines.0/@events.3" state="//@machines.0/@states.1"/>
+    </states>
+  </machines>
+</states:Module>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/src/simple/states/Machine.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/src/simple/states/Machine.java
new file mode 100644
index 0000000..3e85b74
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/src/simple/states/Machine.java
@@ -0,0 +1,34 @@
+package simple.states;
+
+public class Machine
+{
+    public interface State
+    {
+        public void doSTART();
+        public void doSTOP();
+
+        enum STATES
+        {
+            STATE_Start,
+            STATE_Stop
+        }
+    }
+
+    private final State[] states = new State[] {
+        new Start(this),
+        new Stop(this)
+    };
+
+    private State state;
+
+    public Machine() {
+        setState(State.STATES.STATE_Start);
+    }
+
+    public void setState(State.STATES state) {
+        this.state = states[state.ordinal()];
+    }
+
+    public void doSTART() { state.doSTART(); }
+    public void doSTOP() { state.doSTOP(); }
+}    
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/src/simple/states/Start.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/src/simple/states/Start.java
new file mode 100644
index 0000000..be523be
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/src/simple/states/Start.java
@@ -0,0 +1,10 @@
+package simple.states;
+
+public class Start implements Machine.State {
+    private final Machine sm;
+    public Start(Machine sm) {
+        this.sm = sm;
+    }
+    public void doSTART()
+        { sm.setState(STATES.STATE_Start); }
+}    
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/src/simple/states/Stop.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/src/simple/states/Stop.java
new file mode 100644
index 0000000..490a1e1
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/src/simple/states/Stop.java
@@ -0,0 +1,11 @@
+package simple.states;
+
+public class Stop implements Machine.State
+{
+    private final Machine sm;
+
+    public Stop(Machine sm) {
+        this.sm = sm;
+    }
+    public void doSTOP() { sm.setState(STATES.STATE_Stop); }
+}    
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ocl/.project b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ocl/.project
new file mode 100644
index 0000000..e0416d2
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ocl/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.ocl.tutorial.eclipsecon2011.states.ocl</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<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.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ocl/.settings/org.eclipse.ocl.modelregistry b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ocl/.settings/org.eclipse.ocl.modelregistry
new file mode 100644
index 0000000..97607db
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ocl/.settings/org.eclipse.ocl.modelregistry
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="ASCII"?>
+<mreg:ModelRegistrySettings xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:mreg="http://www.eclipse.org/ocl/1.0/ModelRegistry">
+  <resource name="">
+    <entry accessor="http://ocl.eclipse.org/tutorial/eclipsecon2011/States" kind="URI" uri="platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore"/>
+  </resource>
+</mreg:ModelRegistrySettings>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ocl/META-INF/MANIFEST.MF b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ocl/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..cd790ff
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ocl/META-INF/MANIFEST.MF
@@ -0,0 +1,6 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: EclipseCon 2011 Tutorial States OCL Constraints
+Bundle-SymbolicName: org.eclipse.ocl.tutorial.eclipsecon2011.states.ocl
+Bundle-Version: 1.0.0
+Bundle-Vendor: Eclipse Modeling Project
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ocl/build.properties b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ocl/build.properties
new file mode 100644
index 0000000..5f22cdd
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ocl/build.properties
@@ -0,0 +1 @@
+bin.includes = META-INF/
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ocl/model/States.ocl b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ocl/model/States.ocl
new file mode 100644
index 0000000..f8d69ed
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ocl/model/States.ocl
@@ -0,0 +1,26 @@
+import 'http://ocl.eclipse.org/tutorial/eclipsecon2011/States'
+
+package states
+
+context Statemachine
+inv HasInitialState('No initial state'):
+	states->exists(s : State | s.initial)
+
+context SimpleState
+def: asError(verdict : Boolean) : Boolean =
+	if verdict then true else null endif
+def: getStatemachine() : Statemachine =
+	Statemachine.allInstances()->any(states->includes(self))
+inv EveryEventIsHandled((getStatemachine().events->asSet() - self.transitions.event->asSet())->iterate(e : Event; s : String = 'The following events are not handled:' | s + ' ' + e.name)):
+	(getStatemachine().events->asSet() - self.transitions.event->asSet())->isEmpty()
+inv UniqueInitialState('There is more than one initial state'):
+--	initial implies
+--	let states : Set(State) = Statemachine.allInstances()->any(states->includes(self))
+--	in states->select(initial)->size() = 1
+	initial implies getStatemachine().states->select(initial)->size() = 1 
+--inv NameLength('\'' + name + '\' has ' + name.size().toString() + ' characters when at least 4 wanted'):
+--	name.size() >= 4
+--inv NameIsLowerCase('\'' + name + '\' must be Leading Uppercase'):
+--	let firstLetter : String = name.substring(1,1) in firstLetter.toUpperCase() = firstLetter
+
+endpackage
\ No newline at end of file
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/.classpath b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/.classpath
new file mode 100644
index 0000000..59cf397
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.ui/.cvsignore b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/.cvsignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/.cvsignore
@@ -0,0 +1 @@
+bin
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/.project b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/.project
new file mode 100644
index 0000000..eaabe72
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.ui/.settings/org.eclipse.core.resources.prefs b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.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.states.ui/.settings/org.eclipse.jdt.core.prefs b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.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.states.ui/.settings/org.eclipse.jdt.launching.prefs b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.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.states.ui/.settings/org.eclipse.jdt.ui.prefs b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.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.states.ui/.settings/org.eclipse.pde.prefs b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000..2bd5814
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.ui/META-INF/MANIFEST.MF b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..081b4de
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,17 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: EclipseCon 2011 Tutorial Xtext Editor UI
+Bundle-SymbolicName: org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states,
+ 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.StatesActivator
+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.states.ui/about.html b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/about.html
new file mode 100644
index 0000000..1b8f940
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.ui/build.properties b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/build.properties
new file mode 100644
index 0000000..6beed05
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.ui/icons/editor.gif b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/icons/editor.gif
new file mode 100644
index 0000000..2a2b4b6
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/icons/editor.gif
Binary files differ
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/plugin.xml b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/plugin.xml
new file mode 100644
index 0000000..5b277a0
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.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.StatesExecutableExtensionFactory:org.eclipse.xtext.ui.editor.XtextEditor"
+            contributorClass="org.eclipse.ui.editors.text.TextEditorActionContributor"
+            default="true"
+            extensions="states"
+            id="org.eclipse.ocl.tutorial.eclipsecon2011.States"
+            name="States Editor">
+        </editor>
+    </extension>
+    <extension
+        point="org.eclipse.ui.handlers">
+        <handler
+            class="org.eclipse.ocl.tutorial.eclipsecon2011.ui.StatesExecutableExtensionFactory:org.eclipse.xtext.ui.editor.hyperlinking.OpenDeclarationHandler"
+            commandId="org.eclipse.xtext.ui.editor.hyperlinking.OpenDeclaration">
+            <activeWhen>
+                <reference
+                    definitionId="org.eclipse.ocl.tutorial.eclipsecon2011.States.Editor.opened">
+                </reference>
+            </activeWhen>
+        </handler>
+        <handler
+            class="org.eclipse.ocl.tutorial.eclipsecon2011.ui.StatesExecutableExtensionFactory:org.eclipse.xtext.ui.editor.handler.ValidateActionHandler"
+            commandId="org.eclipse.ocl.tutorial.eclipsecon2011.States.validate">
+         <activeWhen>
+            <reference
+                    definitionId="org.eclipse.ocl.tutorial.eclipsecon2011.States.Editor.opened">
+            </reference>
+         </activeWhen>
+      </handler>
+    </extension>
+    <extension point="org.eclipse.core.expressions.definitions">
+        <definition id="org.eclipse.ocl.tutorial.eclipsecon2011.States.Editor.opened">
+            <and>
+                <reference definitionId="isActiveEditorAnInstanceOfXtextEditor"/>
+                <with variable="activeEditor">
+                    <test property="org.eclipse.xtext.ui.editor.XtextEditor.languageName" 
+                        value="org.eclipse.ocl.tutorial.eclipsecon2011.States" 
+                        forcePluginActivation="true"/>
+                </with>        
+            </and>
+        </definition>
+    </extension>
+    <extension
+            point="org.eclipse.ui.preferencePages">
+        <page
+            class="org.eclipse.ocl.tutorial.eclipsecon2011.ui.StatesExecutableExtensionFactory:org.eclipse.xtext.ui.editor.preferences.LanguageRootPreferencePage"
+            id="org.eclipse.ocl.tutorial.eclipsecon2011.States"
+            name="States">
+            <keywordReference id="org.eclipse.ocl.tutorial.eclipsecon2011.ui.keyword_States"/>
+        </page>
+        <page
+            category="org.eclipse.ocl.tutorial.eclipsecon2011.States"
+            class="org.eclipse.ocl.tutorial.eclipsecon2011.ui.StatesExecutableExtensionFactory:org.eclipse.xtext.ui.editor.syntaxcoloring.SyntaxColoringPreferencePage"
+            id="org.eclipse.ocl.tutorial.eclipsecon2011.States.coloring"
+            name="Syntax Coloring">
+            <keywordReference id="org.eclipse.ocl.tutorial.eclipsecon2011.ui.keyword_States"/>
+        </page>
+        <page
+            category="org.eclipse.ocl.tutorial.eclipsecon2011.States"
+            class="org.eclipse.ocl.tutorial.eclipsecon2011.ui.StatesExecutableExtensionFactory:org.eclipse.xtext.ui.editor.templates.XtextTemplatePreferencePage"
+            id="org.eclipse.ocl.tutorial.eclipsecon2011.States.templates"
+            name="Templates">
+            <keywordReference id="org.eclipse.ocl.tutorial.eclipsecon2011.ui.keyword_States"/>
+        </page>
+    </extension>
+    <extension
+        point="org.eclipse.ui.keywords">
+        <keyword
+            id="org.eclipse.ocl.tutorial.eclipsecon2011.ui.keyword_States"
+            label="States"/>
+    </extension>
+    <extension
+         point="org.eclipse.ui.commands">
+      <command
+            description="Trigger expensive validation"
+            id="org.eclipse.ocl.tutorial.eclipsecon2011.States.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.States.validate"
+                 style="push"
+                 tooltip="Trigger expensive validation">
+            <visibleWhen checkEnabled="false">
+                <reference
+                    definitionId="org.eclipse.ocl.tutorial.eclipsecon2011.States.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.States.Editor.opened">
+                	</reference>
+            	</visibleWhen>
+			</command>
+		</menuContribution>
+	</extension>
+	<extension point="org.eclipse.ui.handlers">
+	    <handler
+            class="org.eclipse.ocl.tutorial.eclipsecon2011.ui.StatesExecutableExtensionFactory:org.eclipse.xtext.ui.editor.findrefs.FindReferencesHandler"
+            commandId="org.eclipse.xtext.ui.editor.FindReferences">
+            <activeWhen>
+                <reference
+                    definitionId="org.eclipse.ocl.tutorial.eclipsecon2011.States.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.StatesExecutableExtensionFactory:org.eclipse.xtext.resource.IResourceFactory"
+			type="states">
+		</parser>
+	</extension>
+	<extension point="org.eclipse.xtext.extension_resourceServiceProvider">
+        <resourceServiceProvider
+            class="org.eclipse.ocl.tutorial.eclipsecon2011.ui.StatesExecutableExtensionFactory:org.eclipse.xtext.ui.resource.IResourceUIServiceProvider"
+            uriExtension="states">
+        </resourceServiceProvider>
+    </extension>
+
+
+
+	<!-- Quick Outline -->
+	<extension
+		point="org.eclipse.ui.handlers">
+		<handler 
+			class="org.eclipse.ocl.tutorial.eclipsecon2011.ui.StatesExecutableExtensionFactory:org.eclipse.xtext.ui.editor.outline.quickoutline.ShowQuickOutlineActionHandler"
+			commandId="org.eclipse.xtext.ui.editor.outline.QuickOutline">
+			<activeWhen>
+				<reference
+					definitionId="org.eclipse.ocl.tutorial.eclipsecon2011.States.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.States.Editor.opened"/>
+				</visibleWhen>
+			</command>
+		</menuContribution>
+	</extension>
+
+</plugin>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/AbstractStatesUiModule.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/AbstractStatesUiModule.java
new file mode 100644
index 0000000..02d3bb0
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/AbstractStatesUiModule.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.StatesUiModule}
+ */
+@SuppressWarnings("all")
+public abstract class AbstractStatesUiModule extends DefaultUiModule {
+	
+	public AbstractStatesUiModule(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.InternalStatesLexer.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.StatesLabelProvider.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.StatesDescriptionLabelProvider.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.StatesOutlineTreeProvider.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.StatesOutlineTreeProvider.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.StatesProposalProvider.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.StatesParser.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.InternalStatesLexer.class).toProvider(org.eclipse.xtext.parser.antlr.LexerProvider.create(org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist.antlr.internal.InternalStatesLexer.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.InternalStatesLexer.class);
+	}
+
+
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/StatesExecutableExtensionFactory.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/StatesExecutableExtensionFactory.java
new file mode 100644
index 0000000..9e8b40d
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/StatesExecutableExtensionFactory.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 StatesExecutableExtensionFactory extends AbstractGuiceAwareExecutableExtensionFactory {
+
+	@Override
+	protected Bundle getBundle() {
+		return org.eclipse.ocl.tutorial.eclipsecon2011.ui.internal.StatesActivator.getInstance().getBundle();
+	}
+	
+	@Override
+	protected Injector getInjector() {
+		return org.eclipse.ocl.tutorial.eclipsecon2011.ui.internal.StatesActivator.getInstance().getInjector("org.eclipse.ocl.tutorial.eclipsecon2011.States");
+	}
+	
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/AbstractStatesProposalProvider.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/AbstractStatesProposalProvider.java
new file mode 100644
index 0000000..5d48cd7
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/AbstractStatesProposalProvider.java
@@ -0,0 +1,109 @@
+/*
+* 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 AbstractStatesProposalProvider extends TerminalsProposalProvider {
+		
+	public void completeModule_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)((Alternatives)assignment.getTerminal()).getElements().get(0)), context, acceptor);
+		completeRuleCall(((RuleCall)((Alternatives)assignment.getTerminal()).getElements().get(1)), 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 completeStatemachine_DbgName(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 completeSimpleState_DbgName(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 completeCompoundState_DbgName(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 completeTransition_DbgName(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/StatesParser.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/StatesParser.java
new file mode 100644
index 0000000..38dff85
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/StatesParser.java
@@ -0,0 +1,104 @@
+/*
+* 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.StatesGrammarAccess;
+
+public class StatesParser extends AbstractContentAssistParser {
+	
+	@Inject
+	private StatesGrammarAccess grammarAccess;
+	
+	private Map<AbstractElement, String> nameMappings;
+	
+	@Override
+	protected org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist.antlr.internal.InternalStatesParser createParser() {
+		org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist.antlr.internal.InternalStatesParser result = new org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist.antlr.internal.InternalStatesParser(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.getModuleAccess().getNameAlternatives_1_0(), "rule__Module__NameAlternatives_1_0");
+					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.getStatemachineAccess().getGroup_10(), "rule__Statemachine__Group_10__0");
+					put(grammarAccess.getSimpleStateAccess().getGroup(), "rule__SimpleState__Group__0");
+					put(grammarAccess.getSimpleStateAccess().getGroup_3(), "rule__SimpleState__Group_3__0");
+					put(grammarAccess.getSimpleStateAccess().getGroup_7(), "rule__SimpleState__Group_7__0");
+					put(grammarAccess.getCompoundStateAccess().getGroup(), "rule__CompoundState__Group__0");
+					put(grammarAccess.getCompoundStateAccess().getGroup_9(), "rule__CompoundState__Group_9__0");
+					put(grammarAccess.getTransitionAccess().getGroup(), "rule__Transition__Group__0");
+					put(grammarAccess.getTransitionAccess().getGroup_3(), "rule__Transition__Group_3__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.getStatemachineAccess().getDbgNameAssignment_10_1(), "rule__Statemachine__DbgNameAssignment_10_1");
+					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.getSimpleStateAccess().getDbgNameAssignment_7_1(), "rule__SimpleState__DbgNameAssignment_7_1");
+					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.getCompoundStateAccess().getDbgNameAssignment_9_1(), "rule__CompoundState__DbgNameAssignment_9_1");
+					put(grammarAccess.getTransitionAccess().getEventAssignment_0(), "rule__Transition__EventAssignment_0");
+					put(grammarAccess.getTransitionAccess().getStateAssignment_2(), "rule__Transition__StateAssignment_2");
+					put(grammarAccess.getTransitionAccess().getDbgNameAssignment_3_1(), "rule__Transition__DbgNameAssignment_3_1");
+				}
+			};
+		}
+		return nameMappings.get(element);
+	}
+	
+	@Override
+	protected Collection<FollowElement> getFollowElements(AbstractInternalContentAssistParser parser) {
+		try {
+			org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist.antlr.internal.InternalStatesParser typedParser = (org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist.antlr.internal.InternalStatesParser) 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 StatesGrammarAccess getGrammarAccess() {
+		return this.grammarAccess;
+	}
+	
+	public void setGrammarAccess(StatesGrammarAccess grammarAccess) {
+		this.grammarAccess = grammarAccess;
+	}
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g
new file mode 100644
index 0000000..70ce9bc
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g
@@ -0,0 +1,2205 @@
+/*
+* generated by Xtext
+*/
+grammar InternalStates;
+
+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.StatesGrammarAccess;
+
+}
+
+@parser::members {
+ 
+ 	private StatesGrammarAccess grammarAccess;
+ 	
+    public void setGrammarAccess(StatesGrammarAccess 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__Module__NameAlternatives_1_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getModuleAccess().getNameSTRINGTerminalRuleCall_1_0_0()); }
+	RULE_STRING
+{ after(grammarAccess.getModuleAccess().getNameSTRINGTerminalRuleCall_1_0_0()); }
+)
+
+    |(
+{ before(grammarAccess.getModuleAccess().getNameIDTerminalRuleCall_1_0_1()); }
+	RULE_ID
+{ after(grammarAccess.getModuleAccess().getNameIDTerminalRuleCall_1_0_1()); }
+)
+
+;
+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
+	rule__Statemachine__Group__10
+;
+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__10
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Statemachine__Group__10__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Statemachine__Group__10__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStatemachineAccess().getGroup_10()); }
+(rule__Statemachine__Group_10__0)?
+{ after(grammarAccess.getStatemachineAccess().getGroup_10()); }
+)
+
+;
+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__Statemachine__Group_10__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Statemachine__Group_10__0__Impl
+	rule__Statemachine__Group_10__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Statemachine__Group_10__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStatemachineAccess().getDebugKeyword_10_0()); }
+
+	'debug' 
+
+{ after(grammarAccess.getStatemachineAccess().getDebugKeyword_10_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Statemachine__Group_10__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Statemachine__Group_10__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Statemachine__Group_10__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStatemachineAccess().getDbgNameAssignment_10_1()); }
+(rule__Statemachine__DbgNameAssignment_10_1)
+{ after(grammarAccess.getStatemachineAccess().getDbgNameAssignment_10_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
+	rule__SimpleState__Group__7
+;
+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__7
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__SimpleState__Group__7__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__SimpleState__Group__7__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getSimpleStateAccess().getGroup_7()); }
+(rule__SimpleState__Group_7__0)?
+{ after(grammarAccess.getSimpleStateAccess().getGroup_7()); }
+)
+
+;
+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__SimpleState__Group_7__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__SimpleState__Group_7__0__Impl
+	rule__SimpleState__Group_7__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__SimpleState__Group_7__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getSimpleStateAccess().getDebugKeyword_7_0()); }
+
+	'debug' 
+
+{ after(grammarAccess.getSimpleStateAccess().getDebugKeyword_7_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__SimpleState__Group_7__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__SimpleState__Group_7__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__SimpleState__Group_7__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getSimpleStateAccess().getDbgNameAssignment_7_1()); }
+(rule__SimpleState__DbgNameAssignment_7_1)
+{ after(grammarAccess.getSimpleStateAccess().getDbgNameAssignment_7_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
+	rule__CompoundState__Group__9
+;
+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__CompoundState__Group__9
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__CompoundState__Group__9__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CompoundState__Group__9__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getCompoundStateAccess().getGroup_9()); }
+(rule__CompoundState__Group_9__0)?
+{ after(grammarAccess.getCompoundStateAccess().getGroup_9()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+rule__CompoundState__Group_9__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__CompoundState__Group_9__0__Impl
+	rule__CompoundState__Group_9__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CompoundState__Group_9__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getCompoundStateAccess().getDebugKeyword_9_0()); }
+
+	'debug' 
+
+{ after(grammarAccess.getCompoundStateAccess().getDebugKeyword_9_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__CompoundState__Group_9__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__CompoundState__Group_9__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CompoundState__Group_9__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getCompoundStateAccess().getDbgNameAssignment_9_1()); }
+(rule__CompoundState__DbgNameAssignment_9_1)
+{ after(grammarAccess.getCompoundStateAccess().getDbgNameAssignment_9_1()); }
+)
+
+;
+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
+	rule__Transition__Group__3
+;
+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__Transition__Group__3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Transition__Group__3__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__3__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getTransitionAccess().getGroup_3()); }
+(rule__Transition__Group_3__0)?
+{ after(grammarAccess.getTransitionAccess().getGroup_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+
+rule__Transition__Group_3__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Transition__Group_3__0__Impl
+	rule__Transition__Group_3__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group_3__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getTransitionAccess().getDebugKeyword_3_0()); }
+
+	'debug' 
+
+{ after(grammarAccess.getTransitionAccess().getDebugKeyword_3_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Transition__Group_3__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Transition__Group_3__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group_3__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getTransitionAccess().getDbgNameAssignment_3_1()); }
+(rule__Transition__DbgNameAssignment_3_1)
+{ after(grammarAccess.getTransitionAccess().getDbgNameAssignment_3_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+rule__Module__NameAssignment_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getModuleAccess().getNameAlternatives_1_0()); }
+(rule__Module__NameAlternatives_1_0)
+{ after(grammarAccess.getModuleAccess().getNameAlternatives_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__Statemachine__DbgNameAssignment_10_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStatemachineAccess().getDbgNameIDTerminalRuleCall_10_1_0()); }
+	RULE_ID{ after(grammarAccess.getStatemachineAccess().getDbgNameIDTerminalRuleCall_10_1_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__SimpleState__DbgNameAssignment_7_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getSimpleStateAccess().getDbgNameIDTerminalRuleCall_7_1_0()); }
+	RULE_ID{ after(grammarAccess.getSimpleStateAccess().getDbgNameIDTerminalRuleCall_7_1_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__CompoundState__DbgNameAssignment_9_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getCompoundStateAccess().getDbgNameIDTerminalRuleCall_9_1_0()); }
+	RULE_ID{ after(grammarAccess.getCompoundStateAccess().getDbgNameIDTerminalRuleCall_9_1_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__Transition__DbgNameAssignment_3_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getTransitionAccess().getDbgNameIDTerminalRuleCall_3_1_0()); }
+	RULE_ID{ after(grammarAccess.getTransitionAccess().getDbgNameIDTerminalRuleCall_3_1_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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.tokens b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.tokens
new file mode 100644
index 0000000..de3b5ce
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.tokens
@@ -0,0 +1,33 @@
+RULE_ML_COMMENT=7
+T__12=12
+RULE_ID=5
+T__23=23
+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
+'compound'=20
+'events'=14
+'debug'=18
+'=>'=22
+'machine'=21
+'{'=13
+';'=15
+'module'=11
+'initial'=23
+'value'=17
+'state'=19
+'}'=16
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStatesLexer.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStatesLexer.java
new file mode 100644
index 0000000..8e1ba67
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStatesLexer.java
@@ -0,0 +1,1222 @@
+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 InternalStatesLexer 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__23=23;
+    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 InternalStatesLexer() {;} 
+    public InternalStatesLexer(CharStream input) {
+        this(input, new RecognizerSharedState());
+    }
+    public InternalStatesLexer(CharStream input, RecognizerSharedState state) {
+        super(input,state);
+
+    }
+    public String getGrammarFileName() { return "../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:11:7: ( 'module' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:12:7: ( 'statemachine' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:13:7: ( '{' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:14:7: ( 'events' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:15:7: ( ';' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:16:7: ( '}' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:17:7: ( 'value' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:18:7: ( 'debug' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:18:9: 'debug'
+            {
+            match("debug"); 
+
+
+            }
+
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:19:7: ( 'state' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:20:7: ( 'compound' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:21:7: ( 'machine' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:22:7: ( '=>' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:22:9: '=>'
+            {
+            match("=>"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__22"
+
+    // $ANTLR start "T__23"
+    public final void mT__23() throws RecognitionException {
+        try {
+            int _type = T__23;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:23:7: ( 'initial' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:23:9: 'initial'
+            {
+            match("initial"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__23"
+
+    // $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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2191:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2191:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2191:11: ( '^' )?
+            int alt1=2;
+            int LA1_0 = input.LA(1);
+
+            if ( (LA1_0=='^') ) {
+                alt1=1;
+            }
+            switch (alt1) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2191: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2191: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2193:10: ( ( '0' .. '9' )+ )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2193:12: ( '0' .. '9' )+
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2193: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2193: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2195:13: ( ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2195:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2195: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2195:16: '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
+                    {
+                    match('\"'); 
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2195: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2195: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2195: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2195:86: '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
+                    {
+                    match('\''); 
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2195: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2195: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2195: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2197:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2197:19: '/*' ( options {greedy=false; } : . )* '*/'
+            {
+            match("/*"); 
+
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2197: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2197: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2199:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2199:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            {
+            match("//"); 
+
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2199: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2199: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2199: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2199:41: ( '\\r' )? '\\n'
+                    {
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2199: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2199: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2201:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2201:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2201: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2203:16: ( . )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2203:18: .
+            {
+            matchAny(); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ANY_OTHER"
+
+    public void mTokens() throws RecognitionException {
+        // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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 | T__23 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
+        int alt12=20;
+        alt12 = dfa12.predict(input);
+        switch (alt12) {
+            case 1 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1:10: T__11
+                {
+                mT__11(); 
+
+                }
+                break;
+            case 2 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1:16: T__12
+                {
+                mT__12(); 
+
+                }
+                break;
+            case 3 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1:22: T__13
+                {
+                mT__13(); 
+
+                }
+                break;
+            case 4 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1:28: T__14
+                {
+                mT__14(); 
+
+                }
+                break;
+            case 5 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1:34: T__15
+                {
+                mT__15(); 
+
+                }
+                break;
+            case 6 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1:40: T__16
+                {
+                mT__16(); 
+
+                }
+                break;
+            case 7 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1:46: T__17
+                {
+                mT__17(); 
+
+                }
+                break;
+            case 8 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1:52: T__18
+                {
+                mT__18(); 
+
+                }
+                break;
+            case 9 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1:58: T__19
+                {
+                mT__19(); 
+
+                }
+                break;
+            case 10 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1:64: T__20
+                {
+                mT__20(); 
+
+                }
+                break;
+            case 11 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1:70: T__21
+                {
+                mT__21(); 
+
+                }
+                break;
+            case 12 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1:76: T__22
+                {
+                mT__22(); 
+
+                }
+                break;
+            case 13 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1:82: T__23
+                {
+                mT__23(); 
+
+                }
+                break;
+            case 14 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1:88: RULE_ID
+                {
+                mRULE_ID(); 
+
+                }
+                break;
+            case 15 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1:96: RULE_INT
+                {
+                mRULE_INT(); 
+
+                }
+                break;
+            case 16 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1:105: RULE_STRING
+                {
+                mRULE_STRING(); 
+
+                }
+                break;
+            case 17 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1:117: RULE_ML_COMMENT
+                {
+                mRULE_ML_COMMENT(); 
+
+                }
+                break;
+            case 18 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1:133: RULE_SL_COMMENT
+                {
+                mRULE_SL_COMMENT(); 
+
+                }
+                break;
+            case 19 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1:149: RULE_WS
+                {
+                mRULE_WS(); 
+
+                }
+                break;
+            case 20 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1:157: RULE_ANY_OTHER
+                {
+                mRULE_ANY_OTHER(); 
+
+                }
+                break;
+
+        }
+
+    }
+
+
+    protected DFA12 dfa12 = new DFA12(this);
+    static final String DFA12_eotS =
+        "\1\uffff\2\26\1\uffff\1\26\2\uffff\3\26\1\23\1\26\1\23\2\uffff"+
+        "\3\23\2\uffff\2\26\1\uffff\1\26\1\uffff\1\26\2\uffff\3\26\1\uffff"+
+        "\1\26\5\uffff\22\26\1\101\1\26\1\103\1\104\2\26\1\107\2\26\1\uffff"+
+        "\1\112\2\uffff\2\26\1\uffff\1\115\1\26\1\uffff\1\26\1\120\1\uffff"+
+        "\1\26\1\122\1\uffff\1\26\1\uffff\2\26\1\126\1\uffff";
+    static final String DFA12_eofS =
+        "\127\uffff";
+    static final String DFA12_minS =
+        "\1\0\1\141\1\164\1\uffff\1\166\2\uffff\1\141\1\145\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\142\1\155\1\uffff\1\151\5\uffff\1\165"+
+        "\1\150\1\164\1\156\2\165\1\160\1\164\1\154\1\151\1\145\1\164\1\145"+
+        "\1\147\1\157\1\151\1\145\1\156\1\60\1\163\2\60\1\165\1\141\1\60"+
+        "\1\145\1\141\1\uffff\1\60\2\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\145\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\142\1\155\1\uffff\1\151\5\uffff"+
+        "\1\165\1\150\1\164\1\156\2\165\1\160\1\164\1\154\1\151\1\145\1\164"+
+        "\1\145\1\147\1\157\1\151\1\145\1\156\1\172\1\163\2\172\1\165\1\141"+
+        "\1\172\1\145\1\141\1\uffff\1\172\2\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\6\uffff\1\16\1\17\3\uffff\1\23\1\24"+
+        "\2\uffff\1\16\1\uffff\1\3\1\uffff\1\5\1\6\3\uffff\1\14\1\uffff\1"+
+        "\17\1\20\1\21\1\22\1\23\33\uffff\1\11\1\uffff\1\7\1\10\2\uffff\1"+
+        "\1\2\uffff\1\4\2\uffff\1\13\2\uffff\1\15\1\uffff\1\12\3\uffff\1"+
+        "\2";
+    static final String DFA12_specialS =
+        "\1\1\16\uffff\1\0\1\2\106\uffff}>";
+    static final String[] DFA12_transitionS = {
+            "\11\23\2\22\2\23\1\22\22\23\1\22\1\23\1\17\4\23\1\20\7\23\1"+
+            "\21\12\16\1\23\1\5\1\23\1\12\3\23\32\15\3\23\1\14\1\15\1\23"+
+            "\2\15\1\11\1\10\1\4\3\15\1\13\3\15\1\1\5\15\1\2\2\15\1\7\4\15"+
+            "\1\3\1\23\1\6\uff82\23",
+            "\1\25\15\uffff\1\24",
+            "\1\27",
+            "",
+            "\1\31",
+            "",
+            "",
+            "\1\34",
+            "\1\35",
+            "\1\36",
+            "\1\37",
+            "\1\40",
+            "\32\26\4\uffff\1\26\1\uffff\32\26",
+            "",
+            "",
+            "\0\42",
+            "\0\42",
+            "\1\43\4\uffff\1\44",
+            "",
+            "",
+            "\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",
+            "\1\74",
+            "\1\75",
+            "\1\76",
+            "\1\77",
+            "\12\26\7\uffff\32\26\4\uffff\1\26\1\uffff\14\26\1\100\15\26",
+            "\1\102",
+            "\12\26\7\uffff\32\26\4\uffff\1\26\1\uffff\32\26",
+            "\12\26\7\uffff\32\26\4\uffff\1\26\1\uffff\32\26",
+            "\1\105",
+            "\1\106",
+            "\12\26\7\uffff\32\26\4\uffff\1\26\1\uffff\32\26",
+            "\1\110",
+            "\1\111",
+            "",
+            "\12\26\7\uffff\32\26\4\uffff\1\26\1\uffff\32\26",
+            "",
+            "",
+            "\1\113",
+            "\1\114",
+            "",
+            "\12\26\7\uffff\32\26\4\uffff\1\26\1\uffff\32\26",
+            "\1\116",
+            "",
+            "\1\117",
+            "\12\26\7\uffff\32\26\4\uffff\1\26\1\uffff\32\26",
+            "",
+            "\1\121",
+            "\12\26\7\uffff\32\26\4\uffff\1\26\1\uffff\32\26",
+            "",
+            "\1\123",
+            "",
+            "\1\124",
+            "\1\125",
+            "\12\26\7\uffff\32\26\4\uffff\1\26\1\uffff\32\26",
+            ""
+    };
+
+    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 | T__23 | 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 = 34;}
+
+                        else s = 19;
+
+                        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=='d') ) {s = 8;}
+
+                        else if ( (LA12_0=='c') ) {s = 9;}
+
+                        else if ( (LA12_0=='=') ) {s = 10;}
+
+                        else if ( (LA12_0=='i') ) {s = 11;}
+
+                        else if ( (LA12_0=='^') ) {s = 12;}
+
+                        else if ( ((LA12_0>='A' && LA12_0<='Z')||LA12_0=='_'||(LA12_0>='a' && LA12_0<='b')||(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 = 13;}
+
+                        else if ( ((LA12_0>='0' && LA12_0<='9')) ) {s = 14;}
+
+                        else if ( (LA12_0=='\"') ) {s = 15;}
+
+                        else if ( (LA12_0=='\'') ) {s = 16;}
+
+                        else if ( (LA12_0=='/') ) {s = 17;}
+
+                        else if ( ((LA12_0>='\t' && LA12_0<='\n')||LA12_0=='\r'||LA12_0==' ') ) {s = 18;}
+
+                        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 = 19;}
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA12_16 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA12_16>='\u0000' && LA12_16<='\uFFFF')) ) {s = 34;}
+
+                        else s = 19;
+
+                        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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStatesParser.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStatesParser.java
new file mode 100644
index 0000000..1583c02
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStatesParser.java
@@ -0,0 +1,5857 @@
+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.StatesGrammarAccess;
+
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+@SuppressWarnings("all")
+public class InternalStatesParser 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'", "'debug'", "'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__23=23;
+    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 InternalStatesParser(TokenStream input) {
+            this(input, new RecognizerSharedState());
+        }
+        public InternalStatesParser(TokenStream input, RecognizerSharedState state) {
+            super(input, state);
+             
+        }
+        
+
+    public String[] getTokenNames() { return InternalStatesParser.tokenNames; }
+    public String getGrammarFileName() { return "../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g"; }
+
+
+     
+     	private StatesGrammarAccess grammarAccess;
+     	
+        public void setGrammarAccess(StatesGrammarAccess 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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:61:1: entryRuleModule : ruleModule EOF ;
+    public final void entryRuleModule() throws RecognitionException {
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:62:1: ( ruleModule EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:70:1: ruleModule : ( ( rule__Module__Group__0 ) ) ;
+    public final void ruleModule() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:74:2: ( ( ( rule__Module__Group__0 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:75:1: ( ( rule__Module__Group__0 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:75:1: ( ( rule__Module__Group__0 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:76:1: ( rule__Module__Group__0 )
+            {
+             before(grammarAccess.getModuleAccess().getGroup()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:77:1: ( rule__Module__Group__0 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:89:1: entryRuleStatemachine : ruleStatemachine EOF ;
+    public final void entryRuleStatemachine() throws RecognitionException {
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:90:1: ( ruleStatemachine EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:98:1: ruleStatemachine : ( ( rule__Statemachine__Group__0 ) ) ;
+    public final void ruleStatemachine() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:102:2: ( ( ( rule__Statemachine__Group__0 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:103:1: ( ( rule__Statemachine__Group__0 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:103:1: ( ( rule__Statemachine__Group__0 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:104:1: ( rule__Statemachine__Group__0 )
+            {
+             before(grammarAccess.getStatemachineAccess().getGroup()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:105:1: ( rule__Statemachine__Group__0 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:117:1: entryRuleEvent : ruleEvent EOF ;
+    public final void entryRuleEvent() throws RecognitionException {
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:118:1: ( ruleEvent EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:126:1: ruleEvent : ( ( rule__Event__NameAssignment ) ) ;
+    public final void ruleEvent() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:130:2: ( ( ( rule__Event__NameAssignment ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:131:1: ( ( rule__Event__NameAssignment ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:131:1: ( ( rule__Event__NameAssignment ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:132:1: ( rule__Event__NameAssignment )
+            {
+             before(grammarAccess.getEventAccess().getNameAssignment()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:133:1: ( rule__Event__NameAssignment )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:145:1: entryRuleState : ruleState EOF ;
+    public final void entryRuleState() throws RecognitionException {
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:146:1: ( ruleState EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:154:1: ruleState : ( ( rule__State__Alternatives ) ) ;
+    public final void ruleState() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:158:2: ( ( ( rule__State__Alternatives ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:159:1: ( ( rule__State__Alternatives ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:159:1: ( ( rule__State__Alternatives ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:160:1: ( rule__State__Alternatives )
+            {
+             before(grammarAccess.getStateAccess().getAlternatives()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:161:1: ( rule__State__Alternatives )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:173:1: entryRuleSimpleState : ruleSimpleState EOF ;
+    public final void entryRuleSimpleState() throws RecognitionException {
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:174:1: ( ruleSimpleState EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:182:1: ruleSimpleState : ( ( rule__SimpleState__Group__0 ) ) ;
+    public final void ruleSimpleState() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:186:2: ( ( ( rule__SimpleState__Group__0 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:187:1: ( ( rule__SimpleState__Group__0 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:187:1: ( ( rule__SimpleState__Group__0 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:188:1: ( rule__SimpleState__Group__0 )
+            {
+             before(grammarAccess.getSimpleStateAccess().getGroup()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:189:1: ( rule__SimpleState__Group__0 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:201:1: entryRuleCompoundState : ruleCompoundState EOF ;
+    public final void entryRuleCompoundState() throws RecognitionException {
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:202:1: ( ruleCompoundState EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:210:1: ruleCompoundState : ( ( rule__CompoundState__Group__0 ) ) ;
+    public final void ruleCompoundState() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:214:2: ( ( ( rule__CompoundState__Group__0 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:215:1: ( ( rule__CompoundState__Group__0 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:215:1: ( ( rule__CompoundState__Group__0 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:216:1: ( rule__CompoundState__Group__0 )
+            {
+             before(grammarAccess.getCompoundStateAccess().getGroup()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:217:1: ( rule__CompoundState__Group__0 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:229:1: entryRuleTransition : ruleTransition EOF ;
+    public final void entryRuleTransition() throws RecognitionException {
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:230:1: ( ruleTransition EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:238:1: ruleTransition : ( ( rule__Transition__Group__0 ) ) ;
+    public final void ruleTransition() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:242:2: ( ( ( rule__Transition__Group__0 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:243:1: ( ( rule__Transition__Group__0 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:243:1: ( ( rule__Transition__Group__0 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:244:1: ( rule__Transition__Group__0 )
+            {
+             before(grammarAccess.getTransitionAccess().getGroup()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:245:1: ( rule__Transition__Group__0 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.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__Module__NameAlternatives_1_0"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:257:1: rule__Module__NameAlternatives_1_0 : ( ( RULE_STRING ) | ( RULE_ID ) );
+    public final void rule__Module__NameAlternatives_1_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:261:1: ( ( RULE_STRING ) | ( RULE_ID ) )
+            int alt1=2;
+            int LA1_0 = input.LA(1);
+
+            if ( (LA1_0==RULE_STRING) ) {
+                alt1=1;
+            }
+            else if ( (LA1_0==RULE_ID) ) {
+                alt1=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 1, 0, input);
+
+                throw nvae;
+            }
+            switch (alt1) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:262:1: ( RULE_STRING )
+                    {
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:262:1: ( RULE_STRING )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:263:1: RULE_STRING
+                    {
+                     before(grammarAccess.getModuleAccess().getNameSTRINGTerminalRuleCall_1_0_0()); 
+                    match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rule__Module__NameAlternatives_1_0490); 
+                     after(grammarAccess.getModuleAccess().getNameSTRINGTerminalRuleCall_1_0_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:268:6: ( RULE_ID )
+                    {
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:268:6: ( RULE_ID )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:269:1: RULE_ID
+                    {
+                     before(grammarAccess.getModuleAccess().getNameIDTerminalRuleCall_1_0_1()); 
+                    match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__Module__NameAlternatives_1_0507); 
+                     after(grammarAccess.getModuleAccess().getNameIDTerminalRuleCall_1_0_1()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Module__NameAlternatives_1_0"
+
+
+    // $ANTLR start "rule__State__Alternatives"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:279:1: rule__State__Alternatives : ( ( ruleSimpleState ) | ( ruleCompoundState ) );
+    public final void rule__State__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:283:1: ( ( ruleSimpleState ) | ( ruleCompoundState ) )
+            int alt2=2;
+            int LA2_0 = input.LA(1);
+
+            if ( (LA2_0==19||LA2_0==23) ) {
+                alt2=1;
+            }
+            else if ( (LA2_0==20) ) {
+                alt2=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 2, 0, input);
+
+                throw nvae;
+            }
+            switch (alt2) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:284:1: ( ruleSimpleState )
+                    {
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:284:1: ( ruleSimpleState )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:285:1: ruleSimpleState
+                    {
+                     before(grammarAccess.getStateAccess().getSimpleStateParserRuleCall_0()); 
+                    pushFollow(FOLLOW_ruleSimpleState_in_rule__State__Alternatives539);
+                    ruleSimpleState();
+
+                    state._fsp--;
+
+                     after(grammarAccess.getStateAccess().getSimpleStateParserRuleCall_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:290:6: ( ruleCompoundState )
+                    {
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:290:6: ( ruleCompoundState )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:291:1: ruleCompoundState
+                    {
+                     before(grammarAccess.getStateAccess().getCompoundStateParserRuleCall_1()); 
+                    pushFollow(FOLLOW_ruleCompoundState_in_rule__State__Alternatives556);
+                    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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:303: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:307:1: ( rule__Module__Group__0__Impl rule__Module__Group__1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:308:2: rule__Module__Group__0__Impl rule__Module__Group__1
+            {
+            pushFollow(FOLLOW_rule__Module__Group__0__Impl_in_rule__Module__Group__0586);
+            rule__Module__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Module__Group__1_in_rule__Module__Group__0589);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:315: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:319:1: ( ( 'module' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:320:1: ( 'module' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:320:1: ( 'module' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:321:1: 'module'
+            {
+             before(grammarAccess.getModuleAccess().getModuleKeyword_0()); 
+            match(input,11,FOLLOW_11_in_rule__Module__Group__0__Impl617); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:334: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:338:1: ( rule__Module__Group__1__Impl rule__Module__Group__2 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:339:2: rule__Module__Group__1__Impl rule__Module__Group__2
+            {
+            pushFollow(FOLLOW_rule__Module__Group__1__Impl_in_rule__Module__Group__1648);
+            rule__Module__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Module__Group__2_in_rule__Module__Group__1651);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:346: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:350:1: ( ( ( rule__Module__NameAssignment_1 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:351:1: ( ( rule__Module__NameAssignment_1 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:351:1: ( ( rule__Module__NameAssignment_1 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:352:1: ( rule__Module__NameAssignment_1 )
+            {
+             before(grammarAccess.getModuleAccess().getNameAssignment_1()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:353:1: ( rule__Module__NameAssignment_1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:353:2: rule__Module__NameAssignment_1
+            {
+            pushFollow(FOLLOW_rule__Module__NameAssignment_1_in_rule__Module__Group__1__Impl678);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:363: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:367:1: ( rule__Module__Group__2__Impl )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:368:2: rule__Module__Group__2__Impl
+            {
+            pushFollow(FOLLOW_rule__Module__Group__2__Impl_in_rule__Module__Group__2708);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:374: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:378:1: ( ( ( rule__Module__MachinesAssignment_2 )* ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:379:1: ( ( rule__Module__MachinesAssignment_2 )* )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:379:1: ( ( rule__Module__MachinesAssignment_2 )* )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:380:1: ( rule__Module__MachinesAssignment_2 )*
+            {
+             before(grammarAccess.getModuleAccess().getMachinesAssignment_2()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:381:1: ( rule__Module__MachinesAssignment_2 )*
+            loop3:
+            do {
+                int alt3=2;
+                int LA3_0 = input.LA(1);
+
+                if ( (LA3_0==12||LA3_0==23) ) {
+                    alt3=1;
+                }
+
+
+                switch (alt3) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:381:2: rule__Module__MachinesAssignment_2
+            	    {
+            	    pushFollow(FOLLOW_rule__Module__MachinesAssignment_2_in_rule__Module__Group__2__Impl735);
+            	    rule__Module__MachinesAssignment_2();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop3;
+                }
+            } 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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:397: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:401:1: ( rule__Statemachine__Group__0__Impl rule__Statemachine__Group__1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:402:2: rule__Statemachine__Group__0__Impl rule__Statemachine__Group__1
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group__0__Impl_in_rule__Statemachine__Group__0772);
+            rule__Statemachine__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Statemachine__Group__1_in_rule__Statemachine__Group__0775);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:409: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:413:1: ( ( ( rule__Statemachine__InitialAssignment_0 )? ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:414:1: ( ( rule__Statemachine__InitialAssignment_0 )? )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:414:1: ( ( rule__Statemachine__InitialAssignment_0 )? )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:415:1: ( rule__Statemachine__InitialAssignment_0 )?
+            {
+             before(grammarAccess.getStatemachineAccess().getInitialAssignment_0()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:416:1: ( rule__Statemachine__InitialAssignment_0 )?
+            int alt4=2;
+            int LA4_0 = input.LA(1);
+
+            if ( (LA4_0==23) ) {
+                alt4=1;
+            }
+            switch (alt4) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:416:2: rule__Statemachine__InitialAssignment_0
+                    {
+                    pushFollow(FOLLOW_rule__Statemachine__InitialAssignment_0_in_rule__Statemachine__Group__0__Impl802);
+                    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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:426: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:430:1: ( rule__Statemachine__Group__1__Impl rule__Statemachine__Group__2 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:431:2: rule__Statemachine__Group__1__Impl rule__Statemachine__Group__2
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group__1__Impl_in_rule__Statemachine__Group__1833);
+            rule__Statemachine__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Statemachine__Group__2_in_rule__Statemachine__Group__1836);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:438: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:442:1: ( ( 'statemachine' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:443:1: ( 'statemachine' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:443:1: ( 'statemachine' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:444:1: 'statemachine'
+            {
+             before(grammarAccess.getStatemachineAccess().getStatemachineKeyword_1()); 
+            match(input,12,FOLLOW_12_in_rule__Statemachine__Group__1__Impl864); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:457: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:461:1: ( rule__Statemachine__Group__2__Impl rule__Statemachine__Group__3 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:462:2: rule__Statemachine__Group__2__Impl rule__Statemachine__Group__3
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group__2__Impl_in_rule__Statemachine__Group__2895);
+            rule__Statemachine__Group__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Statemachine__Group__3_in_rule__Statemachine__Group__2898);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:469: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:473:1: ( ( ( rule__Statemachine__NameAssignment_2 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:474:1: ( ( rule__Statemachine__NameAssignment_2 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:474:1: ( ( rule__Statemachine__NameAssignment_2 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:475:1: ( rule__Statemachine__NameAssignment_2 )
+            {
+             before(grammarAccess.getStatemachineAccess().getNameAssignment_2()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:476:1: ( rule__Statemachine__NameAssignment_2 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:476:2: rule__Statemachine__NameAssignment_2
+            {
+            pushFollow(FOLLOW_rule__Statemachine__NameAssignment_2_in_rule__Statemachine__Group__2__Impl925);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:486: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:490:1: ( rule__Statemachine__Group__3__Impl rule__Statemachine__Group__4 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:491:2: rule__Statemachine__Group__3__Impl rule__Statemachine__Group__4
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group__3__Impl_in_rule__Statemachine__Group__3955);
+            rule__Statemachine__Group__3__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Statemachine__Group__4_in_rule__Statemachine__Group__3958);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:498: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:502:1: ( ( ( rule__Statemachine__Group_3__0 )? ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:503:1: ( ( rule__Statemachine__Group_3__0 )? )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:503:1: ( ( rule__Statemachine__Group_3__0 )? )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:504:1: ( rule__Statemachine__Group_3__0 )?
+            {
+             before(grammarAccess.getStatemachineAccess().getGroup_3()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:505:1: ( rule__Statemachine__Group_3__0 )?
+            int alt5=2;
+            int LA5_0 = input.LA(1);
+
+            if ( (LA5_0==17) ) {
+                alt5=1;
+            }
+            switch (alt5) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:505:2: rule__Statemachine__Group_3__0
+                    {
+                    pushFollow(FOLLOW_rule__Statemachine__Group_3__0_in_rule__Statemachine__Group__3__Impl985);
+                    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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:515: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:519:1: ( rule__Statemachine__Group__4__Impl rule__Statemachine__Group__5 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:520:2: rule__Statemachine__Group__4__Impl rule__Statemachine__Group__5
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group__4__Impl_in_rule__Statemachine__Group__41016);
+            rule__Statemachine__Group__4__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Statemachine__Group__5_in_rule__Statemachine__Group__41019);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:527: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:531:1: ( ( '{' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:532:1: ( '{' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:532:1: ( '{' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:533:1: '{'
+            {
+             before(grammarAccess.getStatemachineAccess().getLeftCurlyBracketKeyword_4()); 
+            match(input,13,FOLLOW_13_in_rule__Statemachine__Group__4__Impl1047); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:546: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:550:1: ( rule__Statemachine__Group__5__Impl rule__Statemachine__Group__6 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:551:2: rule__Statemachine__Group__5__Impl rule__Statemachine__Group__6
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group__5__Impl_in_rule__Statemachine__Group__51078);
+            rule__Statemachine__Group__5__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Statemachine__Group__6_in_rule__Statemachine__Group__51081);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:558: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:562:1: ( ( 'events' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:563:1: ( 'events' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:563:1: ( 'events' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:564:1: 'events'
+            {
+             before(grammarAccess.getStatemachineAccess().getEventsKeyword_5()); 
+            match(input,14,FOLLOW_14_in_rule__Statemachine__Group__5__Impl1109); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:577: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:581:1: ( rule__Statemachine__Group__6__Impl rule__Statemachine__Group__7 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:582:2: rule__Statemachine__Group__6__Impl rule__Statemachine__Group__7
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group__6__Impl_in_rule__Statemachine__Group__61140);
+            rule__Statemachine__Group__6__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Statemachine__Group__7_in_rule__Statemachine__Group__61143);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:589: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:593:1: ( ( ( rule__Statemachine__EventsAssignment_6 )* ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:594:1: ( ( rule__Statemachine__EventsAssignment_6 )* )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:594:1: ( ( rule__Statemachine__EventsAssignment_6 )* )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:595:1: ( rule__Statemachine__EventsAssignment_6 )*
+            {
+             before(grammarAccess.getStatemachineAccess().getEventsAssignment_6()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:596:1: ( rule__Statemachine__EventsAssignment_6 )*
+            loop6:
+            do {
+                int alt6=2;
+                int LA6_0 = input.LA(1);
+
+                if ( (LA6_0==RULE_ID) ) {
+                    alt6=1;
+                }
+
+
+                switch (alt6) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:596:2: rule__Statemachine__EventsAssignment_6
+            	    {
+            	    pushFollow(FOLLOW_rule__Statemachine__EventsAssignment_6_in_rule__Statemachine__Group__6__Impl1170);
+            	    rule__Statemachine__EventsAssignment_6();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop6;
+                }
+            } 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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:606: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:610:1: ( rule__Statemachine__Group__7__Impl rule__Statemachine__Group__8 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:611:2: rule__Statemachine__Group__7__Impl rule__Statemachine__Group__8
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group__7__Impl_in_rule__Statemachine__Group__71201);
+            rule__Statemachine__Group__7__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Statemachine__Group__8_in_rule__Statemachine__Group__71204);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:618: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:622:1: ( ( ';' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:623:1: ( ';' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:623:1: ( ';' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:624:1: ';'
+            {
+             before(grammarAccess.getStatemachineAccess().getSemicolonKeyword_7()); 
+            match(input,15,FOLLOW_15_in_rule__Statemachine__Group__7__Impl1232); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:637: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:641:1: ( rule__Statemachine__Group__8__Impl rule__Statemachine__Group__9 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:642:2: rule__Statemachine__Group__8__Impl rule__Statemachine__Group__9
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group__8__Impl_in_rule__Statemachine__Group__81263);
+            rule__Statemachine__Group__8__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Statemachine__Group__9_in_rule__Statemachine__Group__81266);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:649: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:653:1: ( ( ( rule__Statemachine__StatesAssignment_8 )* ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:654:1: ( ( rule__Statemachine__StatesAssignment_8 )* )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:654:1: ( ( rule__Statemachine__StatesAssignment_8 )* )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:655:1: ( rule__Statemachine__StatesAssignment_8 )*
+            {
+             before(grammarAccess.getStatemachineAccess().getStatesAssignment_8()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:656:1: ( rule__Statemachine__StatesAssignment_8 )*
+            loop7:
+            do {
+                int alt7=2;
+                int LA7_0 = input.LA(1);
+
+                if ( ((LA7_0>=19 && LA7_0<=20)||LA7_0==23) ) {
+                    alt7=1;
+                }
+
+
+                switch (alt7) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:656:2: rule__Statemachine__StatesAssignment_8
+            	    {
+            	    pushFollow(FOLLOW_rule__Statemachine__StatesAssignment_8_in_rule__Statemachine__Group__8__Impl1293);
+            	    rule__Statemachine__StatesAssignment_8();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop7;
+                }
+            } 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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:666:1: rule__Statemachine__Group__9 : rule__Statemachine__Group__9__Impl rule__Statemachine__Group__10 ;
+    public final void rule__Statemachine__Group__9() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:670:1: ( rule__Statemachine__Group__9__Impl rule__Statemachine__Group__10 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:671:2: rule__Statemachine__Group__9__Impl rule__Statemachine__Group__10
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group__9__Impl_in_rule__Statemachine__Group__91324);
+            rule__Statemachine__Group__9__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Statemachine__Group__10_in_rule__Statemachine__Group__91327);
+            rule__Statemachine__Group__10();
+
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:678: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:682:1: ( ( '}' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:683:1: ( '}' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:683:1: ( '}' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:684:1: '}'
+            {
+             before(grammarAccess.getStatemachineAccess().getRightCurlyBracketKeyword_9()); 
+            match(input,16,FOLLOW_16_in_rule__Statemachine__Group__9__Impl1355); 
+             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__10"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:697:1: rule__Statemachine__Group__10 : rule__Statemachine__Group__10__Impl ;
+    public final void rule__Statemachine__Group__10() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:701:1: ( rule__Statemachine__Group__10__Impl )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:702:2: rule__Statemachine__Group__10__Impl
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group__10__Impl_in_rule__Statemachine__Group__101386);
+            rule__Statemachine__Group__10__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group__10"
+
+
+    // $ANTLR start "rule__Statemachine__Group__10__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:708:1: rule__Statemachine__Group__10__Impl : ( ( rule__Statemachine__Group_10__0 )? ) ;
+    public final void rule__Statemachine__Group__10__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:712:1: ( ( ( rule__Statemachine__Group_10__0 )? ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:713:1: ( ( rule__Statemachine__Group_10__0 )? )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:713:1: ( ( rule__Statemachine__Group_10__0 )? )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:714:1: ( rule__Statemachine__Group_10__0 )?
+            {
+             before(grammarAccess.getStatemachineAccess().getGroup_10()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:715:1: ( rule__Statemachine__Group_10__0 )?
+            int alt8=2;
+            int LA8_0 = input.LA(1);
+
+            if ( (LA8_0==18) ) {
+                alt8=1;
+            }
+            switch (alt8) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:715:2: rule__Statemachine__Group_10__0
+                    {
+                    pushFollow(FOLLOW_rule__Statemachine__Group_10__0_in_rule__Statemachine__Group__10__Impl1413);
+                    rule__Statemachine__Group_10__0();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getStatemachineAccess().getGroup_10()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group__10__Impl"
+
+
+    // $ANTLR start "rule__Statemachine__Group_3__0"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:747: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:751:1: ( rule__Statemachine__Group_3__0__Impl rule__Statemachine__Group_3__1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:752: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__01466);
+            rule__Statemachine__Group_3__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Statemachine__Group_3__1_in_rule__Statemachine__Group_3__01469);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:759: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:763:1: ( ( 'value' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:764:1: ( 'value' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:764:1: ( 'value' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:765:1: 'value'
+            {
+             before(grammarAccess.getStatemachineAccess().getValueKeyword_3_0()); 
+            match(input,17,FOLLOW_17_in_rule__Statemachine__Group_3__0__Impl1497); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:778: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:782:1: ( rule__Statemachine__Group_3__1__Impl )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:783:2: rule__Statemachine__Group_3__1__Impl
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group_3__1__Impl_in_rule__Statemachine__Group_3__11528);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:789: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:793:1: ( ( ( rule__Statemachine__ValueAssignment_3_1 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:794:1: ( ( rule__Statemachine__ValueAssignment_3_1 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:794:1: ( ( rule__Statemachine__ValueAssignment_3_1 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:795:1: ( rule__Statemachine__ValueAssignment_3_1 )
+            {
+             before(grammarAccess.getStatemachineAccess().getValueAssignment_3_1()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:796:1: ( rule__Statemachine__ValueAssignment_3_1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:796:2: rule__Statemachine__ValueAssignment_3_1
+            {
+            pushFollow(FOLLOW_rule__Statemachine__ValueAssignment_3_1_in_rule__Statemachine__Group_3__1__Impl1555);
+            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__Statemachine__Group_10__0"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:810:1: rule__Statemachine__Group_10__0 : rule__Statemachine__Group_10__0__Impl rule__Statemachine__Group_10__1 ;
+    public final void rule__Statemachine__Group_10__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:814:1: ( rule__Statemachine__Group_10__0__Impl rule__Statemachine__Group_10__1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:815:2: rule__Statemachine__Group_10__0__Impl rule__Statemachine__Group_10__1
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group_10__0__Impl_in_rule__Statemachine__Group_10__01589);
+            rule__Statemachine__Group_10__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Statemachine__Group_10__1_in_rule__Statemachine__Group_10__01592);
+            rule__Statemachine__Group_10__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group_10__0"
+
+
+    // $ANTLR start "rule__Statemachine__Group_10__0__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:822:1: rule__Statemachine__Group_10__0__Impl : ( 'debug' ) ;
+    public final void rule__Statemachine__Group_10__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:826:1: ( ( 'debug' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:827:1: ( 'debug' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:827:1: ( 'debug' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:828:1: 'debug'
+            {
+             before(grammarAccess.getStatemachineAccess().getDebugKeyword_10_0()); 
+            match(input,18,FOLLOW_18_in_rule__Statemachine__Group_10__0__Impl1620); 
+             after(grammarAccess.getStatemachineAccess().getDebugKeyword_10_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group_10__0__Impl"
+
+
+    // $ANTLR start "rule__Statemachine__Group_10__1"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:841:1: rule__Statemachine__Group_10__1 : rule__Statemachine__Group_10__1__Impl ;
+    public final void rule__Statemachine__Group_10__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:845:1: ( rule__Statemachine__Group_10__1__Impl )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:846:2: rule__Statemachine__Group_10__1__Impl
+            {
+            pushFollow(FOLLOW_rule__Statemachine__Group_10__1__Impl_in_rule__Statemachine__Group_10__11651);
+            rule__Statemachine__Group_10__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group_10__1"
+
+
+    // $ANTLR start "rule__Statemachine__Group_10__1__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:852:1: rule__Statemachine__Group_10__1__Impl : ( ( rule__Statemachine__DbgNameAssignment_10_1 ) ) ;
+    public final void rule__Statemachine__Group_10__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:856:1: ( ( ( rule__Statemachine__DbgNameAssignment_10_1 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:857:1: ( ( rule__Statemachine__DbgNameAssignment_10_1 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:857:1: ( ( rule__Statemachine__DbgNameAssignment_10_1 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:858:1: ( rule__Statemachine__DbgNameAssignment_10_1 )
+            {
+             before(grammarAccess.getStatemachineAccess().getDbgNameAssignment_10_1()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:859:1: ( rule__Statemachine__DbgNameAssignment_10_1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:859:2: rule__Statemachine__DbgNameAssignment_10_1
+            {
+            pushFollow(FOLLOW_rule__Statemachine__DbgNameAssignment_10_1_in_rule__Statemachine__Group_10__1__Impl1678);
+            rule__Statemachine__DbgNameAssignment_10_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getStatemachineAccess().getDbgNameAssignment_10_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__Group_10__1__Impl"
+
+
+    // $ANTLR start "rule__SimpleState__Group__0"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:873: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:877:1: ( rule__SimpleState__Group__0__Impl rule__SimpleState__Group__1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:878:2: rule__SimpleState__Group__0__Impl rule__SimpleState__Group__1
+            {
+            pushFollow(FOLLOW_rule__SimpleState__Group__0__Impl_in_rule__SimpleState__Group__01712);
+            rule__SimpleState__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__SimpleState__Group__1_in_rule__SimpleState__Group__01715);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:885: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:889:1: ( ( ( rule__SimpleState__InitialAssignment_0 )? ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:890:1: ( ( rule__SimpleState__InitialAssignment_0 )? )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:890:1: ( ( rule__SimpleState__InitialAssignment_0 )? )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:891:1: ( rule__SimpleState__InitialAssignment_0 )?
+            {
+             before(grammarAccess.getSimpleStateAccess().getInitialAssignment_0()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:892:1: ( rule__SimpleState__InitialAssignment_0 )?
+            int alt9=2;
+            int LA9_0 = input.LA(1);
+
+            if ( (LA9_0==23) ) {
+                alt9=1;
+            }
+            switch (alt9) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:892:2: rule__SimpleState__InitialAssignment_0
+                    {
+                    pushFollow(FOLLOW_rule__SimpleState__InitialAssignment_0_in_rule__SimpleState__Group__0__Impl1742);
+                    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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:902: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:906:1: ( rule__SimpleState__Group__1__Impl rule__SimpleState__Group__2 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:907:2: rule__SimpleState__Group__1__Impl rule__SimpleState__Group__2
+            {
+            pushFollow(FOLLOW_rule__SimpleState__Group__1__Impl_in_rule__SimpleState__Group__11773);
+            rule__SimpleState__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__SimpleState__Group__2_in_rule__SimpleState__Group__11776);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:914: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:918:1: ( ( 'state' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:919:1: ( 'state' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:919:1: ( 'state' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:920:1: 'state'
+            {
+             before(grammarAccess.getSimpleStateAccess().getStateKeyword_1()); 
+            match(input,19,FOLLOW_19_in_rule__SimpleState__Group__1__Impl1804); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:933: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:937:1: ( rule__SimpleState__Group__2__Impl rule__SimpleState__Group__3 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:938:2: rule__SimpleState__Group__2__Impl rule__SimpleState__Group__3
+            {
+            pushFollow(FOLLOW_rule__SimpleState__Group__2__Impl_in_rule__SimpleState__Group__21835);
+            rule__SimpleState__Group__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__SimpleState__Group__3_in_rule__SimpleState__Group__21838);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:945: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:949:1: ( ( ( rule__SimpleState__NameAssignment_2 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:950:1: ( ( rule__SimpleState__NameAssignment_2 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:950:1: ( ( rule__SimpleState__NameAssignment_2 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:951:1: ( rule__SimpleState__NameAssignment_2 )
+            {
+             before(grammarAccess.getSimpleStateAccess().getNameAssignment_2()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:952:1: ( rule__SimpleState__NameAssignment_2 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:952:2: rule__SimpleState__NameAssignment_2
+            {
+            pushFollow(FOLLOW_rule__SimpleState__NameAssignment_2_in_rule__SimpleState__Group__2__Impl1865);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:962: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:966:1: ( rule__SimpleState__Group__3__Impl rule__SimpleState__Group__4 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:967:2: rule__SimpleState__Group__3__Impl rule__SimpleState__Group__4
+            {
+            pushFollow(FOLLOW_rule__SimpleState__Group__3__Impl_in_rule__SimpleState__Group__31895);
+            rule__SimpleState__Group__3__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__SimpleState__Group__4_in_rule__SimpleState__Group__31898);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:974: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:978:1: ( ( ( rule__SimpleState__Group_3__0 )? ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:979:1: ( ( rule__SimpleState__Group_3__0 )? )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:979:1: ( ( rule__SimpleState__Group_3__0 )? )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:980:1: ( rule__SimpleState__Group_3__0 )?
+            {
+             before(grammarAccess.getSimpleStateAccess().getGroup_3()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:981:1: ( rule__SimpleState__Group_3__0 )?
+            int alt10=2;
+            int LA10_0 = input.LA(1);
+
+            if ( (LA10_0==17) ) {
+                alt10=1;
+            }
+            switch (alt10) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:981:2: rule__SimpleState__Group_3__0
+                    {
+                    pushFollow(FOLLOW_rule__SimpleState__Group_3__0_in_rule__SimpleState__Group__3__Impl1925);
+                    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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:991: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:995:1: ( rule__SimpleState__Group__4__Impl rule__SimpleState__Group__5 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:996:2: rule__SimpleState__Group__4__Impl rule__SimpleState__Group__5
+            {
+            pushFollow(FOLLOW_rule__SimpleState__Group__4__Impl_in_rule__SimpleState__Group__41956);
+            rule__SimpleState__Group__4__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__SimpleState__Group__5_in_rule__SimpleState__Group__41959);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1003: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1007:1: ( ( '{' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1008:1: ( '{' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1008:1: ( '{' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1009:1: '{'
+            {
+             before(grammarAccess.getSimpleStateAccess().getLeftCurlyBracketKeyword_4()); 
+            match(input,13,FOLLOW_13_in_rule__SimpleState__Group__4__Impl1987); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1022: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1026:1: ( rule__SimpleState__Group__5__Impl rule__SimpleState__Group__6 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1027:2: rule__SimpleState__Group__5__Impl rule__SimpleState__Group__6
+            {
+            pushFollow(FOLLOW_rule__SimpleState__Group__5__Impl_in_rule__SimpleState__Group__52018);
+            rule__SimpleState__Group__5__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__SimpleState__Group__6_in_rule__SimpleState__Group__52021);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1034: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1038:1: ( ( ( rule__SimpleState__TransitionsAssignment_5 )* ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1039:1: ( ( rule__SimpleState__TransitionsAssignment_5 )* )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1039:1: ( ( rule__SimpleState__TransitionsAssignment_5 )* )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1040:1: ( rule__SimpleState__TransitionsAssignment_5 )*
+            {
+             before(grammarAccess.getSimpleStateAccess().getTransitionsAssignment_5()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1041:1: ( rule__SimpleState__TransitionsAssignment_5 )*
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1041:2: rule__SimpleState__TransitionsAssignment_5
+            	    {
+            	    pushFollow(FOLLOW_rule__SimpleState__TransitionsAssignment_5_in_rule__SimpleState__Group__5__Impl2048);
+            	    rule__SimpleState__TransitionsAssignment_5();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop11;
+                }
+            } 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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1051:1: rule__SimpleState__Group__6 : rule__SimpleState__Group__6__Impl rule__SimpleState__Group__7 ;
+    public final void rule__SimpleState__Group__6() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1055:1: ( rule__SimpleState__Group__6__Impl rule__SimpleState__Group__7 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1056:2: rule__SimpleState__Group__6__Impl rule__SimpleState__Group__7
+            {
+            pushFollow(FOLLOW_rule__SimpleState__Group__6__Impl_in_rule__SimpleState__Group__62079);
+            rule__SimpleState__Group__6__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__SimpleState__Group__7_in_rule__SimpleState__Group__62082);
+            rule__SimpleState__Group__7();
+
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1063: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1067:1: ( ( '}' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1068:1: ( '}' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1068:1: ( '}' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1069:1: '}'
+            {
+             before(grammarAccess.getSimpleStateAccess().getRightCurlyBracketKeyword_6()); 
+            match(input,16,FOLLOW_16_in_rule__SimpleState__Group__6__Impl2110); 
+             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__7"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1082:1: rule__SimpleState__Group__7 : rule__SimpleState__Group__7__Impl ;
+    public final void rule__SimpleState__Group__7() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1086:1: ( rule__SimpleState__Group__7__Impl )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1087:2: rule__SimpleState__Group__7__Impl
+            {
+            pushFollow(FOLLOW_rule__SimpleState__Group__7__Impl_in_rule__SimpleState__Group__72141);
+            rule__SimpleState__Group__7__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__Group__7"
+
+
+    // $ANTLR start "rule__SimpleState__Group__7__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1093:1: rule__SimpleState__Group__7__Impl : ( ( rule__SimpleState__Group_7__0 )? ) ;
+    public final void rule__SimpleState__Group__7__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1097:1: ( ( ( rule__SimpleState__Group_7__0 )? ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1098:1: ( ( rule__SimpleState__Group_7__0 )? )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1098:1: ( ( rule__SimpleState__Group_7__0 )? )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1099:1: ( rule__SimpleState__Group_7__0 )?
+            {
+             before(grammarAccess.getSimpleStateAccess().getGroup_7()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1100:1: ( rule__SimpleState__Group_7__0 )?
+            int alt12=2;
+            int LA12_0 = input.LA(1);
+
+            if ( (LA12_0==18) ) {
+                alt12=1;
+            }
+            switch (alt12) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1100:2: rule__SimpleState__Group_7__0
+                    {
+                    pushFollow(FOLLOW_rule__SimpleState__Group_7__0_in_rule__SimpleState__Group__7__Impl2168);
+                    rule__SimpleState__Group_7__0();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getSimpleStateAccess().getGroup_7()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__Group__7__Impl"
+
+
+    // $ANTLR start "rule__SimpleState__Group_3__0"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1126: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1130:1: ( rule__SimpleState__Group_3__0__Impl rule__SimpleState__Group_3__1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1131: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__02215);
+            rule__SimpleState__Group_3__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__SimpleState__Group_3__1_in_rule__SimpleState__Group_3__02218);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1138: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1142:1: ( ( 'value' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1143:1: ( 'value' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1143:1: ( 'value' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1144:1: 'value'
+            {
+             before(grammarAccess.getSimpleStateAccess().getValueKeyword_3_0()); 
+            match(input,17,FOLLOW_17_in_rule__SimpleState__Group_3__0__Impl2246); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1157: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1161:1: ( rule__SimpleState__Group_3__1__Impl )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1162:2: rule__SimpleState__Group_3__1__Impl
+            {
+            pushFollow(FOLLOW_rule__SimpleState__Group_3__1__Impl_in_rule__SimpleState__Group_3__12277);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1168: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1172:1: ( ( ( rule__SimpleState__ValueAssignment_3_1 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1173:1: ( ( rule__SimpleState__ValueAssignment_3_1 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1173:1: ( ( rule__SimpleState__ValueAssignment_3_1 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1174:1: ( rule__SimpleState__ValueAssignment_3_1 )
+            {
+             before(grammarAccess.getSimpleStateAccess().getValueAssignment_3_1()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1175:1: ( rule__SimpleState__ValueAssignment_3_1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1175:2: rule__SimpleState__ValueAssignment_3_1
+            {
+            pushFollow(FOLLOW_rule__SimpleState__ValueAssignment_3_1_in_rule__SimpleState__Group_3__1__Impl2304);
+            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__SimpleState__Group_7__0"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1189:1: rule__SimpleState__Group_7__0 : rule__SimpleState__Group_7__0__Impl rule__SimpleState__Group_7__1 ;
+    public final void rule__SimpleState__Group_7__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1193:1: ( rule__SimpleState__Group_7__0__Impl rule__SimpleState__Group_7__1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1194:2: rule__SimpleState__Group_7__0__Impl rule__SimpleState__Group_7__1
+            {
+            pushFollow(FOLLOW_rule__SimpleState__Group_7__0__Impl_in_rule__SimpleState__Group_7__02338);
+            rule__SimpleState__Group_7__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__SimpleState__Group_7__1_in_rule__SimpleState__Group_7__02341);
+            rule__SimpleState__Group_7__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__Group_7__0"
+
+
+    // $ANTLR start "rule__SimpleState__Group_7__0__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1201:1: rule__SimpleState__Group_7__0__Impl : ( 'debug' ) ;
+    public final void rule__SimpleState__Group_7__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1205:1: ( ( 'debug' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1206:1: ( 'debug' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1206:1: ( 'debug' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1207:1: 'debug'
+            {
+             before(grammarAccess.getSimpleStateAccess().getDebugKeyword_7_0()); 
+            match(input,18,FOLLOW_18_in_rule__SimpleState__Group_7__0__Impl2369); 
+             after(grammarAccess.getSimpleStateAccess().getDebugKeyword_7_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__Group_7__0__Impl"
+
+
+    // $ANTLR start "rule__SimpleState__Group_7__1"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1220:1: rule__SimpleState__Group_7__1 : rule__SimpleState__Group_7__1__Impl ;
+    public final void rule__SimpleState__Group_7__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1224:1: ( rule__SimpleState__Group_7__1__Impl )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1225:2: rule__SimpleState__Group_7__1__Impl
+            {
+            pushFollow(FOLLOW_rule__SimpleState__Group_7__1__Impl_in_rule__SimpleState__Group_7__12400);
+            rule__SimpleState__Group_7__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__Group_7__1"
+
+
+    // $ANTLR start "rule__SimpleState__Group_7__1__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1231:1: rule__SimpleState__Group_7__1__Impl : ( ( rule__SimpleState__DbgNameAssignment_7_1 ) ) ;
+    public final void rule__SimpleState__Group_7__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1235:1: ( ( ( rule__SimpleState__DbgNameAssignment_7_1 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1236:1: ( ( rule__SimpleState__DbgNameAssignment_7_1 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1236:1: ( ( rule__SimpleState__DbgNameAssignment_7_1 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1237:1: ( rule__SimpleState__DbgNameAssignment_7_1 )
+            {
+             before(grammarAccess.getSimpleStateAccess().getDbgNameAssignment_7_1()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1238:1: ( rule__SimpleState__DbgNameAssignment_7_1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1238:2: rule__SimpleState__DbgNameAssignment_7_1
+            {
+            pushFollow(FOLLOW_rule__SimpleState__DbgNameAssignment_7_1_in_rule__SimpleState__Group_7__1__Impl2427);
+            rule__SimpleState__DbgNameAssignment_7_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getSimpleStateAccess().getDbgNameAssignment_7_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__Group_7__1__Impl"
+
+
+    // $ANTLR start "rule__CompoundState__Group__0"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1252: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1256:1: ( rule__CompoundState__Group__0__Impl rule__CompoundState__Group__1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1257:2: rule__CompoundState__Group__0__Impl rule__CompoundState__Group__1
+            {
+            pushFollow(FOLLOW_rule__CompoundState__Group__0__Impl_in_rule__CompoundState__Group__02461);
+            rule__CompoundState__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__CompoundState__Group__1_in_rule__CompoundState__Group__02464);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1264: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1268:1: ( ( 'compound' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1269:1: ( 'compound' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1269:1: ( 'compound' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1270:1: 'compound'
+            {
+             before(grammarAccess.getCompoundStateAccess().getCompoundKeyword_0()); 
+            match(input,20,FOLLOW_20_in_rule__CompoundState__Group__0__Impl2492); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1283: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1287:1: ( rule__CompoundState__Group__1__Impl rule__CompoundState__Group__2 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1288:2: rule__CompoundState__Group__1__Impl rule__CompoundState__Group__2
+            {
+            pushFollow(FOLLOW_rule__CompoundState__Group__1__Impl_in_rule__CompoundState__Group__12523);
+            rule__CompoundState__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__CompoundState__Group__2_in_rule__CompoundState__Group__12526);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1295: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1299:1: ( ( ( rule__CompoundState__InitialAssignment_1 )? ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1300:1: ( ( rule__CompoundState__InitialAssignment_1 )? )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1300:1: ( ( rule__CompoundState__InitialAssignment_1 )? )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1301:1: ( rule__CompoundState__InitialAssignment_1 )?
+            {
+             before(grammarAccess.getCompoundStateAccess().getInitialAssignment_1()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1302:1: ( rule__CompoundState__InitialAssignment_1 )?
+            int alt13=2;
+            int LA13_0 = input.LA(1);
+
+            if ( (LA13_0==23) ) {
+                alt13=1;
+            }
+            switch (alt13) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1302:2: rule__CompoundState__InitialAssignment_1
+                    {
+                    pushFollow(FOLLOW_rule__CompoundState__InitialAssignment_1_in_rule__CompoundState__Group__1__Impl2553);
+                    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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1312: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1316:1: ( rule__CompoundState__Group__2__Impl rule__CompoundState__Group__3 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1317:2: rule__CompoundState__Group__2__Impl rule__CompoundState__Group__3
+            {
+            pushFollow(FOLLOW_rule__CompoundState__Group__2__Impl_in_rule__CompoundState__Group__22584);
+            rule__CompoundState__Group__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__CompoundState__Group__3_in_rule__CompoundState__Group__22587);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1324: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1328:1: ( ( 'state' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1329:1: ( 'state' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1329:1: ( 'state' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1330:1: 'state'
+            {
+             before(grammarAccess.getCompoundStateAccess().getStateKeyword_2()); 
+            match(input,19,FOLLOW_19_in_rule__CompoundState__Group__2__Impl2615); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1343: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1347:1: ( rule__CompoundState__Group__3__Impl rule__CompoundState__Group__4 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1348:2: rule__CompoundState__Group__3__Impl rule__CompoundState__Group__4
+            {
+            pushFollow(FOLLOW_rule__CompoundState__Group__3__Impl_in_rule__CompoundState__Group__32646);
+            rule__CompoundState__Group__3__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__CompoundState__Group__4_in_rule__CompoundState__Group__32649);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1355: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1359:1: ( ( ( rule__CompoundState__NameAssignment_3 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1360:1: ( ( rule__CompoundState__NameAssignment_3 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1360:1: ( ( rule__CompoundState__NameAssignment_3 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1361:1: ( rule__CompoundState__NameAssignment_3 )
+            {
+             before(grammarAccess.getCompoundStateAccess().getNameAssignment_3()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1362:1: ( rule__CompoundState__NameAssignment_3 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1362:2: rule__CompoundState__NameAssignment_3
+            {
+            pushFollow(FOLLOW_rule__CompoundState__NameAssignment_3_in_rule__CompoundState__Group__3__Impl2676);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1372: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1376:1: ( rule__CompoundState__Group__4__Impl rule__CompoundState__Group__5 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1377:2: rule__CompoundState__Group__4__Impl rule__CompoundState__Group__5
+            {
+            pushFollow(FOLLOW_rule__CompoundState__Group__4__Impl_in_rule__CompoundState__Group__42706);
+            rule__CompoundState__Group__4__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__CompoundState__Group__5_in_rule__CompoundState__Group__42709);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1384: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1388:1: ( ( 'machine' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1389:1: ( 'machine' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1389:1: ( 'machine' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1390:1: 'machine'
+            {
+             before(grammarAccess.getCompoundStateAccess().getMachineKeyword_4()); 
+            match(input,21,FOLLOW_21_in_rule__CompoundState__Group__4__Impl2737); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1403: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1407:1: ( rule__CompoundState__Group__5__Impl rule__CompoundState__Group__6 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1408:2: rule__CompoundState__Group__5__Impl rule__CompoundState__Group__6
+            {
+            pushFollow(FOLLOW_rule__CompoundState__Group__5__Impl_in_rule__CompoundState__Group__52768);
+            rule__CompoundState__Group__5__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__CompoundState__Group__6_in_rule__CompoundState__Group__52771);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1415: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1419:1: ( ( ( rule__CompoundState__MachineAssignment_5 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1420:1: ( ( rule__CompoundState__MachineAssignment_5 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1420:1: ( ( rule__CompoundState__MachineAssignment_5 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1421:1: ( rule__CompoundState__MachineAssignment_5 )
+            {
+             before(grammarAccess.getCompoundStateAccess().getMachineAssignment_5()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1422:1: ( rule__CompoundState__MachineAssignment_5 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1422:2: rule__CompoundState__MachineAssignment_5
+            {
+            pushFollow(FOLLOW_rule__CompoundState__MachineAssignment_5_in_rule__CompoundState__Group__5__Impl2798);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1432: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1436:1: ( rule__CompoundState__Group__6__Impl rule__CompoundState__Group__7 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1437:2: rule__CompoundState__Group__6__Impl rule__CompoundState__Group__7
+            {
+            pushFollow(FOLLOW_rule__CompoundState__Group__6__Impl_in_rule__CompoundState__Group__62828);
+            rule__CompoundState__Group__6__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__CompoundState__Group__7_in_rule__CompoundState__Group__62831);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1444: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1448:1: ( ( '{' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1449:1: ( '{' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1449:1: ( '{' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1450:1: '{'
+            {
+             before(grammarAccess.getCompoundStateAccess().getLeftCurlyBracketKeyword_6()); 
+            match(input,13,FOLLOW_13_in_rule__CompoundState__Group__6__Impl2859); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1463: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1467:1: ( rule__CompoundState__Group__7__Impl rule__CompoundState__Group__8 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1468:2: rule__CompoundState__Group__7__Impl rule__CompoundState__Group__8
+            {
+            pushFollow(FOLLOW_rule__CompoundState__Group__7__Impl_in_rule__CompoundState__Group__72890);
+            rule__CompoundState__Group__7__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__CompoundState__Group__8_in_rule__CompoundState__Group__72893);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1475: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1479:1: ( ( ( rule__CompoundState__TransitionsAssignment_7 )* ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1480:1: ( ( rule__CompoundState__TransitionsAssignment_7 )* )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1480:1: ( ( rule__CompoundState__TransitionsAssignment_7 )* )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1481:1: ( rule__CompoundState__TransitionsAssignment_7 )*
+            {
+             before(grammarAccess.getCompoundStateAccess().getTransitionsAssignment_7()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1482:1: ( rule__CompoundState__TransitionsAssignment_7 )*
+            loop14:
+            do {
+                int alt14=2;
+                int LA14_0 = input.LA(1);
+
+                if ( (LA14_0==RULE_ID) ) {
+                    alt14=1;
+                }
+
+
+                switch (alt14) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1482:2: rule__CompoundState__TransitionsAssignment_7
+            	    {
+            	    pushFollow(FOLLOW_rule__CompoundState__TransitionsAssignment_7_in_rule__CompoundState__Group__7__Impl2920);
+            	    rule__CompoundState__TransitionsAssignment_7();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop14;
+                }
+            } 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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1492:1: rule__CompoundState__Group__8 : rule__CompoundState__Group__8__Impl rule__CompoundState__Group__9 ;
+    public final void rule__CompoundState__Group__8() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1496:1: ( rule__CompoundState__Group__8__Impl rule__CompoundState__Group__9 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1497:2: rule__CompoundState__Group__8__Impl rule__CompoundState__Group__9
+            {
+            pushFollow(FOLLOW_rule__CompoundState__Group__8__Impl_in_rule__CompoundState__Group__82951);
+            rule__CompoundState__Group__8__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__CompoundState__Group__9_in_rule__CompoundState__Group__82954);
+            rule__CompoundState__Group__9();
+
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1504: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1508:1: ( ( '}' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1509:1: ( '}' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1509:1: ( '}' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1510:1: '}'
+            {
+             before(grammarAccess.getCompoundStateAccess().getRightCurlyBracketKeyword_8()); 
+            match(input,16,FOLLOW_16_in_rule__CompoundState__Group__8__Impl2982); 
+             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__CompoundState__Group__9"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1523:1: rule__CompoundState__Group__9 : rule__CompoundState__Group__9__Impl ;
+    public final void rule__CompoundState__Group__9() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1527:1: ( rule__CompoundState__Group__9__Impl )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1528:2: rule__CompoundState__Group__9__Impl
+            {
+            pushFollow(FOLLOW_rule__CompoundState__Group__9__Impl_in_rule__CompoundState__Group__93013);
+            rule__CompoundState__Group__9__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__Group__9"
+
+
+    // $ANTLR start "rule__CompoundState__Group__9__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1534:1: rule__CompoundState__Group__9__Impl : ( ( rule__CompoundState__Group_9__0 )? ) ;
+    public final void rule__CompoundState__Group__9__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1538:1: ( ( ( rule__CompoundState__Group_9__0 )? ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1539:1: ( ( rule__CompoundState__Group_9__0 )? )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1539:1: ( ( rule__CompoundState__Group_9__0 )? )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1540:1: ( rule__CompoundState__Group_9__0 )?
+            {
+             before(grammarAccess.getCompoundStateAccess().getGroup_9()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1541:1: ( rule__CompoundState__Group_9__0 )?
+            int alt15=2;
+            int LA15_0 = input.LA(1);
+
+            if ( (LA15_0==18) ) {
+                alt15=1;
+            }
+            switch (alt15) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1541:2: rule__CompoundState__Group_9__0
+                    {
+                    pushFollow(FOLLOW_rule__CompoundState__Group_9__0_in_rule__CompoundState__Group__9__Impl3040);
+                    rule__CompoundState__Group_9__0();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getCompoundStateAccess().getGroup_9()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__Group__9__Impl"
+
+
+    // $ANTLR start "rule__CompoundState__Group_9__0"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1571:1: rule__CompoundState__Group_9__0 : rule__CompoundState__Group_9__0__Impl rule__CompoundState__Group_9__1 ;
+    public final void rule__CompoundState__Group_9__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1575:1: ( rule__CompoundState__Group_9__0__Impl rule__CompoundState__Group_9__1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1576:2: rule__CompoundState__Group_9__0__Impl rule__CompoundState__Group_9__1
+            {
+            pushFollow(FOLLOW_rule__CompoundState__Group_9__0__Impl_in_rule__CompoundState__Group_9__03091);
+            rule__CompoundState__Group_9__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__CompoundState__Group_9__1_in_rule__CompoundState__Group_9__03094);
+            rule__CompoundState__Group_9__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__Group_9__0"
+
+
+    // $ANTLR start "rule__CompoundState__Group_9__0__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1583:1: rule__CompoundState__Group_9__0__Impl : ( 'debug' ) ;
+    public final void rule__CompoundState__Group_9__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1587:1: ( ( 'debug' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1588:1: ( 'debug' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1588:1: ( 'debug' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1589:1: 'debug'
+            {
+             before(grammarAccess.getCompoundStateAccess().getDebugKeyword_9_0()); 
+            match(input,18,FOLLOW_18_in_rule__CompoundState__Group_9__0__Impl3122); 
+             after(grammarAccess.getCompoundStateAccess().getDebugKeyword_9_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__Group_9__0__Impl"
+
+
+    // $ANTLR start "rule__CompoundState__Group_9__1"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1602:1: rule__CompoundState__Group_9__1 : rule__CompoundState__Group_9__1__Impl ;
+    public final void rule__CompoundState__Group_9__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1606:1: ( rule__CompoundState__Group_9__1__Impl )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1607:2: rule__CompoundState__Group_9__1__Impl
+            {
+            pushFollow(FOLLOW_rule__CompoundState__Group_9__1__Impl_in_rule__CompoundState__Group_9__13153);
+            rule__CompoundState__Group_9__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__Group_9__1"
+
+
+    // $ANTLR start "rule__CompoundState__Group_9__1__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1613:1: rule__CompoundState__Group_9__1__Impl : ( ( rule__CompoundState__DbgNameAssignment_9_1 ) ) ;
+    public final void rule__CompoundState__Group_9__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1617:1: ( ( ( rule__CompoundState__DbgNameAssignment_9_1 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1618:1: ( ( rule__CompoundState__DbgNameAssignment_9_1 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1618:1: ( ( rule__CompoundState__DbgNameAssignment_9_1 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1619:1: ( rule__CompoundState__DbgNameAssignment_9_1 )
+            {
+             before(grammarAccess.getCompoundStateAccess().getDbgNameAssignment_9_1()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1620:1: ( rule__CompoundState__DbgNameAssignment_9_1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1620:2: rule__CompoundState__DbgNameAssignment_9_1
+            {
+            pushFollow(FOLLOW_rule__CompoundState__DbgNameAssignment_9_1_in_rule__CompoundState__Group_9__1__Impl3180);
+            rule__CompoundState__DbgNameAssignment_9_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getCompoundStateAccess().getDbgNameAssignment_9_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__Group_9__1__Impl"
+
+
+    // $ANTLR start "rule__Transition__Group__0"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1634: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1638:1: ( rule__Transition__Group__0__Impl rule__Transition__Group__1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1639:2: rule__Transition__Group__0__Impl rule__Transition__Group__1
+            {
+            pushFollow(FOLLOW_rule__Transition__Group__0__Impl_in_rule__Transition__Group__03214);
+            rule__Transition__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Transition__Group__1_in_rule__Transition__Group__03217);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1646: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1650:1: ( ( ( rule__Transition__EventAssignment_0 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1651:1: ( ( rule__Transition__EventAssignment_0 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1651:1: ( ( rule__Transition__EventAssignment_0 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1652:1: ( rule__Transition__EventAssignment_0 )
+            {
+             before(grammarAccess.getTransitionAccess().getEventAssignment_0()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1653:1: ( rule__Transition__EventAssignment_0 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1653:2: rule__Transition__EventAssignment_0
+            {
+            pushFollow(FOLLOW_rule__Transition__EventAssignment_0_in_rule__Transition__Group__0__Impl3244);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1663: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1667:1: ( rule__Transition__Group__1__Impl rule__Transition__Group__2 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1668:2: rule__Transition__Group__1__Impl rule__Transition__Group__2
+            {
+            pushFollow(FOLLOW_rule__Transition__Group__1__Impl_in_rule__Transition__Group__13274);
+            rule__Transition__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Transition__Group__2_in_rule__Transition__Group__13277);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1675: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1679:1: ( ( '=>' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1680:1: ( '=>' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1680:1: ( '=>' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1681:1: '=>'
+            {
+             before(grammarAccess.getTransitionAccess().getEqualsSignGreaterThanSignKeyword_1()); 
+            match(input,22,FOLLOW_22_in_rule__Transition__Group__1__Impl3305); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1694:1: rule__Transition__Group__2 : rule__Transition__Group__2__Impl rule__Transition__Group__3 ;
+    public final void rule__Transition__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1698:1: ( rule__Transition__Group__2__Impl rule__Transition__Group__3 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1699:2: rule__Transition__Group__2__Impl rule__Transition__Group__3
+            {
+            pushFollow(FOLLOW_rule__Transition__Group__2__Impl_in_rule__Transition__Group__23336);
+            rule__Transition__Group__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Transition__Group__3_in_rule__Transition__Group__23339);
+            rule__Transition__Group__3();
+
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1706: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1710:1: ( ( ( rule__Transition__StateAssignment_2 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1711:1: ( ( rule__Transition__StateAssignment_2 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1711:1: ( ( rule__Transition__StateAssignment_2 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1712:1: ( rule__Transition__StateAssignment_2 )
+            {
+             before(grammarAccess.getTransitionAccess().getStateAssignment_2()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1713:1: ( rule__Transition__StateAssignment_2 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1713:2: rule__Transition__StateAssignment_2
+            {
+            pushFollow(FOLLOW_rule__Transition__StateAssignment_2_in_rule__Transition__Group__2__Impl3366);
+            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__Transition__Group__3"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1723:1: rule__Transition__Group__3 : rule__Transition__Group__3__Impl ;
+    public final void rule__Transition__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1727:1: ( rule__Transition__Group__3__Impl )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1728:2: rule__Transition__Group__3__Impl
+            {
+            pushFollow(FOLLOW_rule__Transition__Group__3__Impl_in_rule__Transition__Group__33396);
+            rule__Transition__Group__3__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group__3"
+
+
+    // $ANTLR start "rule__Transition__Group__3__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1734:1: rule__Transition__Group__3__Impl : ( ( rule__Transition__Group_3__0 )? ) ;
+    public final void rule__Transition__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1738:1: ( ( ( rule__Transition__Group_3__0 )? ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1739:1: ( ( rule__Transition__Group_3__0 )? )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1739:1: ( ( rule__Transition__Group_3__0 )? )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1740:1: ( rule__Transition__Group_3__0 )?
+            {
+             before(grammarAccess.getTransitionAccess().getGroup_3()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1741:1: ( rule__Transition__Group_3__0 )?
+            int alt16=2;
+            int LA16_0 = input.LA(1);
+
+            if ( (LA16_0==18) ) {
+                alt16=1;
+            }
+            switch (alt16) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1741:2: rule__Transition__Group_3__0
+                    {
+                    pushFollow(FOLLOW_rule__Transition__Group_3__0_in_rule__Transition__Group__3__Impl3423);
+                    rule__Transition__Group_3__0();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getTransitionAccess().getGroup_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group__3__Impl"
+
+
+    // $ANTLR start "rule__Transition__Group_3__0"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1759:1: rule__Transition__Group_3__0 : rule__Transition__Group_3__0__Impl rule__Transition__Group_3__1 ;
+    public final void rule__Transition__Group_3__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1763:1: ( rule__Transition__Group_3__0__Impl rule__Transition__Group_3__1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1764:2: rule__Transition__Group_3__0__Impl rule__Transition__Group_3__1
+            {
+            pushFollow(FOLLOW_rule__Transition__Group_3__0__Impl_in_rule__Transition__Group_3__03462);
+            rule__Transition__Group_3__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Transition__Group_3__1_in_rule__Transition__Group_3__03465);
+            rule__Transition__Group_3__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group_3__0"
+
+
+    // $ANTLR start "rule__Transition__Group_3__0__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1771:1: rule__Transition__Group_3__0__Impl : ( 'debug' ) ;
+    public final void rule__Transition__Group_3__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1775:1: ( ( 'debug' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1776:1: ( 'debug' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1776:1: ( 'debug' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1777:1: 'debug'
+            {
+             before(grammarAccess.getTransitionAccess().getDebugKeyword_3_0()); 
+            match(input,18,FOLLOW_18_in_rule__Transition__Group_3__0__Impl3493); 
+             after(grammarAccess.getTransitionAccess().getDebugKeyword_3_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group_3__0__Impl"
+
+
+    // $ANTLR start "rule__Transition__Group_3__1"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1790:1: rule__Transition__Group_3__1 : rule__Transition__Group_3__1__Impl ;
+    public final void rule__Transition__Group_3__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1794:1: ( rule__Transition__Group_3__1__Impl )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1795:2: rule__Transition__Group_3__1__Impl
+            {
+            pushFollow(FOLLOW_rule__Transition__Group_3__1__Impl_in_rule__Transition__Group_3__13524);
+            rule__Transition__Group_3__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group_3__1"
+
+
+    // $ANTLR start "rule__Transition__Group_3__1__Impl"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1801:1: rule__Transition__Group_3__1__Impl : ( ( rule__Transition__DbgNameAssignment_3_1 ) ) ;
+    public final void rule__Transition__Group_3__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1805:1: ( ( ( rule__Transition__DbgNameAssignment_3_1 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1806:1: ( ( rule__Transition__DbgNameAssignment_3_1 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1806:1: ( ( rule__Transition__DbgNameAssignment_3_1 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1807:1: ( rule__Transition__DbgNameAssignment_3_1 )
+            {
+             before(grammarAccess.getTransitionAccess().getDbgNameAssignment_3_1()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1808:1: ( rule__Transition__DbgNameAssignment_3_1 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1808:2: rule__Transition__DbgNameAssignment_3_1
+            {
+            pushFollow(FOLLOW_rule__Transition__DbgNameAssignment_3_1_in_rule__Transition__Group_3__1__Impl3551);
+            rule__Transition__DbgNameAssignment_3_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getTransitionAccess().getDbgNameAssignment_3_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group_3__1__Impl"
+
+
+    // $ANTLR start "rule__Module__NameAssignment_1"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1823:1: rule__Module__NameAssignment_1 : ( ( rule__Module__NameAlternatives_1_0 ) ) ;
+    public final void rule__Module__NameAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1827:1: ( ( ( rule__Module__NameAlternatives_1_0 ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1828:1: ( ( rule__Module__NameAlternatives_1_0 ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1828:1: ( ( rule__Module__NameAlternatives_1_0 ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1829:1: ( rule__Module__NameAlternatives_1_0 )
+            {
+             before(grammarAccess.getModuleAccess().getNameAlternatives_1_0()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1830:1: ( rule__Module__NameAlternatives_1_0 )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1830:2: rule__Module__NameAlternatives_1_0
+            {
+            pushFollow(FOLLOW_rule__Module__NameAlternatives_1_0_in_rule__Module__NameAssignment_13590);
+            rule__Module__NameAlternatives_1_0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getModuleAccess().getNameAlternatives_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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1839:1: rule__Module__MachinesAssignment_2 : ( ruleStatemachine ) ;
+    public final void rule__Module__MachinesAssignment_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1843:1: ( ( ruleStatemachine ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1844:1: ( ruleStatemachine )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1844:1: ( ruleStatemachine )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1845:1: ruleStatemachine
+            {
+             before(grammarAccess.getModuleAccess().getMachinesStatemachineParserRuleCall_2_0()); 
+            pushFollow(FOLLOW_ruleStatemachine_in_rule__Module__MachinesAssignment_23623);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1854:1: rule__Statemachine__InitialAssignment_0 : ( ( 'initial' ) ) ;
+    public final void rule__Statemachine__InitialAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1858:1: ( ( ( 'initial' ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1859:1: ( ( 'initial' ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1859:1: ( ( 'initial' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1860:1: ( 'initial' )
+            {
+             before(grammarAccess.getStatemachineAccess().getInitialInitialKeyword_0_0()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1861:1: ( 'initial' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1862:1: 'initial'
+            {
+             before(grammarAccess.getStatemachineAccess().getInitialInitialKeyword_0_0()); 
+            match(input,23,FOLLOW_23_in_rule__Statemachine__InitialAssignment_03659); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1877: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1881:1: ( ( RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1882:1: ( RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1882:1: ( RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1883:1: RULE_ID
+            {
+             before(grammarAccess.getStatemachineAccess().getNameIDTerminalRuleCall_2_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__Statemachine__NameAssignment_23698); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1892: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1896:1: ( ( RULE_INT ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1897:1: ( RULE_INT )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1897:1: ( RULE_INT )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1898:1: RULE_INT
+            {
+             before(grammarAccess.getStatemachineAccess().getValueINTTerminalRuleCall_3_1_0()); 
+            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__Statemachine__ValueAssignment_3_13729); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1907:1: rule__Statemachine__EventsAssignment_6 : ( ruleEvent ) ;
+    public final void rule__Statemachine__EventsAssignment_6() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1911:1: ( ( ruleEvent ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1912:1: ( ruleEvent )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1912:1: ( ruleEvent )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1913:1: ruleEvent
+            {
+             before(grammarAccess.getStatemachineAccess().getEventsEventParserRuleCall_6_0()); 
+            pushFollow(FOLLOW_ruleEvent_in_rule__Statemachine__EventsAssignment_63760);
+            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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1922:1: rule__Statemachine__StatesAssignment_8 : ( ruleState ) ;
+    public final void rule__Statemachine__StatesAssignment_8() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1926:1: ( ( ruleState ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1927:1: ( ruleState )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1927:1: ( ruleState )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1928:1: ruleState
+            {
+             before(grammarAccess.getStatemachineAccess().getStatesStateParserRuleCall_8_0()); 
+            pushFollow(FOLLOW_ruleState_in_rule__Statemachine__StatesAssignment_83791);
+            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__Statemachine__DbgNameAssignment_10_1"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1937:1: rule__Statemachine__DbgNameAssignment_10_1 : ( RULE_ID ) ;
+    public final void rule__Statemachine__DbgNameAssignment_10_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1941:1: ( ( RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1942:1: ( RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1942:1: ( RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1943:1: RULE_ID
+            {
+             before(grammarAccess.getStatemachineAccess().getDbgNameIDTerminalRuleCall_10_1_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__Statemachine__DbgNameAssignment_10_13822); 
+             after(grammarAccess.getStatemachineAccess().getDbgNameIDTerminalRuleCall_10_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Statemachine__DbgNameAssignment_10_1"
+
+
+    // $ANTLR start "rule__Event__NameAssignment"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1952:1: rule__Event__NameAssignment : ( RULE_ID ) ;
+    public final void rule__Event__NameAssignment() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1956:1: ( ( RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1957:1: ( RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1957:1: ( RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1958:1: RULE_ID
+            {
+             before(grammarAccess.getEventAccess().getNameIDTerminalRuleCall_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__Event__NameAssignment3853); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1967:1: rule__SimpleState__InitialAssignment_0 : ( ( 'initial' ) ) ;
+    public final void rule__SimpleState__InitialAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1971:1: ( ( ( 'initial' ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1972:1: ( ( 'initial' ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1972:1: ( ( 'initial' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1973:1: ( 'initial' )
+            {
+             before(grammarAccess.getSimpleStateAccess().getInitialInitialKeyword_0_0()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1974:1: ( 'initial' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1975:1: 'initial'
+            {
+             before(grammarAccess.getSimpleStateAccess().getInitialInitialKeyword_0_0()); 
+            match(input,23,FOLLOW_23_in_rule__SimpleState__InitialAssignment_03889); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1990: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1994:1: ( ( RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1995:1: ( RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1995:1: ( RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:1996:1: RULE_ID
+            {
+             before(grammarAccess.getSimpleStateAccess().getNameIDTerminalRuleCall_2_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__SimpleState__NameAssignment_23928); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2005: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2009:1: ( ( RULE_INT ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2010:1: ( RULE_INT )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2010:1: ( RULE_INT )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2011:1: RULE_INT
+            {
+             before(grammarAccess.getSimpleStateAccess().getValueINTTerminalRuleCall_3_1_0()); 
+            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__SimpleState__ValueAssignment_3_13959); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2020:1: rule__SimpleState__TransitionsAssignment_5 : ( ruleTransition ) ;
+    public final void rule__SimpleState__TransitionsAssignment_5() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2024:1: ( ( ruleTransition ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2025:1: ( ruleTransition )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2025:1: ( ruleTransition )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2026:1: ruleTransition
+            {
+             before(grammarAccess.getSimpleStateAccess().getTransitionsTransitionParserRuleCall_5_0()); 
+            pushFollow(FOLLOW_ruleTransition_in_rule__SimpleState__TransitionsAssignment_53990);
+            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__SimpleState__DbgNameAssignment_7_1"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2035:1: rule__SimpleState__DbgNameAssignment_7_1 : ( RULE_ID ) ;
+    public final void rule__SimpleState__DbgNameAssignment_7_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2039:1: ( ( RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2040:1: ( RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2040:1: ( RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2041:1: RULE_ID
+            {
+             before(grammarAccess.getSimpleStateAccess().getDbgNameIDTerminalRuleCall_7_1_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__SimpleState__DbgNameAssignment_7_14021); 
+             after(grammarAccess.getSimpleStateAccess().getDbgNameIDTerminalRuleCall_7_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SimpleState__DbgNameAssignment_7_1"
+
+
+    // $ANTLR start "rule__CompoundState__InitialAssignment_1"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2050:1: rule__CompoundState__InitialAssignment_1 : ( ( 'initial' ) ) ;
+    public final void rule__CompoundState__InitialAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2054:1: ( ( ( 'initial' ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2055:1: ( ( 'initial' ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2055:1: ( ( 'initial' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2056:1: ( 'initial' )
+            {
+             before(grammarAccess.getCompoundStateAccess().getInitialInitialKeyword_1_0()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2057:1: ( 'initial' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2058:1: 'initial'
+            {
+             before(grammarAccess.getCompoundStateAccess().getInitialInitialKeyword_1_0()); 
+            match(input,23,FOLLOW_23_in_rule__CompoundState__InitialAssignment_14057); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2073: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2077:1: ( ( RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2078:1: ( RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2078:1: ( RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2079:1: RULE_ID
+            {
+             before(grammarAccess.getCompoundStateAccess().getNameIDTerminalRuleCall_3_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__CompoundState__NameAssignment_34096); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2088: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2092:1: ( ( ( RULE_ID ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2093:1: ( ( RULE_ID ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2093:1: ( ( RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2094:1: ( RULE_ID )
+            {
+             before(grammarAccess.getCompoundStateAccess().getMachineStatemachineCrossReference_5_0()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2095:1: ( RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2096:1: RULE_ID
+            {
+             before(grammarAccess.getCompoundStateAccess().getMachineStatemachineIDTerminalRuleCall_5_0_1()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__CompoundState__MachineAssignment_54131); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2107:1: rule__CompoundState__TransitionsAssignment_7 : ( ruleTransition ) ;
+    public final void rule__CompoundState__TransitionsAssignment_7() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2111:1: ( ( ruleTransition ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2112:1: ( ruleTransition )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2112:1: ( ruleTransition )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2113:1: ruleTransition
+            {
+             before(grammarAccess.getCompoundStateAccess().getTransitionsTransitionParserRuleCall_7_0()); 
+            pushFollow(FOLLOW_ruleTransition_in_rule__CompoundState__TransitionsAssignment_74166);
+            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__CompoundState__DbgNameAssignment_9_1"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2122:1: rule__CompoundState__DbgNameAssignment_9_1 : ( RULE_ID ) ;
+    public final void rule__CompoundState__DbgNameAssignment_9_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2126:1: ( ( RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2127:1: ( RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2127:1: ( RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2128:1: RULE_ID
+            {
+             before(grammarAccess.getCompoundStateAccess().getDbgNameIDTerminalRuleCall_9_1_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__CompoundState__DbgNameAssignment_9_14197); 
+             after(grammarAccess.getCompoundStateAccess().getDbgNameIDTerminalRuleCall_9_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompoundState__DbgNameAssignment_9_1"
+
+
+    // $ANTLR start "rule__Transition__EventAssignment_0"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2137: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2141:1: ( ( ( RULE_ID ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2142:1: ( ( RULE_ID ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2142:1: ( ( RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2143:1: ( RULE_ID )
+            {
+             before(grammarAccess.getTransitionAccess().getEventEventCrossReference_0_0()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2144:1: ( RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2145:1: RULE_ID
+            {
+             before(grammarAccess.getTransitionAccess().getEventEventIDTerminalRuleCall_0_0_1()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__Transition__EventAssignment_04232); 
+             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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2156: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.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2160:1: ( ( ( RULE_ID ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2161:1: ( ( RULE_ID ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2161:1: ( ( RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2162:1: ( RULE_ID )
+            {
+             before(grammarAccess.getTransitionAccess().getStateStateCrossReference_2_0()); 
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2163:1: ( RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2164:1: RULE_ID
+            {
+             before(grammarAccess.getTransitionAccess().getStateStateIDTerminalRuleCall_2_0_1()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__Transition__StateAssignment_24271); 
+             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"
+
+
+    // $ANTLR start "rule__Transition__DbgNameAssignment_3_1"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2175:1: rule__Transition__DbgNameAssignment_3_1 : ( RULE_ID ) ;
+    public final void rule__Transition__DbgNameAssignment_3_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2179:1: ( ( RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2180:1: ( RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2180:1: ( RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/antlr/internal/InternalStates.g:2181:1: RULE_ID
+            {
+             before(grammarAccess.getTransitionAccess().getDbgNameIDTerminalRuleCall_3_1_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__Transition__DbgNameAssignment_3_14306); 
+             after(grammarAccess.getTransitionAccess().getDbgNameIDTerminalRuleCall_3_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__DbgNameAssignment_3_1"
+
+    // 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_RULE_STRING_in_rule__Module__NameAlternatives_1_0490 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__Module__NameAlternatives_1_0507 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSimpleState_in_rule__State__Alternatives539 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleCompoundState_in_rule__State__Alternatives556 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Module__Group__0__Impl_in_rule__Module__Group__0586 = new BitSet(new long[]{0x0000000000000030L});
+    public static final BitSet FOLLOW_rule__Module__Group__1_in_rule__Module__Group__0589 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_11_in_rule__Module__Group__0__Impl617 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Module__Group__1__Impl_in_rule__Module__Group__1648 = new BitSet(new long[]{0x0000000000801000L});
+    public static final BitSet FOLLOW_rule__Module__Group__2_in_rule__Module__Group__1651 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Module__NameAssignment_1_in_rule__Module__Group__1__Impl678 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Module__Group__2__Impl_in_rule__Module__Group__2708 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Module__MachinesAssignment_2_in_rule__Module__Group__2__Impl735 = new BitSet(new long[]{0x0000000000801002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__0__Impl_in_rule__Statemachine__Group__0772 = new BitSet(new long[]{0x0000000000801000L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__1_in_rule__Statemachine__Group__0775 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__InitialAssignment_0_in_rule__Statemachine__Group__0__Impl802 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__1__Impl_in_rule__Statemachine__Group__1833 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__2_in_rule__Statemachine__Group__1836 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_12_in_rule__Statemachine__Group__1__Impl864 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__2__Impl_in_rule__Statemachine__Group__2895 = new BitSet(new long[]{0x0000000000022000L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__3_in_rule__Statemachine__Group__2898 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__NameAssignment_2_in_rule__Statemachine__Group__2__Impl925 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__3__Impl_in_rule__Statemachine__Group__3955 = new BitSet(new long[]{0x0000000000022000L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__4_in_rule__Statemachine__Group__3958 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group_3__0_in_rule__Statemachine__Group__3__Impl985 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__4__Impl_in_rule__Statemachine__Group__41016 = new BitSet(new long[]{0x0000000000004000L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__5_in_rule__Statemachine__Group__41019 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__Statemachine__Group__4__Impl1047 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__5__Impl_in_rule__Statemachine__Group__51078 = new BitSet(new long[]{0x0000000000008020L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__6_in_rule__Statemachine__Group__51081 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_14_in_rule__Statemachine__Group__5__Impl1109 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__6__Impl_in_rule__Statemachine__Group__61140 = new BitSet(new long[]{0x0000000000008020L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__7_in_rule__Statemachine__Group__61143 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__EventsAssignment_6_in_rule__Statemachine__Group__6__Impl1170 = new BitSet(new long[]{0x0000000000000022L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__7__Impl_in_rule__Statemachine__Group__71201 = new BitSet(new long[]{0x0000000000990000L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__8_in_rule__Statemachine__Group__71204 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_15_in_rule__Statemachine__Group__7__Impl1232 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__8__Impl_in_rule__Statemachine__Group__81263 = new BitSet(new long[]{0x0000000000990000L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__9_in_rule__Statemachine__Group__81266 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__StatesAssignment_8_in_rule__Statemachine__Group__8__Impl1293 = new BitSet(new long[]{0x0000000000980002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__9__Impl_in_rule__Statemachine__Group__91324 = new BitSet(new long[]{0x0000000000040000L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__10_in_rule__Statemachine__Group__91327 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_16_in_rule__Statemachine__Group__9__Impl1355 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group__10__Impl_in_rule__Statemachine__Group__101386 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group_10__0_in_rule__Statemachine__Group__10__Impl1413 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group_3__0__Impl_in_rule__Statemachine__Group_3__01466 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group_3__1_in_rule__Statemachine__Group_3__01469 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__Statemachine__Group_3__0__Impl1497 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group_3__1__Impl_in_rule__Statemachine__Group_3__11528 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__ValueAssignment_3_1_in_rule__Statemachine__Group_3__1__Impl1555 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group_10__0__Impl_in_rule__Statemachine__Group_10__01589 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group_10__1_in_rule__Statemachine__Group_10__01592 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_18_in_rule__Statemachine__Group_10__0__Impl1620 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__Group_10__1__Impl_in_rule__Statemachine__Group_10__11651 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Statemachine__DbgNameAssignment_10_1_in_rule__Statemachine__Group_10__1__Impl1678 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__0__Impl_in_rule__SimpleState__Group__01712 = new BitSet(new long[]{0x0000000000880000L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__1_in_rule__SimpleState__Group__01715 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__InitialAssignment_0_in_rule__SimpleState__Group__0__Impl1742 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__1__Impl_in_rule__SimpleState__Group__11773 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__2_in_rule__SimpleState__Group__11776 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_19_in_rule__SimpleState__Group__1__Impl1804 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__2__Impl_in_rule__SimpleState__Group__21835 = new BitSet(new long[]{0x0000000000022000L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__3_in_rule__SimpleState__Group__21838 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__NameAssignment_2_in_rule__SimpleState__Group__2__Impl1865 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__3__Impl_in_rule__SimpleState__Group__31895 = new BitSet(new long[]{0x0000000000022000L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__4_in_rule__SimpleState__Group__31898 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group_3__0_in_rule__SimpleState__Group__3__Impl1925 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__4__Impl_in_rule__SimpleState__Group__41956 = new BitSet(new long[]{0x0000000000010020L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__5_in_rule__SimpleState__Group__41959 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__SimpleState__Group__4__Impl1987 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__5__Impl_in_rule__SimpleState__Group__52018 = new BitSet(new long[]{0x0000000000010020L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__6_in_rule__SimpleState__Group__52021 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__TransitionsAssignment_5_in_rule__SimpleState__Group__5__Impl2048 = new BitSet(new long[]{0x0000000000000022L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__6__Impl_in_rule__SimpleState__Group__62079 = new BitSet(new long[]{0x0000000000040000L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__7_in_rule__SimpleState__Group__62082 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_16_in_rule__SimpleState__Group__6__Impl2110 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group__7__Impl_in_rule__SimpleState__Group__72141 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group_7__0_in_rule__SimpleState__Group__7__Impl2168 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group_3__0__Impl_in_rule__SimpleState__Group_3__02215 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group_3__1_in_rule__SimpleState__Group_3__02218 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__SimpleState__Group_3__0__Impl2246 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group_3__1__Impl_in_rule__SimpleState__Group_3__12277 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__ValueAssignment_3_1_in_rule__SimpleState__Group_3__1__Impl2304 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group_7__0__Impl_in_rule__SimpleState__Group_7__02338 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group_7__1_in_rule__SimpleState__Group_7__02341 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_18_in_rule__SimpleState__Group_7__0__Impl2369 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__Group_7__1__Impl_in_rule__SimpleState__Group_7__12400 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SimpleState__DbgNameAssignment_7_1_in_rule__SimpleState__Group_7__1__Impl2427 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__0__Impl_in_rule__CompoundState__Group__02461 = new BitSet(new long[]{0x0000000000880000L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__1_in_rule__CompoundState__Group__02464 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_20_in_rule__CompoundState__Group__0__Impl2492 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__1__Impl_in_rule__CompoundState__Group__12523 = new BitSet(new long[]{0x0000000000880000L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__2_in_rule__CompoundState__Group__12526 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__InitialAssignment_1_in_rule__CompoundState__Group__1__Impl2553 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__2__Impl_in_rule__CompoundState__Group__22584 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__3_in_rule__CompoundState__Group__22587 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_19_in_rule__CompoundState__Group__2__Impl2615 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__3__Impl_in_rule__CompoundState__Group__32646 = new BitSet(new long[]{0x0000000000200000L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__4_in_rule__CompoundState__Group__32649 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__NameAssignment_3_in_rule__CompoundState__Group__3__Impl2676 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__4__Impl_in_rule__CompoundState__Group__42706 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__5_in_rule__CompoundState__Group__42709 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_21_in_rule__CompoundState__Group__4__Impl2737 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__5__Impl_in_rule__CompoundState__Group__52768 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__6_in_rule__CompoundState__Group__52771 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__MachineAssignment_5_in_rule__CompoundState__Group__5__Impl2798 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__6__Impl_in_rule__CompoundState__Group__62828 = new BitSet(new long[]{0x0000000000010020L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__7_in_rule__CompoundState__Group__62831 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__CompoundState__Group__6__Impl2859 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__7__Impl_in_rule__CompoundState__Group__72890 = new BitSet(new long[]{0x0000000000010020L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__8_in_rule__CompoundState__Group__72893 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__TransitionsAssignment_7_in_rule__CompoundState__Group__7__Impl2920 = new BitSet(new long[]{0x0000000000000022L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__8__Impl_in_rule__CompoundState__Group__82951 = new BitSet(new long[]{0x0000000000040000L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__9_in_rule__CompoundState__Group__82954 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_16_in_rule__CompoundState__Group__8__Impl2982 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group__9__Impl_in_rule__CompoundState__Group__93013 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group_9__0_in_rule__CompoundState__Group__9__Impl3040 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group_9__0__Impl_in_rule__CompoundState__Group_9__03091 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group_9__1_in_rule__CompoundState__Group_9__03094 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_18_in_rule__CompoundState__Group_9__0__Impl3122 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__Group_9__1__Impl_in_rule__CompoundState__Group_9__13153 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompoundState__DbgNameAssignment_9_1_in_rule__CompoundState__Group_9__1__Impl3180 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Transition__Group__0__Impl_in_rule__Transition__Group__03214 = new BitSet(new long[]{0x0000000000400000L});
+    public static final BitSet FOLLOW_rule__Transition__Group__1_in_rule__Transition__Group__03217 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Transition__EventAssignment_0_in_rule__Transition__Group__0__Impl3244 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Transition__Group__1__Impl_in_rule__Transition__Group__13274 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rule__Transition__Group__2_in_rule__Transition__Group__13277 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_22_in_rule__Transition__Group__1__Impl3305 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Transition__Group__2__Impl_in_rule__Transition__Group__23336 = new BitSet(new long[]{0x0000000000040000L});
+    public static final BitSet FOLLOW_rule__Transition__Group__3_in_rule__Transition__Group__23339 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Transition__StateAssignment_2_in_rule__Transition__Group__2__Impl3366 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Transition__Group__3__Impl_in_rule__Transition__Group__33396 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Transition__Group_3__0_in_rule__Transition__Group__3__Impl3423 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Transition__Group_3__0__Impl_in_rule__Transition__Group_3__03462 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rule__Transition__Group_3__1_in_rule__Transition__Group_3__03465 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_18_in_rule__Transition__Group_3__0__Impl3493 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Transition__Group_3__1__Impl_in_rule__Transition__Group_3__13524 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Transition__DbgNameAssignment_3_1_in_rule__Transition__Group_3__1__Impl3551 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Module__NameAlternatives_1_0_in_rule__Module__NameAssignment_13590 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleStatemachine_in_rule__Module__MachinesAssignment_23623 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__Statemachine__InitialAssignment_03659 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__Statemachine__NameAssignment_23698 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_rule__Statemachine__ValueAssignment_3_13729 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleEvent_in_rule__Statemachine__EventsAssignment_63760 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleState_in_rule__Statemachine__StatesAssignment_83791 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__Statemachine__DbgNameAssignment_10_13822 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__Event__NameAssignment3853 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__SimpleState__InitialAssignment_03889 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__SimpleState__NameAssignment_23928 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_rule__SimpleState__ValueAssignment_3_13959 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleTransition_in_rule__SimpleState__TransitionsAssignment_53990 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__SimpleState__DbgNameAssignment_7_14021 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__CompoundState__InitialAssignment_14057 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__CompoundState__NameAssignment_34096 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__CompoundState__MachineAssignment_54131 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleTransition_in_rule__CompoundState__TransitionsAssignment_74166 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__CompoundState__DbgNameAssignment_9_14197 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__Transition__EventAssignment_04232 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__Transition__StateAssignment_24271 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__Transition__DbgNameAssignment_3_14306 = new BitSet(new long[]{0x0000000000000002L});
+
+}
\ No newline at end of file
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/internal/StatesActivator.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/internal/StatesActivator.java
new file mode 100644
index 0000000..1ec4b6f
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/ui/internal/StatesActivator.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 StatesActivator extends AbstractUIPlugin {
+
+	private Map<String,Injector> injectors = new HashMap<String,Injector>();
+	private static StatesActivator 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.States");
+			
+		} 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 StatesActivator getInstance() {
+		return INSTANCE;
+	}
+	
+	protected Module getRuntimeModule(String grammar) {
+		if ("org.eclipse.ocl.tutorial.eclipsecon2011.States".equals(grammar)) {
+		  return new org.eclipse.ocl.tutorial.eclipsecon2011.StatesRuntimeModule();
+		}
+		
+		throw new IllegalArgumentException(grammar);
+	}
+	
+	protected Module getUiModule(String grammar) {
+		if ("org.eclipse.ocl.tutorial.eclipsecon2011.States".equals(grammar)) {
+		  return new org.eclipse.ocl.tutorial.eclipsecon2011.ui.StatesUiModule(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.states.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/StatesActivator.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/StatesActivator.java
new file mode 100644
index 0000000..43d9461
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/StatesActivator.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: StatesActivator.java,v 1.1 2011/03/12 20:46:05 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 StatesActivator extends org.eclipse.ocl.tutorial.eclipsecon2011.ui.internal.StatesActivator {
+
+	Logger logger = Logger.getLogger(StatesActivator.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 = StatesActivator.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 StatesActivator plugin;
+
+	private ResourceBundle resourceBundle;
+	private ContextTypeRegistry contextTypeRegistry;
+	private TemplateStore templateStore;
+
+	/**
+	 * The constructor
+	 */
+	public StatesActivator() {
+		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 StatesActivator getDefault() {
+		return plugin;
+	}
+
+	private static void setDefault(StatesActivator 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.states.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/StatesUiModule.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/StatesUiModule.java
new file mode 100644
index 0000000..83e079c
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/StatesUiModule.java
@@ -0,0 +1,28 @@
+/**
+ * <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: StatesUiModule.java,v 1.1 2011/03/12 20:46:06 ewillink Exp $
+ */
+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 StatesUiModule extends org.eclipse.ocl.tutorial.eclipsecon2011.ui.AbstractStatesUiModule {
+	public StatesUiModule(AbstractUIPlugin plugin) {
+		super(plugin);
+	}
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/StatesProposalProvider.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/StatesProposalProvider.java
new file mode 100644
index 0000000..3fa6a0b
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/contentassist/StatesProposalProvider.java
@@ -0,0 +1,25 @@
+/**
+ * <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: StatesProposalProvider.java,v 1.1 2011/03/12 20:46:05 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist;
+
+import org.eclipse.ocl.tutorial.eclipsecon2011.ui.contentassist.AbstractStatesProposalProvider;
+/**
+ * see http://www.eclipse.org/Xtext/documentation/latest/xtext.html#contentAssist on how to customize content assistant
+ */
+public class StatesProposalProvider extends AbstractStatesProposalProvider {
+
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/labeling/StatesDescriptionLabelProvider.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/labeling/StatesDescriptionLabelProvider.java
new file mode 100644
index 0000000..92e982a
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/labeling/StatesDescriptionLabelProvider.java
@@ -0,0 +1,40 @@
+/**
+ * <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: StatesDescriptionLabelProvider.java,v 1.1 2011/03/12 20:46:05 ewillink Exp $
+ */
+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 StatesDescriptionLabelProvider 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.states.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/labeling/StatesLabelProvider.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/labeling/StatesLabelProvider.java
new file mode 100644
index 0000000..db9f1a6
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/labeling/StatesLabelProvider.java
@@ -0,0 +1,47 @@
+/**
+ * <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: StatesLabelProvider.java,v 1.1 2011/03/12 20:46:05 ewillink Exp $
+ */
+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 StatesLabelProvider extends DefaultEObjectLabelProvider {
+
+	@Inject
+	public StatesLabelProvider(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.states.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/outline/StatesOutlineTreeProvider.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/outline/StatesOutlineTreeProvider.java
new file mode 100644
index 0000000..cead380
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/src/org/eclipse/ocl/tutorial/eclipsecon2011/ui/outline/StatesOutlineTreeProvider.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: StatesOutlineTreeProvider.java,v 1.1 2011/03/12 20:46:06 ewillink Exp $
+ */
+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 StatesOutlineTreeProvider extends DefaultOutlineTreeProvider {
+	
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/templates/templates.xml b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.ui/templates/templates.xml
new file mode 100644
index 0000000..da339a0
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states/.classpath b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/.classpath
new file mode 100644
index 0000000..59cf397
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/.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.states/.cvsignore b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/.cvsignore
new file mode 100644
index 0000000..6371894
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/.cvsignore
@@ -0,0 +1,2 @@
+bin
+.antlr-generator-3.2.0.jar
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/.project b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/.project
new file mode 100644
index 0000000..6c9e510
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.ocl.tutorial.eclipsecon2011.states</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.states/.settings/org.eclipse.core.resources.prefs b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..52164b2
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/.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.states/.settings/org.eclipse.jdt.core.prefs b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0df49b9
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/.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.states/.settings/org.eclipse.jdt.launching.prefs b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..cd7271f
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/.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.states/.settings/org.eclipse.jdt.ui.prefs b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..f6caf59
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/.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.states/.settings/org.eclipse.pde.prefs b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000..2bd5814
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/.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.states/Generate States Editor.launch b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/Generate States Editor.launch
new file mode 100644
index 0000000..95fd1d7
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/Generate States Editor.launch
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.emf.mwe2.launch.Mwe2LaunchConfigurationType">
+<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.states"/>
+</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/States.mwe2"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.ocl.tutorial.eclipsecon2011.states"/>
+</launchConfiguration>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/META-INF/MANIFEST.MF b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..fbd2181
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/META-INF/MANIFEST.MF
@@ -0,0 +1,32 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: EclipseCon 2011 Tutorial Xtext States Editor
+Bundle-Vendor: Eclipse Modeling Project
+Bundle-Version: 1.0.0
+Bundle-SymbolicName: org.eclipse.ocl.tutorial.eclipsecon2011.states;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,
+ de.itemis.xtext.antlr;bundle-version="2.0.0";resolution:=optional,
+ 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.completeocl;bundle-version="3.1.0";visibility:=reexport
+Export-Package: org.eclipse.ocl.tutorial.eclipsecon2011,
+ org.eclipse.ocl.tutorial.eclipsecon2011.validation,
+ org.eclipse.ocl.tutorial.eclipsecon2011.services,
+ org.eclipse.ocl.tutorial.eclipsecon2011.states,
+ org.eclipse.ocl.tutorial.eclipsecon2011.states.impl,
+ org.eclipse.ocl.tutorial.eclipsecon2011.states.util,
+ org.eclipse.ocl.tutorial.eclipsecon2011.parseTreeConstruction,
+ org.eclipse.ocl.tutorial.eclipsecon2011.parser.antlr,
+ org.eclipse.ocl.tutorial.eclipsecon2011.parser.antlr.internal
+Import-Package: org.apache.commons.logging;version="1.0.4",
+ org.apache.log4j
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/about.html b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/about.html
new file mode 100644
index 0000000..1b8f940
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/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.states/build.properties b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/build.properties
new file mode 100644
index 0000000..593d699
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/build.properties
@@ -0,0 +1,7 @@
+source.. = src/,\
+           src-gen/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               about.html
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/plugin.properties b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/plugin.properties
new file mode 100644
index 0000000..b733676
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/plugin.properties
@@ -0,0 +1,8 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id: plugin.properties,v 1.1 2011/03/12 20:46:05 ewillink Exp $
+
+pluginName = EclipseCon 2011 Tutorial Xtext States Editor
+providerName = Eclipse Modeling Project
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/plugin.xml b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/plugin.xml
new file mode 100644
index 0000000..0aa6dd1
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/plugin.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<plugin>
+
+  <extension point="org.eclipse.emf.ecore.generated_package">
+    <package 
+       uri = "http://ocl.eclipse.org/tutorial/eclipsecon2011/States" 
+       class = "org.eclipse.ocl.tutorial.eclipsecon2011.states.StatesPackage"
+       genModel = "org/eclipse/ocl/tutorial/eclipsecon2011/States.genmodel" /> 
+	
+  </extension>
+
+</plugin>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/AbstractStatesRuntimeModule.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/AbstractStatesRuntimeModule.java
new file mode 100644
index 0000000..bb0350e
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/AbstractStatesRuntimeModule.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.StatesRuntimeModule}
+ */
+ @SuppressWarnings("all")
+public abstract class AbstractStatesRuntimeModule extends DefaultRuntimeModule {
+
+	protected Properties properties = null;
+
+	@Override
+	public void configure(Binder binder) {
+		properties = tryBindProperties(binder, "org/eclipse/ocl/tutorial/eclipsecon2011/States.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.States");
+	}
+	
+	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("states");
+	}
+	
+	// contributed by org.eclipse.xtext.generator.grammarAccess.GrammarAccessFragment
+	public Class<? extends org.eclipse.xtext.IGrammarAccess> bindIGrammarAccess() {
+		return org.eclipse.ocl.tutorial.eclipsecon2011.services.StatesGrammarAccess.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.StatesParsetreeConstructor.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.StatesParser.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.StatesAntlrTokenFileProvider.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.InternalStatesLexer.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public com.google.inject.Provider<org.eclipse.ocl.tutorial.eclipsecon2011.parser.antlr.internal.InternalStatesLexer> provideInternalStatesLexer() {
+		return org.eclipse.xtext.parser.antlr.LexerProvider.create(org.eclipse.ocl.tutorial.eclipsecon2011.parser.antlr.internal.InternalStatesLexer.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.InternalStatesLexer.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.StatesJavaValidator> bindStatesJavaValidator() {
+		return org.eclipse.ocl.tutorial.eclipsecon2011.validation.StatesJavaValidator.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.StatesFormatter.class;
+	}
+
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore
new file mode 100644
index 0000000..06fb1ac
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore
@@ -0,0 +1,46 @@
+<?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="states"
+    nsURI="http://ocl.eclipse.org/tutorial/eclipsecon2011/States" nsPrefix="states">
+  <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="ecore:EClass platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//Statemachine"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Statemachine">
+    <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="ecore:EClass platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//Event"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="states" upperBound="-1"
+        eType="ecore:EClass platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//State"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="dbgName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </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">
+    <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="ecore:EClass platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//Transition"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="dbgName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SimpleState" eSuperTypes="platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//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="platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//State">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="machine" eType="ecore:EClass platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//Statemachine"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Transition">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="event" eType="ecore:EClass platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//Event"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="state" eType="ecore:EClass platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//State"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="dbgName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.genmodel b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.genmodel
new file mode 100644
index 0000000..ebc8975
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.genmodel
@@ -0,0 +1,45 @@
+<?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.states/src-gen"
+    editDirectory="/org.eclipse.ocl.tutorial.eclipsecon2011.states.edit/src" editorDirectory="/org.eclipse.ocl.tutorial.eclipsecon2011.states.editor/src"
+    modelPluginID="org.eclipse.ocl.tutorial.eclipsecon2011.states" forceOverwrite="true"
+    modelName="States" updateClasspath="false" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
+    complianceLevel="5.0" copyrightFields="false" editPluginID="org.eclipse.ocl.tutorial.eclipsecon2011.states.edit"
+    editorPluginID="org.eclipse.ocl.tutorial.eclipsecon2011.states.editor">
+  <genPackages prefix="States" basePackage="org.eclipse.ocl.tutorial.eclipsecon2011"
+      disposableProviderFactory="true" ecorePackage="platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#/">
+    <genClasses ecoreClass="platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//Module">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//Module/name"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//Module/machines"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//Statemachine">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//Statemachine/initial"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//Statemachine/name"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//Statemachine/value"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//Statemachine/events"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//Statemachine/states"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//Statemachine/dbgName"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//Event">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//Event/name"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//State">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//State/initial"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//State/name"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//State/transitions"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//State/dbgName"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//SimpleState">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//SimpleState/value"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//CompoundState">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//CompoundState/machine"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//Transition">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//Transition/event"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//Transition/state"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.ecore#//Transition/dbgName"/>
+    </genClasses>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.xmi b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.xmi
new file mode 100644
index 0000000..003848c
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/States.xmi
@@ -0,0 +1,327 @@
+<?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.States" usedGrammars="/1">
+    <metamodelDeclarations xsi:type="xtext:GeneratedMetamodel" name="states">
+      <ePackage href="http://ocl.eclipse.org/tutorial/eclipsecon2011/States#/"/>
+    </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/States#//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:Alternatives">
+            <elements xsi:type="xtext:RuleCall" rule="/1/@rules.2"/>
+            <elements xsi:type="xtext:RuleCall" rule="/1/@rules.0"/>
+          </terminal>
+        </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/States#//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="}"/>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="debug"/>
+          <elements xsi:type="xtext:Assignment" feature="dbgName" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.0"/>
+          </elements>
+        </elements>
+      </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/States#//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/States#//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/States#//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="}"/>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="debug"/>
+          <elements xsi:type="xtext:Assignment" feature="dbgName" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.0"/>
+          </elements>
+        </elements>
+      </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/States#//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/States#//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="}"/>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="debug"/>
+          <elements xsi:type="xtext:Assignment" feature="dbgName" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.0"/>
+          </elements>
+        </elements>
+      </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/States#//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/States#//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/States#//State"/>
+            </type>
+            <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.0"/>
+          </terminal>
+        </elements>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="debug"/>
+          <elements xsi:type="xtext:Assignment" feature="dbgName" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.0"/>
+          </elements>
+        </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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/StatesStandaloneSetupGenerated.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/StatesStandaloneSetupGenerated.java
new file mode 100644
index 0000000..9e33d54
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/StatesStandaloneSetupGenerated.java
@@ -0,0 +1,43 @@
+
+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 StatesStandaloneSetupGenerated 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.StatesRuntimeModule());
+	}
+	
+	public void register(Injector injector) {
+	if (!EPackage.Registry.INSTANCE.containsKey("http://ocl.eclipse.org/tutorial/eclipsecon2011/States")) {
+		EPackage.Registry.INSTANCE.put("http://ocl.eclipse.org/tutorial/eclipsecon2011/States", org.eclipse.ocl.tutorial.eclipsecon2011.states.StatesPackage.eINSTANCE);
+	}
+
+		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("states", resourceFactory);
+		org.eclipse.xtext.resource.IResourceServiceProvider.Registry.INSTANCE.getExtensionToFactoryMap().put("states", serviceProvider);
+		
+
+
+
+	}
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parseTreeConstruction/StatesParsetreeConstructor.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parseTreeConstruction/StatesParsetreeConstructor.java
new file mode 100644
index 0000000..6e1b226
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parseTreeConstruction/StatesParsetreeConstructor.java
@@ -0,0 +1,1809 @@
+/*
+* 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.StatesGrammarAccess;
+
+import com.google.inject.Inject;
+
+@SuppressWarnings("all")
+public class StatesParsetreeConstructor extends AbstractParseTreeConstructor {
+		
+	@Inject
+	private StatesGrammarAccess 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 | ID) machines+=Statemachine*;
+ *
+ **/
+
+// "module" name=(STRING | ID) 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 | ID)
+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_0(), value, null)) {
+			type = AssignmentType.TERMINAL_RULE_CALL;
+			element = grammarAccess.getModuleAccess().getNameSTRINGTerminalRuleCall_1_0_0();
+			return obj;
+		}
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getModuleAccess().getNameIDTerminalRuleCall_1_0_1(), value, null)) {
+			type = AssignmentType.TERMINAL_RULE_CALL;
+			element = grammarAccess.getModuleAccess().getNameIDTerminalRuleCall_1_0_1();
+			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* "}"
+ * 	("debug" dbgName=ID)?;
+ *
+ **/
+
+// initial?="initial"? "statemachine" name=ID ("value" value=INT)? "{" "events" events+=Event* ";" states+=State* "}"
+// ("debug" dbgName=ID)?
+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_Group_10(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Statemachine_RightCurlyBracketKeyword_9(lastRuleCallOrigin, this, 1, 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;
+		}	
+	}
+
+}
+
+// ("debug" dbgName=ID)?
+protected class Statemachine_Group_10 extends GroupToken {
+	
+	public Statemachine_Group_10(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getStatemachineAccess().getGroup_10();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Statemachine_DbgNameAssignment_10_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "debug"
+protected class Statemachine_DebugKeyword_10_0 extends KeywordToken  {
+	
+	public Statemachine_DebugKeyword_10_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getStatemachineAccess().getDebugKeyword_10_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Statemachine_RightCurlyBracketKeyword_9(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// dbgName=ID
+protected class Statemachine_DbgNameAssignment_10_1 extends AssignmentToken  {
+	
+	public Statemachine_DbgNameAssignment_10_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getStatemachineAccess().getDbgNameAssignment_10_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Statemachine_DebugKeyword_10_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("dbgName",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("dbgName");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getStatemachineAccess().getDbgNameIDTerminalRuleCall_10_1_0(), value, null)) {
+			type = AssignmentType.TERMINAL_RULE_CALL;
+			element = grammarAccess.getStatemachineAccess().getDbgNameIDTerminalRuleCall_10_1_0();
+			return obj;
+		}
+		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* "}" ("debug" dbgName=ID)?;
+ *
+ **/
+
+// initial?="initial"? "state" name=ID ("value" value=INT)? "{" transitions+=Transition* "}" ("debug" dbgName=ID)?
+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_Group_7(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new SimpleState_RightCurlyBracketKeyword_6(lastRuleCallOrigin, this, 1, 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;
+		}	
+	}
+
+}
+
+// ("debug" dbgName=ID)?
+protected class SimpleState_Group_7 extends GroupToken {
+	
+	public SimpleState_Group_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getSimpleStateAccess().getGroup_7();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SimpleState_DbgNameAssignment_7_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "debug"
+protected class SimpleState_DebugKeyword_7_0 extends KeywordToken  {
+	
+	public SimpleState_DebugKeyword_7_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSimpleStateAccess().getDebugKeyword_7_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SimpleState_RightCurlyBracketKeyword_6(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// dbgName=ID
+protected class SimpleState_DbgNameAssignment_7_1 extends AssignmentToken  {
+	
+	public SimpleState_DbgNameAssignment_7_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getSimpleStateAccess().getDbgNameAssignment_7_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SimpleState_DebugKeyword_7_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("dbgName",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("dbgName");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getSimpleStateAccess().getDbgNameIDTerminalRuleCall_7_1_0(), value, null)) {
+			type = AssignmentType.TERMINAL_RULE_CALL;
+			element = grammarAccess.getSimpleStateAccess().getDbgNameIDTerminalRuleCall_7_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+
+
+/************ end Rule SimpleState ****************/
+
+
+/************ begin Rule CompoundState ****************
+ *
+ * CompoundState:
+ * 	"compound" initial?="initial"? "state" name=ID "machine" machine=[Statemachine] "{" transitions+=Transition* "}"
+ * 	("debug" dbgName=ID)?;
+ *
+ **/
+
+// "compound" initial?="initial"? "state" name=ID "machine" machine=[Statemachine] "{" transitions+=Transition* "}"
+// ("debug" dbgName=ID)?
+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_Group_9(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new CompoundState_RightCurlyBracketKeyword_8(lastRuleCallOrigin, this, 1, 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;
+		}	
+	}
+
+}
+
+// ("debug" dbgName=ID)?
+protected class CompoundState_Group_9 extends GroupToken {
+	
+	public CompoundState_Group_9(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getCompoundStateAccess().getGroup_9();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompoundState_DbgNameAssignment_9_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "debug"
+protected class CompoundState_DebugKeyword_9_0 extends KeywordToken  {
+	
+	public CompoundState_DebugKeyword_9_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompoundStateAccess().getDebugKeyword_9_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompoundState_RightCurlyBracketKeyword_8(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// dbgName=ID
+protected class CompoundState_DbgNameAssignment_9_1 extends AssignmentToken  {
+	
+	public CompoundState_DbgNameAssignment_9_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getCompoundStateAccess().getDbgNameAssignment_9_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompoundState_DebugKeyword_9_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("dbgName",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("dbgName");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCompoundStateAccess().getDbgNameIDTerminalRuleCall_9_1_0(), value, null)) {
+			type = AssignmentType.TERMINAL_RULE_CALL;
+			element = grammarAccess.getCompoundStateAccess().getDbgNameIDTerminalRuleCall_9_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+
+
+/************ end Rule CompoundState ****************/
+
+
+/************ begin Rule Transition ****************
+ *
+ * Transition:
+ * 	event=[Event] "=>" state=[State] ("debug" dbgName=ID)?;
+ *
+ **/
+
+// event=[Event] "=>" state=[State] ("debug" dbgName=ID)?
+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_Group_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Transition_StateAssignment_2(lastRuleCallOrigin, this, 1, 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;
+	}
+
+}
+
+// ("debug" dbgName=ID)?
+protected class Transition_Group_3 extends GroupToken {
+	
+	public Transition_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getTransitionAccess().getGroup_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Transition_DbgNameAssignment_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "debug"
+protected class Transition_DebugKeyword_3_0 extends KeywordToken  {
+	
+	public Transition_DebugKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getTransitionAccess().getDebugKeyword_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Transition_StateAssignment_2(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// dbgName=ID
+protected class Transition_DbgNameAssignment_3_1 extends AssignmentToken  {
+	
+	public Transition_DbgNameAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getTransitionAccess().getDbgNameAssignment_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Transition_DebugKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("dbgName",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("dbgName");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getTransitionAccess().getDbgNameIDTerminalRuleCall_3_1_0(), value, null)) {
+			type = AssignmentType.TERMINAL_RULE_CALL;
+			element = grammarAccess.getTransitionAccess().getDbgNameIDTerminalRuleCall_3_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+
+
+/************ end Rule Transition ****************/
+
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/StatesAntlrTokenFileProvider.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/StatesAntlrTokenFileProvider.java
new file mode 100644
index 0000000..57162c5
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/StatesAntlrTokenFileProvider.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 StatesAntlrTokenFileProvider implements IAntlrTokenFileProvider {
+	
+	public InputStream getAntlrTokenFile() {
+		ClassLoader classLoader = getClass().getClassLoader();
+    	return classLoader.getResourceAsStream("org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.tokens");
+	}
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/StatesParser.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/StatesParser.java
new file mode 100644
index 0000000..a714f45
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/StatesParser.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.StatesGrammarAccess;
+
+public class StatesParser extends org.eclipse.xtext.parser.antlr.AbstractAntlrParser {
+	
+	@Inject
+	private StatesGrammarAccess 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.InternalStatesParser createParser(XtextTokenStream stream) {
+		return new org.eclipse.ocl.tutorial.eclipsecon2011.parser.antlr.internal.InternalStatesParser(stream, getGrammarAccess());
+	}
+	
+	@Override 
+	protected String getDefaultRuleName() {
+		return "Module";
+	}
+	
+	public StatesGrammarAccess getGrammarAccess() {
+		return this.grammarAccess;
+	}
+	
+	public void setGrammarAccess(StatesGrammarAccess grammarAccess) {
+		this.grammarAccess = grammarAccess;
+	}
+	
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g
new file mode 100644
index 0000000..76eba67
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g
@@ -0,0 +1,720 @@
+/*
+* generated by Xtext
+*/
+grammar InternalStates;
+
+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.StatesGrammarAccess;
+
+}
+
+@parser::members {
+
+ 	private StatesGrammarAccess grammarAccess;
+ 	
+    public InternalStatesParser(TokenStream input, StatesGrammarAccess grammarAccess) {
+        this(input);
+        this.grammarAccess = grammarAccess;
+        registerRules(grammarAccess.getGrammar());
+    }
+    
+    @Override
+    protected String getFirstRuleName() {
+    	return "Module";	
+   	}
+   	
+   	@Override
+   	protected StatesGrammarAccess 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_1=RULE_STRING
+		{
+			newLeafNode(lv_name_1_1, grammarAccess.getModuleAccess().getNameSTRINGTerminalRuleCall_1_0_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getModuleRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"name",
+        		lv_name_1_1, 
+        		"STRING");
+	    }
+
+    |		lv_name_1_2=RULE_ID
+		{
+			newLeafNode(lv_name_1_2, grammarAccess.getModuleAccess().getNameIDTerminalRuleCall_1_0_1()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getModuleRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"name",
+        		lv_name_1_2, 
+        		"ID");
+	    }
+
+)
+
+)
+)(
+(
+		{ 
+	        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());
+    }
+(	otherlv_11='debug' 
+    {
+    	newLeafNode(otherlv_11, grammarAccess.getStatemachineAccess().getDebugKeyword_10_0());
+    }
+(
+(
+		lv_dbgName_12_0=RULE_ID
+		{
+			newLeafNode(lv_dbgName_12_0, grammarAccess.getStatemachineAccess().getDbgNameIDTerminalRuleCall_10_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getStatemachineRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"dbgName",
+        		lv_dbgName_12_0, 
+        		"ID");
+	    }
+
+)
+))?)
+;
+
+
+
+
+
+// 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());
+    }
+(	otherlv_8='debug' 
+    {
+    	newLeafNode(otherlv_8, grammarAccess.getSimpleStateAccess().getDebugKeyword_7_0());
+    }
+(
+(
+		lv_dbgName_9_0=RULE_ID
+		{
+			newLeafNode(lv_dbgName_9_0, grammarAccess.getSimpleStateAccess().getDbgNameIDTerminalRuleCall_7_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getSimpleStateRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"dbgName",
+        		lv_dbgName_9_0, 
+        		"ID");
+	    }
+
+)
+))?)
+;
+
+
+
+
+
+// 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());
+    }
+(	otherlv_9='debug' 
+    {
+    	newLeafNode(otherlv_9, grammarAccess.getCompoundStateAccess().getDebugKeyword_9_0());
+    }
+(
+(
+		lv_dbgName_10_0=RULE_ID
+		{
+			newLeafNode(lv_dbgName_10_0, grammarAccess.getCompoundStateAccess().getDbgNameIDTerminalRuleCall_9_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getCompoundStateRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"dbgName",
+        		lv_dbgName_10_0, 
+        		"ID");
+	    }
+
+)
+))?)
+;
+
+
+
+
+
+// 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()); 
+	}
+
+)
+)(	otherlv_3='debug' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getTransitionAccess().getDebugKeyword_3_0());
+    }
+(
+(
+		lv_dbgName_4_0=RULE_ID
+		{
+			newLeafNode(lv_dbgName_4_0, grammarAccess.getTransitionAccess().getDbgNameIDTerminalRuleCall_3_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getTransitionRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"dbgName",
+        		lv_dbgName_4_0, 
+        		"ID");
+	    }
+
+)
+))?)
+;
+
+
+
+
+
+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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.tokens b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.tokens
new file mode 100644
index 0000000..daaf659
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.tokens
@@ -0,0 +1,33 @@
+RULE_ML_COMMENT=7
+T__12=12
+RULE_ID=5
+T__23=23
+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
+'compound'=21
+'events'=16
+'debug'=19
+'=>'=23
+'machine'=22
+'{'=15
+';'=17
+'module'=11
+'initial'=12
+'value'=14
+'state'=20
+'}'=18
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStatesLexer.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStatesLexer.java
new file mode 100644
index 0000000..bff41c0
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStatesLexer.java
@@ -0,0 +1,1219 @@
+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 InternalStatesLexer 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__23=23;
+    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 InternalStatesLexer() {;} 
+    public InternalStatesLexer(CharStream input) {
+        this(input, new RecognizerSharedState());
+    }
+    public InternalStatesLexer(CharStream input, RecognizerSharedState state) {
+        super(input,state);
+
+    }
+    public String getGrammarFileName() { return "../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:11:7: ( 'module' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:12:7: ( 'initial' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:13:7: ( 'statemachine' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:14:7: ( 'value' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:15:7: ( '{' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:16:7: ( 'events' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:17:7: ( ';' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:18:7: ( '}' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:19:7: ( 'debug' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:19:9: 'debug'
+            {
+            match("debug"); 
+
+
+            }
+
+            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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:20:7: ( 'state' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:20:9: 'state'
+            {
+            match("state"); 
+
+
+            }
+
+            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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:21:7: ( 'compound' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:21:9: 'compound'
+            {
+            match("compound"); 
+
+
+            }
+
+            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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:22:7: ( 'machine' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:22:9: 'machine'
+            {
+            match("machine"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__22"
+
+    // $ANTLR start "T__23"
+    public final void mT__23() throws RecognitionException {
+        try {
+            int _type = T__23;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:23:7: ( '=>' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:23:9: '=>'
+            {
+            match("=>"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__23"
+
+    // $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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:706:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:706:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:706:11: ( '^' )?
+            int alt1=2;
+            int LA1_0 = input.LA(1);
+
+            if ( (LA1_0=='^') ) {
+                alt1=1;
+            }
+            switch (alt1) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:706: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:706: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:708:10: ( ( '0' .. '9' )+ )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:708:12: ( '0' .. '9' )+
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:708: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:708: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:710:13: ( ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:710:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:710: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:710:16: '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
+                    {
+                    match('\"'); 
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:710: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:710: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:710: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:710:86: '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
+                    {
+                    match('\''); 
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:710: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:710: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:710: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:712:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:712:19: '/*' ( options {greedy=false; } : . )* '*/'
+            {
+            match("/*"); 
+
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:712: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:712: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:714:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:714:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            {
+            match("//"); 
+
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:714: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:714: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:714: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:714:41: ( '\\r' )? '\\n'
+                    {
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:714: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:714: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:716:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:716:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:716: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:718:16: ( . )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:718:18: .
+            {
+            matchAny(); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ANY_OTHER"
+
+    public void mTokens() throws RecognitionException {
+        // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.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 | T__23 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
+        int alt12=20;
+        alt12 = dfa12.predict(input);
+        switch (alt12) {
+            case 1 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:1:10: T__11
+                {
+                mT__11(); 
+
+                }
+                break;
+            case 2 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:1:16: T__12
+                {
+                mT__12(); 
+
+                }
+                break;
+            case 3 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:1:22: T__13
+                {
+                mT__13(); 
+
+                }
+                break;
+            case 4 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:1:28: T__14
+                {
+                mT__14(); 
+
+                }
+                break;
+            case 5 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:1:34: T__15
+                {
+                mT__15(); 
+
+                }
+                break;
+            case 6 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:1:40: T__16
+                {
+                mT__16(); 
+
+                }
+                break;
+            case 7 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:1:46: T__17
+                {
+                mT__17(); 
+
+                }
+                break;
+            case 8 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:1:52: T__18
+                {
+                mT__18(); 
+
+                }
+                break;
+            case 9 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:1:58: T__19
+                {
+                mT__19(); 
+
+                }
+                break;
+            case 10 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:1:64: T__20
+                {
+                mT__20(); 
+
+                }
+                break;
+            case 11 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:1:70: T__21
+                {
+                mT__21(); 
+
+                }
+                break;
+            case 12 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:1:76: T__22
+                {
+                mT__22(); 
+
+                }
+                break;
+            case 13 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:1:82: T__23
+                {
+                mT__23(); 
+
+                }
+                break;
+            case 14 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:1:88: RULE_ID
+                {
+                mRULE_ID(); 
+
+                }
+                break;
+            case 15 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:1:96: RULE_INT
+                {
+                mRULE_INT(); 
+
+                }
+                break;
+            case 16 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:1:105: RULE_STRING
+                {
+                mRULE_STRING(); 
+
+                }
+                break;
+            case 17 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:1:117: RULE_ML_COMMENT
+                {
+                mRULE_ML_COMMENT(); 
+
+                }
+                break;
+            case 18 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:1:133: RULE_SL_COMMENT
+                {
+                mRULE_SL_COMMENT(); 
+
+                }
+                break;
+            case 19 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:1:149: RULE_WS
+                {
+                mRULE_WS(); 
+
+                }
+                break;
+            case 20 :
+                // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:1:157: RULE_ANY_OTHER
+                {
+                mRULE_ANY_OTHER(); 
+
+                }
+                break;
+
+        }
+
+    }
+
+
+    protected DFA12 dfa12 = new DFA12(this);
+    static final String DFA12_eotS =
+        "\1\uffff\4\26\1\uffff\1\26\2\uffff\2\26\2\23\2\uffff\3\23\2\uffff"+
+        "\2\26\1\uffff\3\26\1\uffff\1\26\2\uffff\2\26\6\uffff\23\26\1\102"+
+        "\1\103\1\26\1\105\1\26\1\107\3\26\2\uffff\1\113\1\uffff\1\26\1\uffff"+
+        "\1\115\1\116\1\26\1\uffff\1\26\2\uffff\1\26\1\122\1\26\1\uffff\2"+
+        "\26\1\126\1\uffff";
+    static final String DFA12_eofS =
+        "\127\uffff";
+    static final String DFA12_minS =
+        "\1\0\1\141\1\156\1\164\1\141\1\uffff\1\166\2\uffff\1\145\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\142\1\155\6\uffff\1\165\1\150"+
+        "\2\164\1\165\1\156\1\165\1\160\1\154\2\151\2\145\1\164\1\147\1\157"+
+        "\1\145\1\156\1\141\2\60\1\163\1\60\1\165\1\60\1\145\1\154\1\141"+
+        "\2\uffff\1\60\1\uffff\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\145\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\142\1\155\6\uffff\1\165"+
+        "\1\150\2\164\1\165\1\156\1\165\1\160\1\154\2\151\2\145\1\164\1\147"+
+        "\1\157\1\145\1\156\1\141\2\172\1\163\1\172\1\165\1\172\1\145\1\154"+
+        "\1\141\2\uffff\1\172\1\uffff\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\4\uffff\1\16\1\17\3\uffff\1\23\1"+
+        "\24\2\uffff\1\16\3\uffff\1\5\1\uffff\1\7\1\10\2\uffff\1\15\1\17"+
+        "\1\20\1\21\1\22\1\23\34\uffff\1\12\1\4\1\uffff\1\11\1\uffff\1\1"+
+        "\3\uffff\1\6\1\uffff\1\14\1\2\3\uffff\1\13\3\uffff\1\3";
+    static final String DFA12_specialS =
+        "\1\2\16\uffff\1\0\1\1\106\uffff}>";
+    static final String[] DFA12_transitionS = {
+            "\11\23\2\22\2\23\1\22\22\23\1\22\1\23\1\17\4\23\1\20\7\23\1"+
+            "\21\12\16\1\23\1\7\1\23\1\13\3\23\32\15\3\23\1\14\1\15\1\23"+
+            "\2\15\1\12\1\11\1\6\3\15\1\2\3\15\1\1\5\15\1\3\2\15\1\4\4\15"+
+            "\1\5\1\23\1\10\uff82\23",
+            "\1\25\15\uffff\1\24",
+            "\1\27",
+            "\1\30",
+            "\1\31",
+            "",
+            "\1\33",
+            "",
+            "",
+            "\1\36",
+            "\1\37",
+            "\1\40",
+            "\32\26\4\uffff\1\26\1\uffff\32\26",
+            "",
+            "",
+            "\0\42",
+            "\0\42",
+            "\1\43\4\uffff\1\44",
+            "",
+            "",
+            "\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",
+            "\1\74",
+            "\1\75",
+            "\1\76",
+            "\1\77",
+            "\1\100",
+            "\12\26\7\uffff\32\26\4\uffff\1\26\1\uffff\14\26\1\101\15\26",
+            "\12\26\7\uffff\32\26\4\uffff\1\26\1\uffff\32\26",
+            "\1\104",
+            "\12\26\7\uffff\32\26\4\uffff\1\26\1\uffff\32\26",
+            "\1\106",
+            "\12\26\7\uffff\32\26\4\uffff\1\26\1\uffff\32\26",
+            "\1\110",
+            "\1\111",
+            "\1\112",
+            "",
+            "",
+            "\12\26\7\uffff\32\26\4\uffff\1\26\1\uffff\32\26",
+            "",
+            "\1\114",
+            "",
+            "\12\26\7\uffff\32\26\4\uffff\1\26\1\uffff\32\26",
+            "\12\26\7\uffff\32\26\4\uffff\1\26\1\uffff\32\26",
+            "\1\117",
+            "",
+            "\1\120",
+            "",
+            "",
+            "\1\121",
+            "\12\26\7\uffff\32\26\4\uffff\1\26\1\uffff\32\26",
+            "\1\123",
+            "",
+            "\1\124",
+            "\1\125",
+            "\12\26\7\uffff\32\26\4\uffff\1\26\1\uffff\32\26",
+            ""
+    };
+
+    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 | T__23 | 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 = 34;}
+
+                        else s = 19;
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA12_16 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA12_16>='\u0000' && LA12_16<='\uFFFF')) ) {s = 34;}
+
+                        else s = 19;
+
+                        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=='d') ) {s = 9;}
+
+                        else if ( (LA12_0=='c') ) {s = 10;}
+
+                        else if ( (LA12_0=='=') ) {s = 11;}
+
+                        else if ( (LA12_0=='^') ) {s = 12;}
+
+                        else if ( ((LA12_0>='A' && LA12_0<='Z')||LA12_0=='_'||(LA12_0>='a' && LA12_0<='b')||(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 = 13;}
+
+                        else if ( ((LA12_0>='0' && LA12_0<='9')) ) {s = 14;}
+
+                        else if ( (LA12_0=='\"') ) {s = 15;}
+
+                        else if ( (LA12_0=='\'') ) {s = 16;}
+
+                        else if ( (LA12_0=='/') ) {s = 17;}
+
+                        else if ( ((LA12_0>='\t' && LA12_0<='\n')||LA12_0=='\r'||LA12_0==' ') ) {s = 18;}
+
+                        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 = 19;}
+
+                        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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStatesParser.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStatesParser.java
new file mode 100644
index 0000000..62cfad4
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStatesParser.java
@@ -0,0 +1,1670 @@
+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.StatesGrammarAccess;
+
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+@SuppressWarnings("all")
+public class InternalStatesParser 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'", "';'", "'}'", "'debug'", "'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__23=23;
+    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 InternalStatesParser(TokenStream input) {
+            this(input, new RecognizerSharedState());
+        }
+        public InternalStatesParser(TokenStream input, RecognizerSharedState state) {
+            super(input, state);
+             
+        }
+        
+
+    public String[] getTokenNames() { return InternalStatesParser.tokenNames; }
+    public String getGrammarFileName() { return "../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g"; }
+
+
+
+     	private StatesGrammarAccess grammarAccess;
+     	
+        public InternalStatesParser(TokenStream input, StatesGrammarAccess grammarAccess) {
+            this(input);
+            this.grammarAccess = grammarAccess;
+            registerRules(grammarAccess.getGrammar());
+        }
+        
+        @Override
+        protected String getFirstRuleName() {
+        	return "Module";	
+       	}
+       	
+       	@Override
+       	protected StatesGrammarAccess getGrammarAccess() {
+       		return grammarAccess;
+       	}
+
+
+
+    // $ANTLR start "entryRuleModule"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:68:2: (iv_ruleModule= ruleModule EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:76:1: ruleModule returns [EObject current=null] : (otherlv_0= 'module' ( ( (lv_name_1_1= RULE_STRING | lv_name_1_2= RULE_ID ) ) ) ( (lv_machines_2_0= ruleStatemachine ) )* ) ;
+    public final EObject ruleModule() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token lv_name_1_1=null;
+        Token lv_name_1_2=null;
+        EObject lv_machines_2_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:79:28: ( (otherlv_0= 'module' ( ( (lv_name_1_1= RULE_STRING | lv_name_1_2= RULE_ID ) ) ) ( (lv_machines_2_0= ruleStatemachine ) )* ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:80:1: (otherlv_0= 'module' ( ( (lv_name_1_1= RULE_STRING | lv_name_1_2= RULE_ID ) ) ) ( (lv_machines_2_0= ruleStatemachine ) )* )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:80:1: (otherlv_0= 'module' ( ( (lv_name_1_1= RULE_STRING | lv_name_1_2= RULE_ID ) ) ) ( (lv_machines_2_0= ruleStatemachine ) )* )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:80:3: otherlv_0= 'module' ( ( (lv_name_1_1= RULE_STRING | lv_name_1_2= RULE_ID ) ) ) ( (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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:84:1: ( ( (lv_name_1_1= RULE_STRING | lv_name_1_2= RULE_ID ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:85:1: ( (lv_name_1_1= RULE_STRING | lv_name_1_2= RULE_ID ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:85:1: ( (lv_name_1_1= RULE_STRING | lv_name_1_2= RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:86:1: (lv_name_1_1= RULE_STRING | lv_name_1_2= RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:86:1: (lv_name_1_1= RULE_STRING | lv_name_1_2= RULE_ID )
+            int alt1=2;
+            int LA1_0 = input.LA(1);
+
+            if ( (LA1_0==RULE_STRING) ) {
+                alt1=1;
+            }
+            else if ( (LA1_0==RULE_ID) ) {
+                alt1=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 1, 0, input);
+
+                throw nvae;
+            }
+            switch (alt1) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:87:3: lv_name_1_1= RULE_STRING
+                    {
+                    lv_name_1_1=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleModule141); 
+
+                    			newLeafNode(lv_name_1_1, grammarAccess.getModuleAccess().getNameSTRINGTerminalRuleCall_1_0_0()); 
+                    		
+
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getModuleRule());
+                    	        }
+                           		setWithLastConsumed(
+                           			current, 
+                           			"name",
+                            		lv_name_1_1, 
+                            		"STRING");
+                    	    
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:102:8: lv_name_1_2= RULE_ID
+                    {
+                    lv_name_1_2=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleModule161); 
+
+                    			newLeafNode(lv_name_1_2, grammarAccess.getModuleAccess().getNameIDTerminalRuleCall_1_0_1()); 
+                    		
+
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getModuleRule());
+                    	        }
+                           		setWithLastConsumed(
+                           			current, 
+                           			"name",
+                            		lv_name_1_2, 
+                            		"ID");
+                    	    
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:120:2: ( (lv_machines_2_0= ruleStatemachine ) )*
+            loop2:
+            do {
+                int alt2=2;
+                int LA2_0 = input.LA(1);
+
+                if ( ((LA2_0>=12 && LA2_0<=13)) ) {
+                    alt2=1;
+                }
+
+
+                switch (alt2) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:121:1: (lv_machines_2_0= ruleStatemachine )
+            	    {
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:121:1: (lv_machines_2_0= ruleStatemachine )
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:122:3: lv_machines_2_0= ruleStatemachine
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getModuleAccess().getMachinesStatemachineParserRuleCall_2_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleStatemachine_in_ruleModule190);
+            	    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 loop2;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleModule"
+
+
+    // $ANTLR start "entryRuleStatemachine"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:146: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:147:2: (iv_ruleStatemachine= ruleStatemachine EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:148:2: iv_ruleStatemachine= ruleStatemachine EOF
+            {
+             newCompositeNode(grammarAccess.getStatemachineRule()); 
+            pushFollow(FOLLOW_ruleStatemachine_in_entryRuleStatemachine227);
+            iv_ruleStatemachine=ruleStatemachine();
+
+            state._fsp--;
+
+             current =iv_ruleStatemachine; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleStatemachine237); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleStatemachine"
+
+
+    // $ANTLR start "ruleStatemachine"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:155: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= '}' (otherlv_11= 'debug' ( (lv_dbgName_12_0= RULE_ID ) ) )? ) ;
+    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;
+        Token otherlv_11=null;
+        Token lv_dbgName_12_0=null;
+        EObject lv_events_7_0 = null;
+
+        EObject lv_states_9_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:158: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= '}' (otherlv_11= 'debug' ( (lv_dbgName_12_0= RULE_ID ) ) )? ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:159: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= '}' (otherlv_11= 'debug' ( (lv_dbgName_12_0= RULE_ID ) ) )? )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:159: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= '}' (otherlv_11= 'debug' ( (lv_dbgName_12_0= RULE_ID ) ) )? )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:159: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= '}' (otherlv_11= 'debug' ( (lv_dbgName_12_0= RULE_ID ) ) )?
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:159:2: ( (lv_initial_0_0= 'initial' ) )?
+            int alt3=2;
+            int LA3_0 = input.LA(1);
+
+            if ( (LA3_0==12) ) {
+                alt3=1;
+            }
+            switch (alt3) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:160:1: (lv_initial_0_0= 'initial' )
+                    {
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:160:1: (lv_initial_0_0= 'initial' )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:161:3: lv_initial_0_0= 'initial'
+                    {
+                    lv_initial_0_0=(Token)match(input,12,FOLLOW_12_in_ruleStatemachine280); 
+
+                            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_ruleStatemachine306); 
+
+                	newLeafNode(otherlv_1, grammarAccess.getStatemachineAccess().getStatemachineKeyword_1());
+                
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:178:1: ( (lv_name_2_0= RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:179:1: (lv_name_2_0= RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:179:1: (lv_name_2_0= RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:180:3: lv_name_2_0= RULE_ID
+            {
+            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleStatemachine323); 
+
+            			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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:196:2: (otherlv_3= 'value' ( (lv_value_4_0= RULE_INT ) ) )?
+            int alt4=2;
+            int LA4_0 = input.LA(1);
+
+            if ( (LA4_0==14) ) {
+                alt4=1;
+            }
+            switch (alt4) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:196:4: otherlv_3= 'value' ( (lv_value_4_0= RULE_INT ) )
+                    {
+                    otherlv_3=(Token)match(input,14,FOLLOW_14_in_ruleStatemachine341); 
+
+                        	newLeafNode(otherlv_3, grammarAccess.getStatemachineAccess().getValueKeyword_3_0());
+                        
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:200:1: ( (lv_value_4_0= RULE_INT ) )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:201:1: (lv_value_4_0= RULE_INT )
+                    {
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:201:1: (lv_value_4_0= RULE_INT )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:202:3: lv_value_4_0= RULE_INT
+                    {
+                    lv_value_4_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleStatemachine358); 
+
+                    			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_ruleStatemachine377); 
+
+                	newLeafNode(otherlv_5, grammarAccess.getStatemachineAccess().getLeftCurlyBracketKeyword_4());
+                
+            otherlv_6=(Token)match(input,16,FOLLOW_16_in_ruleStatemachine389); 
+
+                	newLeafNode(otherlv_6, grammarAccess.getStatemachineAccess().getEventsKeyword_5());
+                
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:226:1: ( (lv_events_7_0= ruleEvent ) )*
+            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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:227:1: (lv_events_7_0= ruleEvent )
+            	    {
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:227:1: (lv_events_7_0= ruleEvent )
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:228:3: lv_events_7_0= ruleEvent
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getStatemachineAccess().getEventsEventParserRuleCall_6_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleEvent_in_ruleStatemachine410);
+            	    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 loop5;
+                }
+            } while (true);
+
+            otherlv_8=(Token)match(input,17,FOLLOW_17_in_ruleStatemachine423); 
+
+                	newLeafNode(otherlv_8, grammarAccess.getStatemachineAccess().getSemicolonKeyword_7());
+                
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:248:1: ( (lv_states_9_0= ruleState ) )*
+            loop6:
+            do {
+                int alt6=2;
+                int LA6_0 = input.LA(1);
+
+                if ( (LA6_0==12||(LA6_0>=20 && LA6_0<=21)) ) {
+                    alt6=1;
+                }
+
+
+                switch (alt6) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:249:1: (lv_states_9_0= ruleState )
+            	    {
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:249:1: (lv_states_9_0= ruleState )
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:250:3: lv_states_9_0= ruleState
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getStatemachineAccess().getStatesStateParserRuleCall_8_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleState_in_ruleStatemachine444);
+            	    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 loop6;
+                }
+            } while (true);
+
+            otherlv_10=(Token)match(input,18,FOLLOW_18_in_ruleStatemachine457); 
+
+                	newLeafNode(otherlv_10, grammarAccess.getStatemachineAccess().getRightCurlyBracketKeyword_9());
+                
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:270:1: (otherlv_11= 'debug' ( (lv_dbgName_12_0= RULE_ID ) ) )?
+            int alt7=2;
+            int LA7_0 = input.LA(1);
+
+            if ( (LA7_0==19) ) {
+                alt7=1;
+            }
+            switch (alt7) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:270:3: otherlv_11= 'debug' ( (lv_dbgName_12_0= RULE_ID ) )
+                    {
+                    otherlv_11=(Token)match(input,19,FOLLOW_19_in_ruleStatemachine470); 
+
+                        	newLeafNode(otherlv_11, grammarAccess.getStatemachineAccess().getDebugKeyword_10_0());
+                        
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:274:1: ( (lv_dbgName_12_0= RULE_ID ) )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:275:1: (lv_dbgName_12_0= RULE_ID )
+                    {
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:275:1: (lv_dbgName_12_0= RULE_ID )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:276:3: lv_dbgName_12_0= RULE_ID
+                    {
+                    lv_dbgName_12_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleStatemachine487); 
+
+                    			newLeafNode(lv_dbgName_12_0, grammarAccess.getStatemachineAccess().getDbgNameIDTerminalRuleCall_10_1_0()); 
+                    		
+
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getStatemachineRule());
+                    	        }
+                           		setWithLastConsumed(
+                           			current, 
+                           			"dbgName",
+                            		lv_dbgName_12_0, 
+                            		"ID");
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleStatemachine"
+
+
+    // $ANTLR start "entryRuleEvent"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:300: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:301:2: (iv_ruleEvent= ruleEvent EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:302:2: iv_ruleEvent= ruleEvent EOF
+            {
+             newCompositeNode(grammarAccess.getEventRule()); 
+            pushFollow(FOLLOW_ruleEvent_in_entryRuleEvent530);
+            iv_ruleEvent=ruleEvent();
+
+            state._fsp--;
+
+             current =iv_ruleEvent; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleEvent540); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleEvent"
+
+
+    // $ANTLR start "ruleEvent"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:309: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:312:28: ( ( (lv_name_0_0= RULE_ID ) ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:313:1: ( (lv_name_0_0= RULE_ID ) )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:313:1: ( (lv_name_0_0= RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:314:1: (lv_name_0_0= RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:314:1: (lv_name_0_0= RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:315:3: lv_name_0_0= RULE_ID
+            {
+            lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleEvent581); 
+
+            			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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:339: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:340:2: (iv_ruleState= ruleState EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:341:2: iv_ruleState= ruleState EOF
+            {
+             newCompositeNode(grammarAccess.getStateRule()); 
+            pushFollow(FOLLOW_ruleState_in_entryRuleState621);
+            iv_ruleState=ruleState();
+
+            state._fsp--;
+
+             current =iv_ruleState; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleState631); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleState"
+
+
+    // $ANTLR start "ruleState"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:348: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:351:28: ( (this_SimpleState_0= ruleSimpleState | this_CompoundState_1= ruleCompoundState ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:352:1: (this_SimpleState_0= ruleSimpleState | this_CompoundState_1= ruleCompoundState )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:352:1: (this_SimpleState_0= ruleSimpleState | this_CompoundState_1= ruleCompoundState )
+            int alt8=2;
+            int LA8_0 = input.LA(1);
+
+            if ( (LA8_0==12||LA8_0==20) ) {
+                alt8=1;
+            }
+            else if ( (LA8_0==21) ) {
+                alt8=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 8, 0, input);
+
+                throw nvae;
+            }
+            switch (alt8) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:353:5: this_SimpleState_0= ruleSimpleState
+                    {
+                     
+                            newCompositeNode(grammarAccess.getStateAccess().getSimpleStateParserRuleCall_0()); 
+                        
+                    pushFollow(FOLLOW_ruleSimpleState_in_ruleState678);
+                    this_SimpleState_0=ruleSimpleState();
+
+                    state._fsp--;
+
+                     
+                            current = this_SimpleState_0; 
+                            afterParserOrEnumRuleCall();
+                        
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:363:5: this_CompoundState_1= ruleCompoundState
+                    {
+                     
+                            newCompositeNode(grammarAccess.getStateAccess().getCompoundStateParserRuleCall_1()); 
+                        
+                    pushFollow(FOLLOW_ruleCompoundState_in_ruleState705);
+                    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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:379: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:380:2: (iv_ruleSimpleState= ruleSimpleState EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:381:2: iv_ruleSimpleState= ruleSimpleState EOF
+            {
+             newCompositeNode(grammarAccess.getSimpleStateRule()); 
+            pushFollow(FOLLOW_ruleSimpleState_in_entryRuleSimpleState740);
+            iv_ruleSimpleState=ruleSimpleState();
+
+            state._fsp--;
+
+             current =iv_ruleSimpleState; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleSimpleState750); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleSimpleState"
+
+
+    // $ANTLR start "ruleSimpleState"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:388: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= '}' (otherlv_8= 'debug' ( (lv_dbgName_9_0= RULE_ID ) ) )? ) ;
+    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;
+        Token otherlv_8=null;
+        Token lv_dbgName_9_0=null;
+        EObject lv_transitions_6_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:391: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= '}' (otherlv_8= 'debug' ( (lv_dbgName_9_0= RULE_ID ) ) )? ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:392: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= '}' (otherlv_8= 'debug' ( (lv_dbgName_9_0= RULE_ID ) ) )? )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:392: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= '}' (otherlv_8= 'debug' ( (lv_dbgName_9_0= RULE_ID ) ) )? )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:392: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= '}' (otherlv_8= 'debug' ( (lv_dbgName_9_0= RULE_ID ) ) )?
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:392:2: ( (lv_initial_0_0= 'initial' ) )?
+            int alt9=2;
+            int LA9_0 = input.LA(1);
+
+            if ( (LA9_0==12) ) {
+                alt9=1;
+            }
+            switch (alt9) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:393:1: (lv_initial_0_0= 'initial' )
+                    {
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:393:1: (lv_initial_0_0= 'initial' )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:394:3: lv_initial_0_0= 'initial'
+                    {
+                    lv_initial_0_0=(Token)match(input,12,FOLLOW_12_in_ruleSimpleState793); 
+
+                            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,20,FOLLOW_20_in_ruleSimpleState819); 
+
+                	newLeafNode(otherlv_1, grammarAccess.getSimpleStateAccess().getStateKeyword_1());
+                
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:411:1: ( (lv_name_2_0= RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:412:1: (lv_name_2_0= RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:412:1: (lv_name_2_0= RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:413:3: lv_name_2_0= RULE_ID
+            {
+            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleSimpleState836); 
+
+            			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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:429:2: (otherlv_3= 'value' ( (lv_value_4_0= RULE_INT ) ) )?
+            int alt10=2;
+            int LA10_0 = input.LA(1);
+
+            if ( (LA10_0==14) ) {
+                alt10=1;
+            }
+            switch (alt10) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:429:4: otherlv_3= 'value' ( (lv_value_4_0= RULE_INT ) )
+                    {
+                    otherlv_3=(Token)match(input,14,FOLLOW_14_in_ruleSimpleState854); 
+
+                        	newLeafNode(otherlv_3, grammarAccess.getSimpleStateAccess().getValueKeyword_3_0());
+                        
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:433:1: ( (lv_value_4_0= RULE_INT ) )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:434:1: (lv_value_4_0= RULE_INT )
+                    {
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:434:1: (lv_value_4_0= RULE_INT )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:435:3: lv_value_4_0= RULE_INT
+                    {
+                    lv_value_4_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleSimpleState871); 
+
+                    			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_ruleSimpleState890); 
+
+                	newLeafNode(otherlv_5, grammarAccess.getSimpleStateAccess().getLeftCurlyBracketKeyword_4());
+                
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:455:1: ( (lv_transitions_6_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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:456:1: (lv_transitions_6_0= ruleTransition )
+            	    {
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:456:1: (lv_transitions_6_0= ruleTransition )
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:457:3: lv_transitions_6_0= ruleTransition
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getSimpleStateAccess().getTransitionsTransitionParserRuleCall_5_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleTransition_in_ruleSimpleState911);
+            	    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 loop11;
+                }
+            } while (true);
+
+            otherlv_7=(Token)match(input,18,FOLLOW_18_in_ruleSimpleState924); 
+
+                	newLeafNode(otherlv_7, grammarAccess.getSimpleStateAccess().getRightCurlyBracketKeyword_6());
+                
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:477:1: (otherlv_8= 'debug' ( (lv_dbgName_9_0= RULE_ID ) ) )?
+            int alt12=2;
+            int LA12_0 = input.LA(1);
+
+            if ( (LA12_0==19) ) {
+                alt12=1;
+            }
+            switch (alt12) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:477:3: otherlv_8= 'debug' ( (lv_dbgName_9_0= RULE_ID ) )
+                    {
+                    otherlv_8=(Token)match(input,19,FOLLOW_19_in_ruleSimpleState937); 
+
+                        	newLeafNode(otherlv_8, grammarAccess.getSimpleStateAccess().getDebugKeyword_7_0());
+                        
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:481:1: ( (lv_dbgName_9_0= RULE_ID ) )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:482:1: (lv_dbgName_9_0= RULE_ID )
+                    {
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:482:1: (lv_dbgName_9_0= RULE_ID )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:483:3: lv_dbgName_9_0= RULE_ID
+                    {
+                    lv_dbgName_9_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleSimpleState954); 
+
+                    			newLeafNode(lv_dbgName_9_0, grammarAccess.getSimpleStateAccess().getDbgNameIDTerminalRuleCall_7_1_0()); 
+                    		
+
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getSimpleStateRule());
+                    	        }
+                           		setWithLastConsumed(
+                           			current, 
+                           			"dbgName",
+                            		lv_dbgName_9_0, 
+                            		"ID");
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleSimpleState"
+
+
+    // $ANTLR start "entryRuleCompoundState"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:507: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:508:2: (iv_ruleCompoundState= ruleCompoundState EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:509:2: iv_ruleCompoundState= ruleCompoundState EOF
+            {
+             newCompositeNode(grammarAccess.getCompoundStateRule()); 
+            pushFollow(FOLLOW_ruleCompoundState_in_entryRuleCompoundState997);
+            iv_ruleCompoundState=ruleCompoundState();
+
+            state._fsp--;
+
+             current =iv_ruleCompoundState; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleCompoundState1007); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleCompoundState"
+
+
+    // $ANTLR start "ruleCompoundState"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:516: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= '}' (otherlv_9= 'debug' ( (lv_dbgName_10_0= RULE_ID ) ) )? ) ;
+    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;
+        Token otherlv_9=null;
+        Token lv_dbgName_10_0=null;
+        EObject lv_transitions_7_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:519: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= '}' (otherlv_9= 'debug' ( (lv_dbgName_10_0= RULE_ID ) ) )? ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:520: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= '}' (otherlv_9= 'debug' ( (lv_dbgName_10_0= RULE_ID ) ) )? )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:520: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= '}' (otherlv_9= 'debug' ( (lv_dbgName_10_0= RULE_ID ) ) )? )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:520: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_9= 'debug' ( (lv_dbgName_10_0= RULE_ID ) ) )?
+            {
+            otherlv_0=(Token)match(input,21,FOLLOW_21_in_ruleCompoundState1044); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getCompoundStateAccess().getCompoundKeyword_0());
+                
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:524:1: ( (lv_initial_1_0= 'initial' ) )?
+            int alt13=2;
+            int LA13_0 = input.LA(1);
+
+            if ( (LA13_0==12) ) {
+                alt13=1;
+            }
+            switch (alt13) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:525:1: (lv_initial_1_0= 'initial' )
+                    {
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:525:1: (lv_initial_1_0= 'initial' )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:526:3: lv_initial_1_0= 'initial'
+                    {
+                    lv_initial_1_0=(Token)match(input,12,FOLLOW_12_in_ruleCompoundState1062); 
+
+                            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,20,FOLLOW_20_in_ruleCompoundState1088); 
+
+                	newLeafNode(otherlv_2, grammarAccess.getCompoundStateAccess().getStateKeyword_2());
+                
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:543:1: ( (lv_name_3_0= RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:544:1: (lv_name_3_0= RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:544:1: (lv_name_3_0= RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:545:3: lv_name_3_0= RULE_ID
+            {
+            lv_name_3_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleCompoundState1105); 
+
+            			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,22,FOLLOW_22_in_ruleCompoundState1122); 
+
+                	newLeafNode(otherlv_4, grammarAccess.getCompoundStateAccess().getMachineKeyword_4());
+                
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:565:1: ( (otherlv_5= RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:566:1: (otherlv_5= RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:566:1: (otherlv_5= RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:567:3: otherlv_5= RULE_ID
+            {
+
+            			if (current==null) {
+            	            current = createModelElement(grammarAccess.getCompoundStateRule());
+            	        }
+                    
+            otherlv_5=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleCompoundState1142); 
+
+            		newLeafNode(otherlv_5, grammarAccess.getCompoundStateAccess().getMachineStatemachineCrossReference_5_0()); 
+            	
+
+            }
+
+
+            }
+
+            otherlv_6=(Token)match(input,15,FOLLOW_15_in_ruleCompoundState1154); 
+
+                	newLeafNode(otherlv_6, grammarAccess.getCompoundStateAccess().getLeftCurlyBracketKeyword_6());
+                
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:582:1: ( (lv_transitions_7_0= ruleTransition ) )*
+            loop14:
+            do {
+                int alt14=2;
+                int LA14_0 = input.LA(1);
+
+                if ( (LA14_0==RULE_ID) ) {
+                    alt14=1;
+                }
+
+
+                switch (alt14) {
+            	case 1 :
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:583:1: (lv_transitions_7_0= ruleTransition )
+            	    {
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:583:1: (lv_transitions_7_0= ruleTransition )
+            	    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:584:3: lv_transitions_7_0= ruleTransition
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getCompoundStateAccess().getTransitionsTransitionParserRuleCall_7_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleTransition_in_ruleCompoundState1175);
+            	    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 loop14;
+                }
+            } while (true);
+
+            otherlv_8=(Token)match(input,18,FOLLOW_18_in_ruleCompoundState1188); 
+
+                	newLeafNode(otherlv_8, grammarAccess.getCompoundStateAccess().getRightCurlyBracketKeyword_8());
+                
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:604:1: (otherlv_9= 'debug' ( (lv_dbgName_10_0= RULE_ID ) ) )?
+            int alt15=2;
+            int LA15_0 = input.LA(1);
+
+            if ( (LA15_0==19) ) {
+                alt15=1;
+            }
+            switch (alt15) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:604:3: otherlv_9= 'debug' ( (lv_dbgName_10_0= RULE_ID ) )
+                    {
+                    otherlv_9=(Token)match(input,19,FOLLOW_19_in_ruleCompoundState1201); 
+
+                        	newLeafNode(otherlv_9, grammarAccess.getCompoundStateAccess().getDebugKeyword_9_0());
+                        
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:608:1: ( (lv_dbgName_10_0= RULE_ID ) )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:609:1: (lv_dbgName_10_0= RULE_ID )
+                    {
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:609:1: (lv_dbgName_10_0= RULE_ID )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:610:3: lv_dbgName_10_0= RULE_ID
+                    {
+                    lv_dbgName_10_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleCompoundState1218); 
+
+                    			newLeafNode(lv_dbgName_10_0, grammarAccess.getCompoundStateAccess().getDbgNameIDTerminalRuleCall_9_1_0()); 
+                    		
+
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getCompoundStateRule());
+                    	        }
+                           		setWithLastConsumed(
+                           			current, 
+                           			"dbgName",
+                            		lv_dbgName_10_0, 
+                            		"ID");
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleCompoundState"
+
+
+    // $ANTLR start "entryRuleTransition"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:634: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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:635:2: (iv_ruleTransition= ruleTransition EOF )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:636:2: iv_ruleTransition= ruleTransition EOF
+            {
+             newCompositeNode(grammarAccess.getTransitionRule()); 
+            pushFollow(FOLLOW_ruleTransition_in_entryRuleTransition1261);
+            iv_ruleTransition=ruleTransition();
+
+            state._fsp--;
+
+             current =iv_ruleTransition; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleTransition1271); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleTransition"
+
+
+    // $ANTLR start "ruleTransition"
+    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:643:1: ruleTransition returns [EObject current=null] : ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '=>' ( (otherlv_2= RULE_ID ) ) (otherlv_3= 'debug' ( (lv_dbgName_4_0= RULE_ID ) ) )? ) ;
+    public final EObject ruleTransition() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_1=null;
+        Token otherlv_2=null;
+        Token otherlv_3=null;
+        Token lv_dbgName_4_0=null;
+
+         enterRule(); 
+            
+        try {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:646:28: ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '=>' ( (otherlv_2= RULE_ID ) ) (otherlv_3= 'debug' ( (lv_dbgName_4_0= RULE_ID ) ) )? ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:647:1: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '=>' ( (otherlv_2= RULE_ID ) ) (otherlv_3= 'debug' ( (lv_dbgName_4_0= RULE_ID ) ) )? )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:647:1: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '=>' ( (otherlv_2= RULE_ID ) ) (otherlv_3= 'debug' ( (lv_dbgName_4_0= RULE_ID ) ) )? )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:647:2: ( (otherlv_0= RULE_ID ) ) otherlv_1= '=>' ( (otherlv_2= RULE_ID ) ) (otherlv_3= 'debug' ( (lv_dbgName_4_0= RULE_ID ) ) )?
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:647:2: ( (otherlv_0= RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:648:1: (otherlv_0= RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:648:1: (otherlv_0= RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:649:3: otherlv_0= RULE_ID
+            {
+
+            			if (current==null) {
+            	            current = createModelElement(grammarAccess.getTransitionRule());
+            	        }
+                    
+            otherlv_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleTransition1316); 
+
+            		newLeafNode(otherlv_0, grammarAccess.getTransitionAccess().getEventEventCrossReference_0_0()); 
+            	
+
+            }
+
+
+            }
+
+            otherlv_1=(Token)match(input,23,FOLLOW_23_in_ruleTransition1328); 
+
+                	newLeafNode(otherlv_1, grammarAccess.getTransitionAccess().getEqualsSignGreaterThanSignKeyword_1());
+                
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:664:1: ( (otherlv_2= RULE_ID ) )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:665:1: (otherlv_2= RULE_ID )
+            {
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:665:1: (otherlv_2= RULE_ID )
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:666:3: otherlv_2= RULE_ID
+            {
+
+            			if (current==null) {
+            	            current = createModelElement(grammarAccess.getTransitionRule());
+            	        }
+                    
+            otherlv_2=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleTransition1348); 
+
+            		newLeafNode(otherlv_2, grammarAccess.getTransitionAccess().getStateStateCrossReference_2_0()); 
+            	
+
+            }
+
+
+            }
+
+            // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:677:2: (otherlv_3= 'debug' ( (lv_dbgName_4_0= RULE_ID ) ) )?
+            int alt16=2;
+            int LA16_0 = input.LA(1);
+
+            if ( (LA16_0==19) ) {
+                alt16=1;
+            }
+            switch (alt16) {
+                case 1 :
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:677:4: otherlv_3= 'debug' ( (lv_dbgName_4_0= RULE_ID ) )
+                    {
+                    otherlv_3=(Token)match(input,19,FOLLOW_19_in_ruleTransition1361); 
+
+                        	newLeafNode(otherlv_3, grammarAccess.getTransitionAccess().getDebugKeyword_3_0());
+                        
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:681:1: ( (lv_dbgName_4_0= RULE_ID ) )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:682:1: (lv_dbgName_4_0= RULE_ID )
+                    {
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:682:1: (lv_dbgName_4_0= RULE_ID )
+                    // ../org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/parser/antlr/internal/InternalStates.g:683:3: lv_dbgName_4_0= RULE_ID
+                    {
+                    lv_dbgName_4_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleTransition1378); 
+
+                    			newLeafNode(lv_dbgName_4_0, grammarAccess.getTransitionAccess().getDbgNameIDTerminalRuleCall_3_1_0()); 
+                    		
+
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getTransitionRule());
+                    	        }
+                           		setWithLastConsumed(
+                           			current, 
+                           			"dbgName",
+                            		lv_dbgName_4_0, 
+                            		"ID");
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             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[]{0x0000000000000030L});
+    public static final BitSet FOLLOW_RULE_STRING_in_ruleModule141 = new BitSet(new long[]{0x0000000000003002L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleModule161 = new BitSet(new long[]{0x0000000000003002L});
+    public static final BitSet FOLLOW_ruleStatemachine_in_ruleModule190 = new BitSet(new long[]{0x0000000000003002L});
+    public static final BitSet FOLLOW_ruleStatemachine_in_entryRuleStatemachine227 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleStatemachine237 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_12_in_ruleStatemachine280 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_13_in_ruleStatemachine306 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleStatemachine323 = new BitSet(new long[]{0x000000000000C000L});
+    public static final BitSet FOLLOW_14_in_ruleStatemachine341 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_RULE_INT_in_ruleStatemachine358 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_15_in_ruleStatemachine377 = new BitSet(new long[]{0x0000000000010000L});
+    public static final BitSet FOLLOW_16_in_ruleStatemachine389 = new BitSet(new long[]{0x0000000000020020L});
+    public static final BitSet FOLLOW_ruleEvent_in_ruleStatemachine410 = new BitSet(new long[]{0x0000000000020020L});
+    public static final BitSet FOLLOW_17_in_ruleStatemachine423 = new BitSet(new long[]{0x0000000000341000L});
+    public static final BitSet FOLLOW_ruleState_in_ruleStatemachine444 = new BitSet(new long[]{0x0000000000341000L});
+    public static final BitSet FOLLOW_18_in_ruleStatemachine457 = new BitSet(new long[]{0x0000000000080002L});
+    public static final BitSet FOLLOW_19_in_ruleStatemachine470 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleStatemachine487 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleEvent_in_entryRuleEvent530 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleEvent540 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleEvent581 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleState_in_entryRuleState621 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleState631 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSimpleState_in_ruleState678 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleCompoundState_in_ruleState705 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSimpleState_in_entryRuleSimpleState740 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleSimpleState750 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_12_in_ruleSimpleState793 = new BitSet(new long[]{0x0000000000100000L});
+    public static final BitSet FOLLOW_20_in_ruleSimpleState819 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleSimpleState836 = new BitSet(new long[]{0x000000000000C000L});
+    public static final BitSet FOLLOW_14_in_ruleSimpleState854 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_RULE_INT_in_ruleSimpleState871 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_15_in_ruleSimpleState890 = new BitSet(new long[]{0x0000000000040020L});
+    public static final BitSet FOLLOW_ruleTransition_in_ruleSimpleState911 = new BitSet(new long[]{0x0000000000040020L});
+    public static final BitSet FOLLOW_18_in_ruleSimpleState924 = new BitSet(new long[]{0x0000000000080002L});
+    public static final BitSet FOLLOW_19_in_ruleSimpleState937 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleSimpleState954 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleCompoundState_in_entryRuleCompoundState997 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleCompoundState1007 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_21_in_ruleCompoundState1044 = new BitSet(new long[]{0x0000000000101000L});
+    public static final BitSet FOLLOW_12_in_ruleCompoundState1062 = new BitSet(new long[]{0x0000000000100000L});
+    public static final BitSet FOLLOW_20_in_ruleCompoundState1088 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleCompoundState1105 = new BitSet(new long[]{0x0000000000400000L});
+    public static final BitSet FOLLOW_22_in_ruleCompoundState1122 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleCompoundState1142 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_15_in_ruleCompoundState1154 = new BitSet(new long[]{0x0000000000040020L});
+    public static final BitSet FOLLOW_ruleTransition_in_ruleCompoundState1175 = new BitSet(new long[]{0x0000000000040020L});
+    public static final BitSet FOLLOW_18_in_ruleCompoundState1188 = new BitSet(new long[]{0x0000000000080002L});
+    public static final BitSet FOLLOW_19_in_ruleCompoundState1201 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleCompoundState1218 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleTransition_in_entryRuleTransition1261 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleTransition1271 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleTransition1316 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_23_in_ruleTransition1328 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleTransition1348 = new BitSet(new long[]{0x0000000000080002L});
+    public static final BitSet FOLLOW_19_in_ruleTransition1361 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleTransition1378 = new BitSet(new long[]{0x0000000000000002L});
+
+}
\ No newline at end of file
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/services/StatesGrammarAccess.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/services/StatesGrammarAccess.java
new file mode 100644
index 0000000..29fae42
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/services/StatesGrammarAccess.java
@@ -0,0 +1,560 @@
+/*
+* 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 StatesGrammarAccess 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 Alternatives cNameAlternatives_1_0 = (Alternatives)cNameAssignment_1.eContents().get(0);
+		private final RuleCall cNameSTRINGTerminalRuleCall_1_0_0 = (RuleCall)cNameAlternatives_1_0.eContents().get(0);
+		private final RuleCall cNameIDTerminalRuleCall_1_0_1 = (RuleCall)cNameAlternatives_1_0.eContents().get(1);
+		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 | ID) machines+=Statemachine*;
+		public ParserRule getRule() { return rule; }
+
+		//"module" name=(STRING | ID) machines+=Statemachine*
+		public Group getGroup() { return cGroup; }
+
+		//"module"
+		public Keyword getModuleKeyword_0() { return cModuleKeyword_0; }
+
+		//name=(STRING | ID)
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+
+		//STRING | ID
+		public Alternatives getNameAlternatives_1_0() { return cNameAlternatives_1_0; }
+
+		//STRING
+		public RuleCall getNameSTRINGTerminalRuleCall_1_0_0() { return cNameSTRINGTerminalRuleCall_1_0_0; }
+
+		//ID
+		public RuleCall getNameIDTerminalRuleCall_1_0_1() { return cNameIDTerminalRuleCall_1_0_1; }
+
+		//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);
+		private final Group cGroup_10 = (Group)cGroup.eContents().get(10);
+		private final Keyword cDebugKeyword_10_0 = (Keyword)cGroup_10.eContents().get(0);
+		private final Assignment cDbgNameAssignment_10_1 = (Assignment)cGroup_10.eContents().get(1);
+		private final RuleCall cDbgNameIDTerminalRuleCall_10_1_0 = (RuleCall)cDbgNameAssignment_10_1.eContents().get(0);
+		
+		//Statemachine:
+		//	initial?="initial"? "statemachine" name=ID ("value" value=INT)? "{" "events" events+=Event* ";" states+=State* "}"
+		//	("debug" dbgName=ID)?;
+		public ParserRule getRule() { return rule; }
+
+		//initial?="initial"? "statemachine" name=ID ("value" value=INT)? "{" "events" events+=Event* ";" states+=State* "}"
+		//("debug" dbgName=ID)?
+		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; }
+
+		//("debug" dbgName=ID)?
+		public Group getGroup_10() { return cGroup_10; }
+
+		//"debug"
+		public Keyword getDebugKeyword_10_0() { return cDebugKeyword_10_0; }
+
+		//dbgName=ID
+		public Assignment getDbgNameAssignment_10_1() { return cDbgNameAssignment_10_1; }
+
+		//ID
+		public RuleCall getDbgNameIDTerminalRuleCall_10_1_0() { return cDbgNameIDTerminalRuleCall_10_1_0; }
+	}
+
+	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);
+		private final Group cGroup_7 = (Group)cGroup.eContents().get(7);
+		private final Keyword cDebugKeyword_7_0 = (Keyword)cGroup_7.eContents().get(0);
+		private final Assignment cDbgNameAssignment_7_1 = (Assignment)cGroup_7.eContents().get(1);
+		private final RuleCall cDbgNameIDTerminalRuleCall_7_1_0 = (RuleCall)cDbgNameAssignment_7_1.eContents().get(0);
+		
+		//SimpleState:
+		//	initial?="initial"? "state" name=ID ("value" value=INT)? "{" transitions+=Transition* "}" ("debug" dbgName=ID)?;
+		public ParserRule getRule() { return rule; }
+
+		//initial?="initial"? "state" name=ID ("value" value=INT)? "{" transitions+=Transition* "}" ("debug" dbgName=ID)?
+		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; }
+
+		//("debug" dbgName=ID)?
+		public Group getGroup_7() { return cGroup_7; }
+
+		//"debug"
+		public Keyword getDebugKeyword_7_0() { return cDebugKeyword_7_0; }
+
+		//dbgName=ID
+		public Assignment getDbgNameAssignment_7_1() { return cDbgNameAssignment_7_1; }
+
+		//ID
+		public RuleCall getDbgNameIDTerminalRuleCall_7_1_0() { return cDbgNameIDTerminalRuleCall_7_1_0; }
+	}
+
+	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);
+		private final Group cGroup_9 = (Group)cGroup.eContents().get(9);
+		private final Keyword cDebugKeyword_9_0 = (Keyword)cGroup_9.eContents().get(0);
+		private final Assignment cDbgNameAssignment_9_1 = (Assignment)cGroup_9.eContents().get(1);
+		private final RuleCall cDbgNameIDTerminalRuleCall_9_1_0 = (RuleCall)cDbgNameAssignment_9_1.eContents().get(0);
+		
+		//CompoundState:
+		//	"compound" initial?="initial"? "state" name=ID "machine" machine=[Statemachine] "{" transitions+=Transition* "}"
+		//	("debug" dbgName=ID)?;
+		public ParserRule getRule() { return rule; }
+
+		//"compound" initial?="initial"? "state" name=ID "machine" machine=[Statemachine] "{" transitions+=Transition* "}"
+		//("debug" dbgName=ID)?
+		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; }
+
+		//("debug" dbgName=ID)?
+		public Group getGroup_9() { return cGroup_9; }
+
+		//"debug"
+		public Keyword getDebugKeyword_9_0() { return cDebugKeyword_9_0; }
+
+		//dbgName=ID
+		public Assignment getDbgNameAssignment_9_1() { return cDbgNameAssignment_9_1; }
+
+		//ID
+		public RuleCall getDbgNameIDTerminalRuleCall_9_1_0() { return cDbgNameIDTerminalRuleCall_9_1_0; }
+	}
+
+	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);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Keyword cDebugKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
+		private final Assignment cDbgNameAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
+		private final RuleCall cDbgNameIDTerminalRuleCall_3_1_0 = (RuleCall)cDbgNameAssignment_3_1.eContents().get(0);
+		
+		//Transition:
+		//	event=[Event] "=>" state=[State] ("debug" dbgName=ID)?;
+		public ParserRule getRule() { return rule; }
+
+		//event=[Event] "=>" state=[State] ("debug" dbgName=ID)?
+		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; }
+
+		//("debug" dbgName=ID)?
+		public Group getGroup_3() { return cGroup_3; }
+
+		//"debug"
+		public Keyword getDebugKeyword_3_0() { return cDebugKeyword_3_0; }
+
+		//dbgName=ID
+		public Assignment getDbgNameAssignment_3_1() { return cDbgNameAssignment_3_1; }
+
+		//ID
+		public RuleCall getDbgNameIDTerminalRuleCall_3_1_0() { return cDbgNameIDTerminalRuleCall_3_1_0; }
+	}
+	
+	
+	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 StatesGrammarAccess(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 | ID) 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* "}"
+	//	("debug" dbgName=ID)?;
+	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* "}" ("debug" dbgName=ID)?;
+	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* "}"
+	//	("debug" dbgName=ID)?;
+	public CompoundStateElements getCompoundStateAccess() {
+		return (pCompoundState != null) ? pCompoundState : (pCompoundState = new CompoundStateElements());
+	}
+	
+	public ParserRule getCompoundStateRule() {
+		return getCompoundStateAccess().getRule();
+	}
+
+	//Transition:
+	//	event=[Event] "=>" state=[State] ("debug" dbgName=ID)?;
+	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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/CompoundState.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/CompoundState.java
new file mode 100644
index 0000000..fdd8780
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/CompoundState.java
@@ -0,0 +1,54 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.states;
+
+
+/**
+ * <!-- 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.states.CompoundState#getMachine <em>Machine</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.StatesPackage#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.states.StatesPackage#getCompoundState_Machine()
+   * @model
+   * @generated
+   */
+  Statemachine getMachine();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/Event.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/Event.java
new file mode 100644
index 0000000..9f2319d
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/Event.java
@@ -0,0 +1,55 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.states;
+
+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.states.Event#getName <em>Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.StatesPackage#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.states.StatesPackage#getEvent_Name()
+   * @model
+   * @generated
+   */
+  String getName();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/Module.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/Module.java
new file mode 100644
index 0000000..bdfcdc6
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/Module.java
@@ -0,0 +1,74 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.states;
+
+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.states.Module#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.Module#getMachines <em>Machines</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.StatesPackage#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.states.StatesPackage#getModule_Name()
+   * @model
+   * @generated
+   */
+  String getName();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.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.states.StatesPackage#getModule_Machines()
+   * @model containment="true"
+   * @generated
+   */
+  EList<Statemachine> getMachines();
+
+} // Module
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/SimpleState.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/SimpleState.java
new file mode 100644
index 0000000..ec23adf
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/SimpleState.java
@@ -0,0 +1,54 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.states;
+
+
+/**
+ * <!-- 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.states.SimpleState#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.StatesPackage#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.states.StatesPackage#getSimpleState_Value()
+   * @model
+   * @generated
+   */
+  int getValue();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/State.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/State.java
new file mode 100644
index 0000000..a8e1ae6
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/State.java
@@ -0,0 +1,128 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.states;
+
+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.states.State#isInitial <em>Initial</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.State#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.State#getTransitions <em>Transitions</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.State#getDbgName <em>Dbg Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.StatesPackage#getState()
+ * @model
+ * @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.states.StatesPackage#getState_Initial()
+   * @model
+   * @generated
+   */
+  boolean isInitial();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.StatesPackage#getState_Name()
+   * @model
+   * @generated
+   */
+  String getName();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.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.states.StatesPackage#getState_Transitions()
+   * @model containment="true"
+   * @generated
+   */
+  EList<Transition> getTransitions();
+
+  /**
+   * Returns the value of the '<em><b>Dbg Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Dbg 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>Dbg Name</em>' attribute.
+   * @see #setDbgName(String)
+   * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.StatesPackage#getState_DbgName()
+   * @model
+   * @generated
+   */
+  String getDbgName();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.State#getDbgName <em>Dbg Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Dbg Name</em>' attribute.
+   * @see #getDbgName()
+   * @generated
+   */
+  void setDbgName(String value);
+
+} // State
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/Statemachine.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/Statemachine.java
new file mode 100644
index 0000000..50e9747
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/Statemachine.java
@@ -0,0 +1,172 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.states;
+
+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.states.Statemachine#isInitial <em>Initial</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.Statemachine#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.Statemachine#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.Statemachine#getEvents <em>Events</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.Statemachine#getStates <em>States</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.Statemachine#getDbgName <em>Dbg Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.StatesPackage#getStatemachine()
+ * @model
+ * @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.states.StatesPackage#getStatemachine_Initial()
+   * @model
+   * @generated
+   */
+  boolean isInitial();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.StatesPackage#getStatemachine_Name()
+   * @model
+   * @generated
+   */
+  String getName();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.StatesPackage#getStatemachine_Value()
+   * @model
+   * @generated
+   */
+  int getValue();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.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.states.StatesPackage#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.states.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.states.StatesPackage#getStatemachine_States()
+   * @model containment="true"
+   * @generated
+   */
+  EList<State> getStates();
+
+  /**
+   * Returns the value of the '<em><b>Dbg Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Dbg 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>Dbg Name</em>' attribute.
+   * @see #setDbgName(String)
+   * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.StatesPackage#getStatemachine_DbgName()
+   * @model
+   * @generated
+   */
+  String getDbgName();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.Statemachine#getDbgName <em>Dbg Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Dbg Name</em>' attribute.
+   * @see #getDbgName()
+   * @generated
+   */
+  void setDbgName(String value);
+
+} // Statemachine
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/StatesFactory.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/StatesFactory.java
new file mode 100644
index 0000000..5a0d978
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/StatesFactory.java
@@ -0,0 +1,101 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.states;
+
+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.states.StatesPackage
+ * @generated
+ */
+public interface StatesFactory extends EFactory
+{
+  /**
+   * The singleton instance of the factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  StatesFactory eINSTANCE = org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StatesFactoryImpl.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
+   */
+  StatesPackage getStatesPackage();
+
+} //StatesFactory
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/StatesPackage.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/StatesPackage.java
new file mode 100644
index 0000000..b8c11f3
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/StatesPackage.java
@@ -0,0 +1,938 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.states;
+
+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 enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.StatesFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface StatesPackage extends EPackage
+{
+  /**
+   * The package name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  String eNAME = "states";
+
+  /**
+   * The package namespace URI.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  String eNS_URI = "http://ocl.eclipse.org/tutorial/eclipsecon2011/States";
+
+  /**
+   * The package namespace name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  String eNS_PREFIX = "states";
+
+  /**
+   * The singleton instance of the package.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  StatesPackage eINSTANCE = org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StatesPackageImpl.init();
+
+  /**
+   * The meta object id for the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.ModuleImpl <em>Module</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.ModuleImpl
+   * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StatesPackageImpl#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 meta object id for the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StatemachineImpl <em>Statemachine</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StatemachineImpl
+   * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StatesPackageImpl#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 feature id for the '<em><b>Dbg Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int STATEMACHINE__DBG_NAME = 5;
+
+  /**
+   * The number of structural features of the '<em>Statemachine</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int STATEMACHINE_FEATURE_COUNT = 6;
+
+  /**
+   * The meta object id for the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.EventImpl <em>Event</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.EventImpl
+   * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StatesPackageImpl#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 meta object id for the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StateImpl <em>State</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StateImpl
+   * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StatesPackageImpl#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>Dbg Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int STATE__DBG_NAME = 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 meta object id for the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.SimpleStateImpl <em>Simple State</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.SimpleStateImpl
+   * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StatesPackageImpl#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>Dbg Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int SIMPLE_STATE__DBG_NAME = STATE__DBG_NAME;
+
+  /**
+   * 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 meta object id for the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.CompoundStateImpl <em>Compound State</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.CompoundStateImpl
+   * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StatesPackageImpl#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>Dbg Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int COMPOUND_STATE__DBG_NAME = STATE__DBG_NAME;
+
+  /**
+   * 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 meta object id for the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.TransitionImpl <em>Transition</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.TransitionImpl
+   * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StatesPackageImpl#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 feature id for the '<em><b>Dbg Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int TRANSITION__DBG_NAME = 2;
+
+  /**
+   * The number of structural features of the '<em>Transition</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int TRANSITION_FEATURE_COUNT = 3;
+
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.Module
+   * @generated
+   */
+  EClass getModule();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.Module#getName()
+   * @see #getModule()
+   * @generated
+   */
+  EAttribute getModule_Name();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.Module#getMachines()
+   * @see #getModule()
+   * @generated
+   */
+  EReference getModule_Machines();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.Statemachine
+   * @generated
+   */
+  EClass getStatemachine();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.Statemachine#isInitial()
+   * @see #getStatemachine()
+   * @generated
+   */
+  EAttribute getStatemachine_Initial();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.Statemachine#getName()
+   * @see #getStatemachine()
+   * @generated
+   */
+  EAttribute getStatemachine_Name();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.Statemachine#getValue()
+   * @see #getStatemachine()
+   * @generated
+   */
+  EAttribute getStatemachine_Value();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.Statemachine#getEvents()
+   * @see #getStatemachine()
+   * @generated
+   */
+  EReference getStatemachine_Events();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.Statemachine#getStates()
+   * @see #getStatemachine()
+   * @generated
+   */
+  EReference getStatemachine_States();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.Statemachine#getDbgName <em>Dbg Name</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Dbg Name</em>'.
+   * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.Statemachine#getDbgName()
+   * @see #getStatemachine()
+   * @generated
+   */
+  EAttribute getStatemachine_DbgName();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.Event
+   * @generated
+   */
+  EClass getEvent();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.Event#getName()
+   * @see #getEvent()
+   * @generated
+   */
+  EAttribute getEvent_Name();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.State
+   * @generated
+   */
+  EClass getState();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.State#isInitial()
+   * @see #getState()
+   * @generated
+   */
+  EAttribute getState_Initial();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.State#getName()
+   * @see #getState()
+   * @generated
+   */
+  EAttribute getState_Name();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.State#getTransitions()
+   * @see #getState()
+   * @generated
+   */
+  EReference getState_Transitions();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.State#getDbgName <em>Dbg Name</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Dbg Name</em>'.
+   * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.State#getDbgName()
+   * @see #getState()
+   * @generated
+   */
+  EAttribute getState_DbgName();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.SimpleState
+   * @generated
+   */
+  EClass getSimpleState();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.SimpleState#getValue()
+   * @see #getSimpleState()
+   * @generated
+   */
+  EAttribute getSimpleState_Value();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.CompoundState
+   * @generated
+   */
+  EClass getCompoundState();
+
+  /**
+   * Returns the meta object for the reference '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.CompoundState#getMachine()
+   * @see #getCompoundState()
+   * @generated
+   */
+  EReference getCompoundState_Machine();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.Transition
+   * @generated
+   */
+  EClass getTransition();
+
+  /**
+   * Returns the meta object for the reference '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.Transition#getEvent()
+   * @see #getTransition()
+   * @generated
+   */
+  EReference getTransition_Event();
+
+  /**
+   * Returns the meta object for the reference '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.Transition#getState()
+   * @see #getTransition()
+   * @generated
+   */
+  EReference getTransition_State();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.Transition#getDbgName <em>Dbg Name</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Dbg Name</em>'.
+   * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.Transition#getDbgName()
+   * @see #getTransition()
+   * @generated
+   */
+  EAttribute getTransition_DbgName();
+
+  /**
+   * 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
+   */
+  StatesFactory getStatesFactory();
+
+  /**
+   * <!-- 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 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.states.impl.ModuleImpl <em>Module</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.ModuleImpl
+     * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StatesPackageImpl#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.states.impl.StatemachineImpl <em>Statemachine</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StatemachineImpl
+     * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StatesPackageImpl#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 '<em><b>Dbg Name</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute STATEMACHINE__DBG_NAME = eINSTANCE.getStatemachine_DbgName();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.EventImpl <em>Event</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.EventImpl
+     * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StatesPackageImpl#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.states.impl.StateImpl <em>State</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StateImpl
+     * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StatesPackageImpl#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>Dbg Name</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute STATE__DBG_NAME = eINSTANCE.getState_DbgName();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.SimpleStateImpl <em>Simple State</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.SimpleStateImpl
+     * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StatesPackageImpl#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.states.impl.CompoundStateImpl <em>Compound State</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.CompoundStateImpl
+     * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StatesPackageImpl#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.states.impl.TransitionImpl <em>Transition</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.TransitionImpl
+     * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StatesPackageImpl#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();
+
+    /**
+     * The meta object literal for the '<em><b>Dbg Name</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute TRANSITION__DBG_NAME = eINSTANCE.getTransition_DbgName();
+
+  }
+
+} //StatesPackage
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/Transition.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/Transition.java
new file mode 100644
index 0000000..f208a06
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/Transition.java
@@ -0,0 +1,109 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.states;
+
+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.states.Transition#getEvent <em>Event</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.Transition#getState <em>State</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.Transition#getDbgName <em>Dbg Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.StatesPackage#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.states.StatesPackage#getTransition_Event()
+   * @model
+   * @generated
+   */
+  Event getEvent();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.StatesPackage#getTransition_State()
+   * @model
+   * @generated
+   */
+  State getState();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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);
+
+  /**
+   * Returns the value of the '<em><b>Dbg Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Dbg 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>Dbg Name</em>' attribute.
+   * @see #setDbgName(String)
+   * @see org.eclipse.ocl.tutorial.eclipsecon2011.states.StatesPackage#getTransition_DbgName()
+   * @model
+   * @generated
+   */
+  String getDbgName();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.Transition#getDbgName <em>Dbg Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Dbg Name</em>' attribute.
+   * @see #getDbgName()
+   * @generated
+   */
+  void setDbgName(String value);
+
+} // Transition
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/CompoundStateImpl.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/CompoundStateImpl.java
new file mode 100644
index 0000000..02fd71a
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/CompoundStateImpl.java
@@ -0,0 +1,192 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.CompoundState;
+import org.eclipse.ocl.tutorial.eclipsecon2011.states.Statemachine;
+import org.eclipse.ocl.tutorial.eclipsecon2011.states.StatesPackage;
+
+/**
+ * <!-- 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.states.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 StatesPackage.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, StatesPackage.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, StatesPackage.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 StatesPackage.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 StatesPackage.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 StatesPackage.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 StatesPackage.COMPOUND_STATE__MACHINE:
+        return machine != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated NOT
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuffer result = new StringBuffer();
+    result.append("CompoundState: ");
+    result.append(name);
+    return result.toString();
+  }
+
+} //CompoundStateImpl
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/EventImpl.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/EventImpl.java
new file mode 100644
index 0000000..02346d9
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/EventImpl.java
@@ -0,0 +1,180 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.Event;
+import org.eclipse.ocl.tutorial.eclipsecon2011.states.StatesPackage;
+
+/**
+ * <!-- 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.states.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 StatesPackage.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, StatesPackage.EVENT__NAME, oldName, name));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case StatesPackage.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 StatesPackage.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 StatesPackage.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 StatesPackage.EVENT__NAME:
+        return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated NOT
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuffer result = new StringBuffer();
+    result.append("Event: ");
+    result.append(name);
+    return result.toString();
+  }
+
+} //EventImpl
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/ModuleImpl.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/ModuleImpl.java
new file mode 100644
index 0000000..9954a73
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/ModuleImpl.java
@@ -0,0 +1,244 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.Module;
+import org.eclipse.ocl.tutorial.eclipsecon2011.states.Statemachine;
+import org.eclipse.ocl.tutorial.eclipsecon2011.states.StatesPackage;
+
+/**
+ * <!-- 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.states.impl.ModuleImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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 StatesPackage.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, StatesPackage.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, StatesPackage.MODULE__MACHINES);
+    }
+    return machines;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case StatesPackage.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 StatesPackage.MODULE__NAME:
+        return getName();
+      case StatesPackage.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 StatesPackage.MODULE__NAME:
+        setName((String)newValue);
+        return;
+      case StatesPackage.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 StatesPackage.MODULE__NAME:
+        setName(NAME_EDEFAULT);
+        return;
+      case StatesPackage.MODULE__MACHINES:
+        getMachines().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case StatesPackage.MODULE__NAME:
+        return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+      case StatesPackage.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.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/SimpleStateImpl.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/SimpleStateImpl.java
new file mode 100644
index 0000000..5112ada
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/SimpleStateImpl.java
@@ -0,0 +1,179 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.SimpleState;
+import org.eclipse.ocl.tutorial.eclipsecon2011.states.StatesPackage;
+
+/**
+ * <!-- 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.states.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 StatesPackage.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, StatesPackage.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 StatesPackage.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 StatesPackage.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 StatesPackage.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 StatesPackage.SIMPLE_STATE__VALUE:
+        return value != VALUE_EDEFAULT;
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated NOT
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuffer result = new StringBuffer();
+    result.append("SimpleState: ");
+    result.append(name);
+    return result.toString();
+  }
+
+} //SimpleStateImpl
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/StateImpl.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/StateImpl.java
new file mode 100644
index 0000000..e5532d5
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/StateImpl.java
@@ -0,0 +1,356 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.State;
+import org.eclipse.ocl.tutorial.eclipsecon2011.states.StatesPackage;
+import org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.impl.StateImpl#isInitial <em>Initial</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StateImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StateImpl#getTransitions <em>Transitions</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StateImpl#getDbgName <em>Dbg Name</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 default value of the '{@link #getDbgName() <em>Dbg Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getDbgName()
+   * @generated
+   * @ordered
+   */
+  protected static final String DBG_NAME_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getDbgName() <em>Dbg Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getDbgName()
+   * @generated
+   * @ordered
+   */
+  protected String dbgName = DBG_NAME_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected StateImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return StatesPackage.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, StatesPackage.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, StatesPackage.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, StatesPackage.STATE__TRANSITIONS);
+    }
+    return transitions;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getDbgName()
+  {
+    return dbgName;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setDbgName(String newDbgName)
+  {
+    String oldDbgName = dbgName;
+    dbgName = newDbgName;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, StatesPackage.STATE__DBG_NAME, oldDbgName, dbgName));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case StatesPackage.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 StatesPackage.STATE__INITIAL:
+        return isInitial();
+      case StatesPackage.STATE__NAME:
+        return getName();
+      case StatesPackage.STATE__TRANSITIONS:
+        return getTransitions();
+      case StatesPackage.STATE__DBG_NAME:
+        return getDbgName();
+    }
+    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 StatesPackage.STATE__INITIAL:
+        setInitial((Boolean)newValue);
+        return;
+      case StatesPackage.STATE__NAME:
+        setName((String)newValue);
+        return;
+      case StatesPackage.STATE__TRANSITIONS:
+        getTransitions().clear();
+        getTransitions().addAll((Collection<? extends Transition>)newValue);
+        return;
+      case StatesPackage.STATE__DBG_NAME:
+        setDbgName((String)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case StatesPackage.STATE__INITIAL:
+        setInitial(INITIAL_EDEFAULT);
+        return;
+      case StatesPackage.STATE__NAME:
+        setName(NAME_EDEFAULT);
+        return;
+      case StatesPackage.STATE__TRANSITIONS:
+        getTransitions().clear();
+        return;
+      case StatesPackage.STATE__DBG_NAME:
+        setDbgName(DBG_NAME_EDEFAULT);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case StatesPackage.STATE__INITIAL:
+        return initial != INITIAL_EDEFAULT;
+      case StatesPackage.STATE__NAME:
+        return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+      case StatesPackage.STATE__TRANSITIONS:
+        return transitions != null && !transitions.isEmpty();
+      case StatesPackage.STATE__DBG_NAME:
+        return DBG_NAME_EDEFAULT == null ? dbgName != null : !DBG_NAME_EDEFAULT.equals(dbgName);
+    }
+    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(", dbgName: ");
+    result.append(dbgName);
+    result.append(')');
+    return result.toString();
+  }
+
+} //StateImpl
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/StatemachineImpl.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/StatemachineImpl.java
new file mode 100644
index 0000000..72aca6f
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/StatemachineImpl.java
@@ -0,0 +1,451 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.Event;
+import org.eclipse.ocl.tutorial.eclipsecon2011.states.State;
+import org.eclipse.ocl.tutorial.eclipsecon2011.states.Statemachine;
+import org.eclipse.ocl.tutorial.eclipsecon2011.states.StatesPackage;
+
+/**
+ * <!-- 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.states.impl.StatemachineImpl#isInitial <em>Initial</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StatemachineImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StatemachineImpl#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StatemachineImpl#getEvents <em>Events</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StatemachineImpl#getStates <em>States</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.StatemachineImpl#getDbgName <em>Dbg Name</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;
+
+  /**
+   * The default value of the '{@link #getDbgName() <em>Dbg Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getDbgName()
+   * @generated
+   * @ordered
+   */
+  protected static final String DBG_NAME_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getDbgName() <em>Dbg Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getDbgName()
+   * @generated
+   * @ordered
+   */
+  protected String dbgName = DBG_NAME_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected StatemachineImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return StatesPackage.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, StatesPackage.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, StatesPackage.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, StatesPackage.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, StatesPackage.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, StatesPackage.STATEMACHINE__STATES);
+    }
+    return states;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getDbgName()
+  {
+    return dbgName;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setDbgName(String newDbgName)
+  {
+    String oldDbgName = dbgName;
+    dbgName = newDbgName;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, StatesPackage.STATEMACHINE__DBG_NAME, oldDbgName, dbgName));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case StatesPackage.STATEMACHINE__EVENTS:
+        return ((InternalEList<?>)getEvents()).basicRemove(otherEnd, msgs);
+      case StatesPackage.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 StatesPackage.STATEMACHINE__INITIAL:
+        return isInitial();
+      case StatesPackage.STATEMACHINE__NAME:
+        return getName();
+      case StatesPackage.STATEMACHINE__VALUE:
+        return getValue();
+      case StatesPackage.STATEMACHINE__EVENTS:
+        return getEvents();
+      case StatesPackage.STATEMACHINE__STATES:
+        return getStates();
+      case StatesPackage.STATEMACHINE__DBG_NAME:
+        return getDbgName();
+    }
+    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 StatesPackage.STATEMACHINE__INITIAL:
+        setInitial((Boolean)newValue);
+        return;
+      case StatesPackage.STATEMACHINE__NAME:
+        setName((String)newValue);
+        return;
+      case StatesPackage.STATEMACHINE__VALUE:
+        setValue((Integer)newValue);
+        return;
+      case StatesPackage.STATEMACHINE__EVENTS:
+        getEvents().clear();
+        getEvents().addAll((Collection<? extends Event>)newValue);
+        return;
+      case StatesPackage.STATEMACHINE__STATES:
+        getStates().clear();
+        getStates().addAll((Collection<? extends State>)newValue);
+        return;
+      case StatesPackage.STATEMACHINE__DBG_NAME:
+        setDbgName((String)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case StatesPackage.STATEMACHINE__INITIAL:
+        setInitial(INITIAL_EDEFAULT);
+        return;
+      case StatesPackage.STATEMACHINE__NAME:
+        setName(NAME_EDEFAULT);
+        return;
+      case StatesPackage.STATEMACHINE__VALUE:
+        setValue(VALUE_EDEFAULT);
+        return;
+      case StatesPackage.STATEMACHINE__EVENTS:
+        getEvents().clear();
+        return;
+      case StatesPackage.STATEMACHINE__STATES:
+        getStates().clear();
+        return;
+      case StatesPackage.STATEMACHINE__DBG_NAME:
+        setDbgName(DBG_NAME_EDEFAULT);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case StatesPackage.STATEMACHINE__INITIAL:
+        return initial != INITIAL_EDEFAULT;
+      case StatesPackage.STATEMACHINE__NAME:
+        return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+      case StatesPackage.STATEMACHINE__VALUE:
+        return value != VALUE_EDEFAULT;
+      case StatesPackage.STATEMACHINE__EVENTS:
+        return events != null && !events.isEmpty();
+      case StatesPackage.STATEMACHINE__STATES:
+        return states != null && !states.isEmpty();
+      case StatesPackage.STATEMACHINE__DBG_NAME:
+        return DBG_NAME_EDEFAULT == null ? dbgName != null : !DBG_NAME_EDEFAULT.equals(dbgName);
+    }
+    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(", dbgName: ");
+    result.append(dbgName);
+    result.append(')');
+    return result.toString();
+  }
+
+} //StatemachineImpl
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/StatesFactoryImpl.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/StatesFactoryImpl.java
new file mode 100644
index 0000000..fc5e8ca
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/StatesFactoryImpl.java
@@ -0,0 +1,182 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StatesFactoryImpl extends EFactoryImpl implements StatesFactory
+{
+  /**
+   * Creates the default factory implementation.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static StatesFactory init()
+  {
+    try
+    {
+      StatesFactory theStatesFactory = (StatesFactory)EPackage.Registry.INSTANCE.getEFactory("http://ocl.eclipse.org/tutorial/eclipsecon2011/States"); 
+      if (theStatesFactory != null)
+      {
+        return theStatesFactory;
+      }
+    }
+    catch (Exception exception)
+    {
+      EcorePlugin.INSTANCE.log(exception);
+    }
+    return new StatesFactoryImpl();
+  }
+
+  /**
+   * Creates an instance of the factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public StatesFactoryImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public EObject create(EClass eClass)
+  {
+    switch (eClass.getClassifierID())
+    {
+      case StatesPackage.MODULE: return createModule();
+      case StatesPackage.STATEMACHINE: return createStatemachine();
+      case StatesPackage.EVENT: return createEvent();
+      case StatesPackage.STATE: return createState();
+      case StatesPackage.SIMPLE_STATE: return createSimpleState();
+      case StatesPackage.COMPOUND_STATE: return createCompoundState();
+      case StatesPackage.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 StatesPackage getStatesPackage()
+  {
+    return (StatesPackage)getEPackage();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @deprecated
+   * @generated
+   */
+  @Deprecated
+  public static StatesPackage getPackage()
+  {
+    return StatesPackage.eINSTANCE;
+  }
+
+} //StatesFactoryImpl
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/StatesPackageImpl.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/StatesPackageImpl.java
new file mode 100644
index 0000000..639a2af
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/StatesPackageImpl.java
@@ -0,0 +1,528 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.states.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.impl.EPackageImpl;
+
+import org.eclipse.ocl.tutorial.eclipsecon2011.states.CompoundState;
+import org.eclipse.ocl.tutorial.eclipsecon2011.states.Event;
+import org.eclipse.ocl.tutorial.eclipsecon2011.states.Module;
+import org.eclipse.ocl.tutorial.eclipsecon2011.states.SimpleState;
+import org.eclipse.ocl.tutorial.eclipsecon2011.states.State;
+import org.eclipse.ocl.tutorial.eclipsecon2011.states.Statemachine;
+import org.eclipse.ocl.tutorial.eclipsecon2011.states.StatesFactory;
+import org.eclipse.ocl.tutorial.eclipsecon2011.states.StatesPackage;
+import org.eclipse.ocl.tutorial.eclipsecon2011.states.Transition;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StatesPackageImpl extends EPackageImpl implements StatesPackage
+{
+  /**
+   * <!-- 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.states.StatesPackage#eNS_URI
+   * @see #init()
+   * @generated
+   */
+  private StatesPackageImpl()
+  {
+    super(eNS_URI, StatesFactory.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 StatesPackage#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 StatesPackage init()
+  {
+    if (isInited) return (StatesPackage)EPackage.Registry.INSTANCE.getEPackage(StatesPackage.eNS_URI);
+
+    // Obtain or create and register package
+    StatesPackageImpl theStatesPackage = (StatesPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof StatesPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new StatesPackageImpl());
+
+    isInited = true;
+
+    // Create package meta-data objects
+    theStatesPackage.createPackageContents();
+
+    // Initialize created meta-data
+    theStatesPackage.initializePackageContents();
+
+    // Mark meta-data to indicate it can't be changed
+    theStatesPackage.freeze();
+
+  
+    // Update the registry and return the package
+    EPackage.Registry.INSTANCE.put(StatesPackage.eNS_URI, theStatesPackage);
+    return theStatesPackage;
+  }
+
+  /**
+   * <!-- 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 EAttribute getStatemachine_DbgName()
+  {
+    return (EAttribute)statemachineEClass.getEStructuralFeatures().get(5);
+  }
+
+  /**
+   * <!-- 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 EAttribute getState_DbgName()
+  {
+    return (EAttribute)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 EAttribute getTransition_DbgName()
+  {
+    return (EAttribute)transitionEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public StatesFactory getStatesFactory()
+  {
+    return (StatesFactory)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);
+    createEAttribute(statemachineEClass, STATEMACHINE__DBG_NAME);
+
+    eventEClass = createEClass(EVENT);
+    createEAttribute(eventEClass, EVENT__NAME);
+
+    stateEClass = createEClass(STATE);
+    createEAttribute(stateEClass, STATE__INITIAL);
+    createEAttribute(stateEClass, STATE__NAME);
+    createEReference(stateEClass, STATE__TRANSITIONS);
+    createEAttribute(stateEClass, STATE__DBG_NAME);
+
+    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);
+    createEAttribute(transitionEClass, TRANSITION__DBG_NAME);
+  }
+
+  /**
+   * <!-- 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 and features; add operations and 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);
+    initEAttribute(getStatemachine_DbgName(), ecorePackage.getEString(), "dbgName", null, 0, 1, Statemachine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, 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);
+    initEAttribute(getState_DbgName(), ecorePackage.getEString(), "dbgName", null, 0, 1, State.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, 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);
+    initEAttribute(getTransition_DbgName(), ecorePackage.getEString(), "dbgName", null, 0, 1, Transition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    // Create resource
+    createResource(eNS_URI);
+  }
+
+} //StatesPackageImpl
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/TransitionImpl.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/TransitionImpl.java
new file mode 100644
index 0000000..052b0e2
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/impl/TransitionImpl.java
@@ -0,0 +1,315 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.Event;
+import org.eclipse.ocl.tutorial.eclipsecon2011.states.State;
+import org.eclipse.ocl.tutorial.eclipsecon2011.states.StatesPackage;
+import org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.impl.TransitionImpl#getEvent <em>Event</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.TransitionImpl#getState <em>State</em>}</li>
+ *   <li>{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.impl.TransitionImpl#getDbgName <em>Dbg Name</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;
+
+  /**
+   * The default value of the '{@link #getDbgName() <em>Dbg Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getDbgName()
+   * @generated
+   * @ordered
+   */
+  protected static final String DBG_NAME_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getDbgName() <em>Dbg Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getDbgName()
+   * @generated
+   * @ordered
+   */
+  protected String dbgName = DBG_NAME_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected TransitionImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return StatesPackage.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, StatesPackage.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, StatesPackage.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, StatesPackage.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, StatesPackage.TRANSITION__STATE, oldState, state));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getDbgName()
+  {
+    return dbgName;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setDbgName(String newDbgName)
+  {
+    String oldDbgName = dbgName;
+    dbgName = newDbgName;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, StatesPackage.TRANSITION__DBG_NAME, oldDbgName, dbgName));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case StatesPackage.TRANSITION__EVENT:
+        if (resolve) return getEvent();
+        return basicGetEvent();
+      case StatesPackage.TRANSITION__STATE:
+        if (resolve) return getState();
+        return basicGetState();
+      case StatesPackage.TRANSITION__DBG_NAME:
+        return getDbgName();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case StatesPackage.TRANSITION__EVENT:
+        setEvent((Event)newValue);
+        return;
+      case StatesPackage.TRANSITION__STATE:
+        setState((State)newValue);
+        return;
+      case StatesPackage.TRANSITION__DBG_NAME:
+        setDbgName((String)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case StatesPackage.TRANSITION__EVENT:
+        setEvent((Event)null);
+        return;
+      case StatesPackage.TRANSITION__STATE:
+        setState((State)null);
+        return;
+      case StatesPackage.TRANSITION__DBG_NAME:
+        setDbgName(DBG_NAME_EDEFAULT);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case StatesPackage.TRANSITION__EVENT:
+        return event != null;
+      case StatesPackage.TRANSITION__STATE:
+        return state != null;
+      case StatesPackage.TRANSITION__DBG_NAME:
+        return DBG_NAME_EDEFAULT == null ? dbgName != null : !DBG_NAME_EDEFAULT.equals(dbgName);
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated NOT
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuffer result = new StringBuffer();
+    result.append("Transition: ");
+    result.append(event.getName());
+    result.append(" => ");
+    result.append(state.getName());
+    return result.toString();
+  }
+
+} //TransitionImpl
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/util/StatesAdapterFactory.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/util/StatesAdapterFactory.java
new file mode 100644
index 0000000..a7e204f
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/util/StatesAdapterFactory.java
@@ -0,0 +1,256 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.*;
+
+/**
+ * <!-- 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.states.StatesPackage
+ * @generated
+ */
+public class StatesAdapterFactory extends AdapterFactoryImpl
+{
+  /**
+   * The cached model package.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected static StatesPackage modelPackage;
+
+  /**
+   * Creates an instance of the adapter factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public StatesAdapterFactory()
+  {
+    if (modelPackage == null)
+    {
+      modelPackage = StatesPackage.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 StatesSwitch<Adapter> modelSwitch =
+    new StatesSwitch<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.states.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.states.Module
+   * @generated
+   */
+  public Adapter createModuleAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.Statemachine
+   * @generated
+   */
+  public Adapter createStatemachineAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.Event
+   * @generated
+   */
+  public Adapter createEventAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.State
+   * @generated
+   */
+  public Adapter createStateAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.SimpleState
+   * @generated
+   */
+  public Adapter createSimpleStateAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.CompoundState
+   * @generated
+   */
+  public Adapter createCompoundStateAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.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;
+  }
+
+} //StatesAdapterFactory
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/util/StatesSwitch.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/util/StatesSwitch.java
new file mode 100644
index 0000000..d38f015
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/states/util/StatesSwitch.java
@@ -0,0 +1,263 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.states.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.states.*;
+
+/**
+ * <!-- 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.states.StatesPackage
+ * @generated
+ */
+public class StatesSwitch<T> extends Switch<T>
+{
+  /**
+   * The cached model package
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected static StatesPackage modelPackage;
+
+  /**
+   * Creates an instance of the switch.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public StatesSwitch()
+  {
+    if (modelPackage == null)
+    {
+      modelPackage = StatesPackage.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 StatesPackage.MODULE:
+      {
+        Module module = (Module)theEObject;
+        T result = caseModule(module);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case StatesPackage.STATEMACHINE:
+      {
+        Statemachine statemachine = (Statemachine)theEObject;
+        T result = caseStatemachine(statemachine);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case StatesPackage.EVENT:
+      {
+        Event event = (Event)theEObject;
+        T result = caseEvent(event);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case StatesPackage.STATE:
+      {
+        State state = (State)theEObject;
+        T result = caseState(state);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case StatesPackage.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 StatesPackage.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 StatesPackage.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;
+  }
+
+} //StatesSwitch
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/validation/AbstractStatesJavaValidator.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/validation/AbstractStatesJavaValidator.java
new file mode 100644
index 0000000..99f107c
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src-gen/org/eclipse/ocl/tutorial/eclipsecon2011/validation/AbstractStatesJavaValidator.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 AbstractStatesJavaValidator extends AbstractDeclarativeValidator {
+
+	@Override
+	protected List<EPackage> getEPackages() {
+	    List<EPackage> result = new ArrayList<EPackage>();
+	    result.add(org.eclipse.ocl.tutorial.eclipsecon2011.states.StatesPackage.eINSTANCE);
+		return result;
+	}
+
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src/org/eclipse/ocl/tutorial/eclipsecon2011/States.mwe2 b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src/org/eclipse/ocl/tutorial/eclipsecon2011/States.mwe2
new file mode 100644
index 0000000..1eed47a
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src/org/eclipse/ocl/tutorial/eclipsecon2011/States.mwe2
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2010 itemis AG (http://www.itemis.eu) 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
+ *******************************************************************************/
+module org.eclipse.ocl.tutorial.eclipsecon2011.GenerateStates
+
+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/States.xtext"
+var file.extensions = "states"
+var projectName = "org.eclipse.ocl.tutorial.eclipsecon2011.states"
+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.states/src/org/eclipse/ocl/tutorial/eclipsecon2011/States.xtext b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src/org/eclipse/ocl/tutorial/eclipsecon2011/States.xtext
new file mode 100644
index 0000000..3a339f2
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src/org/eclipse/ocl/tutorial/eclipsecon2011/States.xtext
@@ -0,0 +1,49 @@
+/**
+ * <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: States.xtext,v 1.1 2011/03/12 20:46:05 ewillink Exp $
+ */
+grammar org.eclipse.ocl.tutorial.eclipsecon2011.States with org.eclipse.xtext.common.Terminals
+
+generate states "http://ocl.eclipse.org/tutorial/eclipsecon2011/States"
+
+Module:
+	'module' name=(STRING|ID)
+	(machines+=Statemachine)*
+;
+
+Statemachine:
+	(initial?='initial')? 'statemachine' name=ID ('value' value=INT)? '{'
+	'events' (events+=Event)* ';'
+	(states+=State)* '}' ('debug' dbgName=ID)?
+;
+
+Event:
+	name=ID;
+
+State: SimpleState | CompoundState;
+
+SimpleState:
+	(initial?='initial')? 'state' name=ID ('value' value=INT)?
+	'{' (transitions+=Transition)* '}' ('debug' dbgName=ID)?
+;
+
+CompoundState:
+	'compound' (initial?='initial')? 'state' name=ID 'machine' machine=[Statemachine]
+	'{' (transitions+=Transition)* '}' ('debug' dbgName=ID)?
+;
+
+Transition:
+	event=[Event] '=>' state=[State] ('debug' dbgName=ID)?
+;
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src/org/eclipse/ocl/tutorial/eclipsecon2011/StatesRuntimeModule.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src/org/eclipse/ocl/tutorial/eclipsecon2011/StatesRuntimeModule.java
new file mode 100644
index 0000000..77b22e3
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src/org/eclipse/ocl/tutorial/eclipsecon2011/StatesRuntimeModule.java
@@ -0,0 +1,23 @@
+/**
+ * <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: StatesRuntimeModule.java,v 1.1 2011/03/12 20:46:05 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011;
+
+/**
+ * Use this class to register components to be used at runtime / without the Equinox extension registry.
+ */
+public class StatesRuntimeModule extends org.eclipse.ocl.tutorial.eclipsecon2011.AbstractStatesRuntimeModule {
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src/org/eclipse/ocl/tutorial/eclipsecon2011/StatesStandaloneSetup.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src/org/eclipse/ocl/tutorial/eclipsecon2011/StatesStandaloneSetup.java
new file mode 100644
index 0000000..bb23b02
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src/org/eclipse/ocl/tutorial/eclipsecon2011/StatesStandaloneSetup.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: StatesStandaloneSetup.java,v 1.1 2011/03/12 20:46:05 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011;
+
+/**
+ * Initialization support for running Xtext languages 
+ * without equinox extension registry
+ */
+public class StatesStandaloneSetup extends StatesStandaloneSetupGenerated{
+
+	public static void doSetup() {
+		new StatesStandaloneSetup().createInjectorAndDoEMFRegistration();
+	}
+}
+
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src/org/eclipse/ocl/tutorial/eclipsecon2011/formatting/StatesFormatter.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src/org/eclipse/ocl/tutorial/eclipsecon2011/formatting/StatesFormatter.java
new file mode 100644
index 0000000..51c7e10
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src/org/eclipse/ocl/tutorial/eclipsecon2011/formatting/StatesFormatter.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: StatesFormatter.java,v 1.1 2011/03/12 20:46:06 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.formatting;
+
+import org.eclipse.ocl.tutorial.eclipsecon2011.services.StatesGrammarAccess;
+import org.eclipse.ocl.tutorial.eclipsecon2011.services.StatesGrammarAccess.CompoundStateElements;
+import org.eclipse.ocl.tutorial.eclipsecon2011.services.StatesGrammarAccess.SimpleStateElements;
+import org.eclipse.ocl.tutorial.eclipsecon2011.services.StatesGrammarAccess.StatemachineElements;
+import org.eclipse.ocl.tutorial.eclipsecon2011.services.StatesGrammarAccess.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 StatesFormatter extends AbstractDeclarativeFormatter {
+	
+	@Override
+	protected void configureFormatting(FormattingConfig c) {
+
+	    c.setAutoLinewrap(120);
+
+	    StatesGrammarAccess f = (StatesGrammarAccess) 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.states/src/org/eclipse/ocl/tutorial/eclipsecon2011/validation/StatesJavaValidator.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src/org/eclipse/ocl/tutorial/eclipsecon2011/validation/StatesJavaValidator.java
new file mode 100644
index 0000000..c9fdc3c
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states/src/org/eclipse/ocl/tutorial/eclipsecon2011/validation/StatesJavaValidator.java
@@ -0,0 +1,34 @@
+/**
+ * <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: StatesJavaValidator.java,v 1.1 2011/03/12 20:46:06 ewillink Exp $
+ */
+package org.eclipse.ocl.tutorial.eclipsecon2011.validation;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.ocl.examples.xtext.completeocl.validation.CompleteOCLEObjectValidator;
+import org.eclipse.ocl.tutorial.eclipsecon2011.states.StatesPackage;
+import org.eclipse.xtext.validation.EValidatorRegistrar;
+ 
+
+public class StatesJavaValidator extends AbstractStatesJavaValidator
+{
+	@Override
+	public void register(EValidatorRegistrar registrar) {
+		super.register(registrar);
+		StatesPackage ePackage = StatesPackage.eINSTANCE;
+		URI oclURI = URI.createPlatformResourceURI("/org.eclipse.ocl.tutorial.eclipsecon2011.states.ocl/model/States.ocl", true);
+		registrar.register(ePackage, new CompleteOCLEObjectValidator(ePackage, oclURI));
+	}
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/.classpath b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/.classpath
@@ -0,0 +1,7 @@
+<?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="output" path="bin"/>
+</classpath>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/.cvsignore b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/.cvsignore
new file mode 100644
index 0000000..b5f8004
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/.cvsignore
@@ -0,0 +1,2 @@
+bin
+build.acceleo
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/.project b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/.project
new file mode 100644
index 0000000..1f3e5e5
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.ocl.tutorial.eclipsecon2011.states2classes</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.acceleo.ide.ui.acceleoBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.acceleo.ide.ui.acceleoNature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/.settings/org.eclipse.jdt.core.prefs b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..d1c0bf9
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/Generate Simple States.launch b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/Generate Simple States.launch
new file mode 100644
index 0000000..8d41677
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/Generate Simple States.launch
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<launchConfiguration type="org.eclipse.acceleo.ide.ui.launching.launchConfigurationType">
+<stringAttribute key="org.eclipse.acceleo.ide.ui.ARGUMENTS" value=""/>
+<booleanAttribute key="org.eclipse.acceleo.ide.ui.COMPUTE_PROFILING" value="false"/>
+<booleanAttribute key="org.eclipse.acceleo.ide.ui.COMPUTE_TRACEABILITY" value="false"/>
+<stringAttribute key="org.eclipse.acceleo.ide.ui.LAUNCHING_STRATEGY_DESCRIPTION" value="Acceleo Plug-in Application"/>
+<stringAttribute key="org.eclipse.acceleo.ide.ui.MODEL_PATH" value="/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/simple.states"/>
+<stringAttribute key="org.eclipse.acceleo.ide.ui.TARGET_PATH" value="/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/src/simple/states"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/src/org/eclipse/ocl/tutorial/eclipsecon2011/states2classes/files/Generate.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.ocl.tutorial.eclipsecon2011.states2classes.files.Generate"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="&quot;C:/Development/HartLibrary/Workspace3.6.1/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/simple.states&quot; &quot;C:/Development/HartLibrary/runtime-EclipseApplication/org.eclipse.ocl.tutorial.eclipsecon2011.playspace/src/simple/states&quot;"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.ocl.tutorial.eclipsecon2011.states2classes"/>
+</launchConfiguration>
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/META-INF/MANIFEST.MF b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..1b24a0d
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Acceleo States2classes Module Runtime Plug-in
+Bundle-SymbolicName: org.eclipse.ocl.tutorial.eclipsecon2011.states2classes
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.ocl.tutorial.eclipsecon2011.states2classes.Activator
+Bundle-Vendor: Eclipse Modeling Project
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.emf.ecore,
+ org.eclipse.emf.ecore,
+ org.eclipse.emf.ecore.xmi,
+ org.eclipse.ocl,
+ org.eclipse.ocl.ecore,
+ org.eclipse.acceleo.model,
+ org.eclipse.acceleo.engine,
+ org.eclipse.ocl.tutorial.eclipsecon2011.states
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ActivationPolicy: lazy
+Eclipse-LazyStart: true
+Export-Package: org.eclipse.ocl.tutorial.eclipsecon2011.states2classes.files
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/build.properties b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/build.properties
new file mode 100644
index 0000000..a7eaec6
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
+customBuildCallbacks = build.acceleo
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/simple.states b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/simple.states
new file mode 100644
index 0000000..e17ab0b
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/simple.states
@@ -0,0 +1,16 @@
+module "simple.states"
+
+statemachine Machine
+{
+    events START STOP;
+    
+    initial state Start
+    {
+        START => Start
+    } 
+         
+    state Stop 
+    {
+        STOP  => Stop
+    }  
+}
\ No newline at end of file
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/src/org/eclipse/ocl/tutorial/eclipsecon2011/states2classes/Activator.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/src/org/eclipse/ocl/tutorial/eclipsecon2011/states2classes/Activator.java
new file mode 100644
index 0000000..1b8f4d4
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/src/org/eclipse/ocl/tutorial/eclipsecon2011/states2classes/Activator.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Obeo.
+ * 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:
+ *     Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ocl.tutorial.eclipsecon2011.states2classes;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle.
+ */
+public class Activator extends Plugin {
+
+	/**
+	 * The plug-in ID.
+	 */
+	public static final String PLUGIN_ID = "org.eclipse.ocl.tutorial.eclipsecon2011.states2classes";
+
+	/**
+	 * The shared instance.
+	 */
+	private static Activator plugin;
+	
+	/**
+	 * The constructor.
+	 */
+	public Activator() {
+	}
+
+	/**{@inheritDoc}
+	 *
+	 * @see org.eclipse.core.runtime.Plugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/**{@inheritDoc}
+	 *
+	 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance.
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/src/org/eclipse/ocl/tutorial/eclipsecon2011/states2classes/files/Generate.java b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/src/org/eclipse/ocl/tutorial/eclipsecon2011/states2classes/files/Generate.java
new file mode 100644
index 0000000..c500757
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/src/org/eclipse/ocl/tutorial/eclipsecon2011/states2classes/files/Generate.java
@@ -0,0 +1,273 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Obeo.
+ * 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:
+ *     Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ocl.tutorial.eclipsecon2011.states2classes.files;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.acceleo.engine.event.IAcceleoTextGenerationListener;
+import org.eclipse.acceleo.engine.generation.strategy.IAcceleoGenerationStrategy;
+import org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator;
+import org.eclipse.emf.common.util.BasicMonitor;
+import org.eclipse.emf.common.util.Monitor;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.ocl.tutorial.eclipsecon2011.StatesStandaloneSetup;
+
+/**
+ * Entry point of the 'Generate' generation module.
+ *
+ * @generated
+ */
+public class Generate extends AbstractAcceleoGenerator {
+	/**
+	 * The name of the module.
+	 *
+	 * @generated
+	 */
+	public static final String MODULE_FILE_NAME = "generate";
+	
+	/**
+	 * The name of the templates that are to be generated.
+	 *
+	 * @generated
+	 */
+	public static final String[] TEMPLATE_NAMES = { "generate", };
+
+	/**
+	 * Allows the public constructor to be used. Note that a generator created
+	 * this way cannot be used to launch generations before one of
+	 * {@link #initialize(EObject, File, List)} or
+	 * {@link #initialize(URI, File, List)} is called.
+	 * <p>
+	 * The main reason for this constructor is to allow clients of this
+	 * generation to call it from another Java file, as it allows for the
+	 * retrieval of {@link #getProperties()} and
+	 * {@link #getGenerationListeners()}.
+	 * </p>
+	 *
+	 * @generated
+	 */
+	public Generate() {
+    // Empty implementation
+  }
+
+	/**
+	 * This allows clients to instantiates a generator with all required information.
+	 * 
+	 * @param modelURI
+	 *            URI where the model on which this generator will be used is located.
+	 * @param targetFolder
+	 *            This will be used as the output folder for this generation : it will be the base path
+	 *            against which all file block URLs will be resolved.
+	 * @param arguments
+	 *            If the template which will be called requires more than one argument taken from the model,
+	 *            pass them here.
+	 * @throws IOException
+	 *             This can be thrown in three scenarios : the module cannot be found, it cannot be loaded, or
+	 *             the model cannot be loaded.
+	 * @generated
+	 */
+	public Generate(URI modelURI, File targetFolder,
+			List<? extends Object> arguments) throws IOException {
+    initialize(modelURI, targetFolder, arguments);
+  }
+
+	/**
+	 * This allows clients to instantiates a generator with all required information.
+	 * 
+	 * @param model
+	 *            We'll iterate over the content of this element to find Objects matching the first parameter
+	 *            of the template we need to call.
+	 * @param targetFolder
+	 *            This will be used as the output folder for this generation : it will be the base path
+	 *            against which all file block URLs will be resolved.
+	 * @param arguments
+	 *            If the template which will be called requires more than one argument taken from the model,
+	 *            pass them here.
+	 * @throws IOException
+	 *             This can be thrown in two scenarios : the module cannot be found, or it cannot be loaded.
+	 * @generated
+	 */
+	public Generate(EObject model, File targetFolder,
+			List<? extends Object> arguments) throws IOException {
+    initialize(model, targetFolder, arguments);
+  }
+	
+	/**
+	 * This can be used to launch the generation from a standalone application.
+	 * 
+	 * @param args
+	 *            Arguments of the generation.
+	 * @generated
+	 */
+	public static void main(String[] args) {
+    try {
+      if (args.length < 2) {
+        System.out.println("Arguments not valid : {model, folder}.");
+      } else {
+        URI modelURI = URI.createFileURI(args[0]);
+        File folder = new File(args[1]);
+        List<String> arguments = new ArrayList<String>();
+        for (int i = 2; i < args.length; i++) {
+          arguments.add(args[i]);
+        }
+        Generate generator = new Generate(modelURI, folder, arguments);
+        generator.doGenerate(new BasicMonitor());
+      }
+    } catch (IOException e) {
+      e.printStackTrace();
+    }
+  }
+
+	/**
+	 * Launches the generation described by this instance.
+	 * 
+	 * @param monitor
+	 *            This will be used to display progress information to the user.
+	 * @throws IOException
+	 *             This will be thrown if any of the output files cannot be saved to disk.
+	 * @generated
+	 */
+	@Override
+	public void doGenerate(Monitor monitor) throws IOException {
+    /*
+     * TODO if you wish to change the generation as a whole, override this.
+     * The default behavior should be sufficient in most cases.
+     */
+    super.doGenerate(monitor);
+  }
+	
+	/**
+	 * If this generator needs to listen to text generation events, listeners can be returned from here.
+	 * 
+	 * @return List of listeners that are to be notified when text is generated through this launch.
+	 * @generated
+	 */
+	@Override
+	public List<IAcceleoTextGenerationListener> getGenerationListeners() {
+    List<IAcceleoTextGenerationListener> listeners = super.getGenerationListeners();
+    // TODO if you need to listen to generation event, add listeners to the list here
+    return listeners;
+  }
+	
+	/**
+	 * If you need to change the way files are generated, this is your entry point.
+	 * <p>
+	 * The default is {@link org.eclipse.acceleo.engine.generation.strategy.DefaultStrategy}; it generates
+	 * files on the fly. If you only need to preview the results, return a new
+	 * {@link org.eclipse.acceleo.engine.generation.strategy.PreviewStrategy}. Both of these aren't aware of
+	 * the running Eclipse and can be used standalone.
+	 * </p>
+	 * <p>
+	 * If you need the file generation to be aware of the workspace (A typical example is when you wanna
+	 * override files that are under clear case or any other VCS that could forbid the overriding), then
+	 * return a new {@link org.eclipse.acceleo.engine.generation.strategy.WorkspaceAwareStrategy}.
+	 * <b>Note</b>, however, that this <b>cannot</b> be used standalone.
+	 * </p>
+	 * <p>
+	 * All three of these default strategies support merging through JMerge.
+	 * </p>
+	 * 
+	 * @return The generation strategy that is to be used for generations launched through this launcher.
+	 * @generated
+	 */
+	public IAcceleoGenerationStrategy getGenerationStrategy() {
+    return super.getGenerationStrategy();
+  }
+	
+	/**
+	 * This will be called in order to find and load the module that will be launched through this launcher.
+	 * We expect this name not to contain file extension, and the module to be located beside the launcher.
+	 * 
+	 * @return The name of the module that is to be launched.
+	 * @generated
+	 */
+	@Override
+	public String getModuleName() {
+    return MODULE_FILE_NAME;
+  }
+	
+	/**
+	 * If the module(s) called by this launcher require properties files, return their qualified path from
+	 * here.Take note that the first added properties files will take precedence over subsequent ones if they
+	 * contain conflicting keys.
+	 * <p>
+	 * Properties need to be in source folders, the path that we expect to get as a result of this call are of
+	 * the form &lt;package>.&lt;properties file name without extension>. For example, if you have a file
+	 * named "messages.properties" in package "org.eclipse.acceleo.sample", the path that needs be returned by
+	 * a call to {@link #getProperties()} is "org.eclipse.acceleo.sample.messages".
+	 * </p>
+	 * 
+	 * @return The list of properties file we need to add to the generation context.
+	 * @see java.util.ResourceBundle#getBundle(String)
+	 * @generated
+	 */
+	@Override
+	public List<String> getProperties() {
+    List<String> propertiesFiles = super.getProperties();
+    /*
+     * TODO if your generation module requires access to properties files,
+     * add their qualified path to the list here. Properties files are
+     * expected to be in source folders, and the path here to be the
+     * qualified path as if referring to a Java class. For example, if you
+     * have a file named "messages.properties" in package
+     * "org.eclipse.acceleo.sample", the path that needs be added to this
+     * list is "org.eclipse.acceleo.sample.messages".
+     */
+    return propertiesFiles;
+  }
+	
+	/**
+	 * This will be used to get the list of templates that are to be launched by this launcher.
+	 * 
+	 * @return The list of templates to call on the module {@link #getModuleName()}.
+	 * @generated
+	 */
+	@Override
+	public String[] getTemplateNames() {
+    return TEMPLATE_NAMES;
+  }
+	
+	/**
+	 * This can be used to update the resource set's package registry with all needed EPackages.
+	 * 
+	 * @param resourceSet
+	 *            The resource set which registry has to be updated.
+	 * @generated NOT
+	 */
+	@Override
+	public void registerPackages(ResourceSet resourceSet) {
+    super.registerPackages(resourceSet);
+    StatesStandaloneSetup.doSetup();
+//    resourceSet.getPackageRegistry().put(org.eclipse.xtext.example.fowlerdsl.FowlerdslPackage.eINSTANCE.getNsURI(), org.eclipse.xtext.example.fowlerdsl.FowlerdslPackage.eINSTANCE);
+    // TODO If you need additional package registrations, do them here. The following line is an example for UML.
+    // resourceSet.getPackageRegistry().put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE);
+  }
+
+	/**
+	 * This can be used to update the resource set's resource factory registry with all needed factories.
+	 * 
+	 * @param resourceSet
+	 *            The resource set which registry has to be updated.
+	 * @generated
+	 */
+	@Override
+	public void registerResourceFactories(ResourceSet resourceSet) {
+    super.registerResourceFactories(resourceSet);
+    // TODO If you need additional resource factories registrations, do them here. The following line is an example for UML.
+    // resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(UMLResource.FILE_EXTENSION, UMLResource.Factory.INSTANCE);
+  }
+	
+}
diff --git a/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/src/org/eclipse/ocl/tutorial/eclipsecon2011/states2classes/files/generate.mtl b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/src/org/eclipse/ocl/tutorial/eclipsecon2011/states2classes/files/generate.mtl
new file mode 100644
index 0000000..a8c4415
--- /dev/null
+++ b/docs/publications/EclipseCon2011Tutorial/org.eclipse.ocl.tutorial.eclipsecon2011.states2classes/src/org/eclipse/ocl/tutorial/eclipsecon2011/states2classes/files/generate.mtl
@@ -0,0 +1,86 @@
+[comment encoding = UTF-8 /]
+[module generate('http://ocl.eclipse.org/tutorial/eclipsecon2011/States')/]
+
+[query getEventMethodName(v : Event) : String = 'do' + v.name/]
+[query getInitialState(e : Statemachine) : State =
+    e.states->any(initial)/]
+[query getPackageName(m : Module) : String = m.name/]
+[query getStateClassName(s : State) : String = s.name/]
+[query getStateEnumName(s : State) : String = 'STATE_' + s.name/]
+[query getStateMachineClassName(e : Statemachine) : String = e.name/]
+
+[template public generate(m : Module)]    
+[comment @main /]
+[for (e : Statemachine | m.machines)]
+[file (e.name + '.java', false, 'UTF-8')]
+[generateStatemachineClass(m, e)/]
+[/file]
+[for (s : State | e.states)]
+[file (s.name + '.java', false, 'UTF-8')]
+[generateStateClass(m, e, s)/]
+[/file]
+[/for]    
+[/for]
+[/template]
+
+[template public generateStatemachineClass(m : Module, e : Statemachine)]
+package [m.getPackageName()/];
+
+public class [e.getStateMachineClassName()/]
+{
+    public interface State
+    {
+[for (v : Event | e.events)]
+        public void [v.getEventMethodName()/]();
+[/for]
+
+        enum STATES
+        {
+[for (s : State | e.states) separator (',\n') after('\n')]
+            [s.getStateEnumName()/][/for]
+        }
+    }
+
+    private final State['[]'/] states = new State['[]'/] {
+[for (s : State | e.states) separator (',\n') after('\n')]
+        new [s.getStateClassName()/](this)[/for]
+    };
+
+    private State state;
+
+    public [e.getStateMachineClassName()/]() {
+        setState(State.STATES.[e.getInitialState().getStateEnumName()/]);
+    }
+
+    public void setState(State.STATES state) {
+        this.state = states['['/]state.ordinal()];
+    }
+
+[for (v : Event | e.events)]
+    public void [v.getEventMethodName()/]() { state.[v.getEventMethodName()/](); }
+[/for]
+}    
+[/template]
+
+[template public generateStateClass(m : Module, e : Statemachine, s : State)]
+package [m.getPackageName()/];
+
+public class [s.name/] implements [e.name + '.State'/]
+{
+}    
+[/template]
+
+[template public generateStateClass(m : Module, e : Statemachine, s : SimpleState)]
+package [m.getPackageName()/];
+
+public class [s.getStateClassName()/] implements [e.name + '.State'/] {
+    private final [e.getStateMachineClassName()/] sm;
+    public [s.getStateClassName()/]([e.getStateMachineClassName()/] sm) {
+        this.sm = sm;
+    }
+[for (t : Transition | s.transitions)]
+    public void [t.event.getEventMethodName()/]()
+        { sm.setState(STATES.[t.state.getStateEnumName()/]); }
+[/for]
+}    
+[/template]