diff --git a/org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/AbstractMyDslProposalProvider.java b/org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/AbstractMyDslProposalProvider.java
index 7bde4ddead5561d0cfaa33f96e532738b0758d2b..2d3705f796aaafb8de61d1da5e2c8a0514d87a0a 100644
--- a/org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/AbstractMyDslProposalProvider.java
+++ b/org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/AbstractMyDslProposalProvider.java
@@ -20,41 +20,131 @@ public class AbstractMyDslProposalProvider extends TerminalsProposalProvider {
 	public void completeModel_Terms(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
-	public void completeTerm_Operations(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void completeIfElseExpression_TrueExp(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeIfElseExpression_FalseExp(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeBinaryBooleanExpression_Operation(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeBinaryBooleanExpression_Right(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeComparison_Operation(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeComparison_Right(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeTerm_Operation(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
 	public void completeTerm_Right(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
-	public void completeOperations_TermOperations(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void completeProduct_Operation(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeProduct_Right(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completePower_Exponent(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeFunction_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeFunction_Parameters(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeFormalParameter_Value(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeBooleanLiteral_Value(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeIntLiteral_Value(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeDoubleLiteral_Value(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
     
 	public void complete_Model(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
+	public void complete_Double(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Integer(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_EString(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_EBoolean(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_ProductOperation(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_TermOperation(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_CompareOperation(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_BooleanOperation(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_RootExpression(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_IfElseExpression(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_BinaryBooleanExpression(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_UnaryBooleanExpression(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Comparison(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
 	public void complete_Term(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
-	public void complete_Types(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void complete_Product(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Power(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Atom(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Function(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
-	public void complete_Arithmetics(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void complete_Literal(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
-	public void complete_Strings(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void complete_FormalParameter(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
-	public void complete_DECIMAL(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void complete_BooleanLiteral(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
-	public void complete_E_STRING(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void complete_NumberLiteral(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
-	public void complete_Operations(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void complete_IntLiteral(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
-	public void complete_OperationsType(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void complete_DoubleLiteral(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
 }
diff --git a/org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/MyDslParser.java b/org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/MyDslParser.java
index 310563264d1740cdf0ce5799856ec985b665171b..608e9a745f8a488c1e6aa5196785a4fe76ec4be0 100644
--- a/org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/MyDslParser.java
+++ b/org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/MyDslParser.java
@@ -37,20 +37,54 @@ public class MyDslParser extends AbstractContentAssistParser {
 			nameMappings = new HashMap<AbstractElement, String>() {
 				private static final long serialVersionUID = 1L;
 				{
-					put(grammarAccess.getTypesAccess().getAlternatives(), "rule__Types__Alternatives");
-					put(grammarAccess.getE_STRINGAccess().getAlternatives(), "rule__E_STRING__Alternatives");
-					put(grammarAccess.getOperationsTypeAccess().getAlternatives(), "rule__OperationsType__Alternatives");
+					put(grammarAccess.getEStringAccess().getAlternatives(), "rule__EString__Alternatives");
+					put(grammarAccess.getEBooleanAccess().getAlternatives(), "rule__EBoolean__Alternatives");
+					put(grammarAccess.getUnaryBooleanExpressionAccess().getAlternatives(), "rule__UnaryBooleanExpression__Alternatives");
+					put(grammarAccess.getAtomAccess().getAlternatives(), "rule__Atom__Alternatives");
+					put(grammarAccess.getLiteralAccess().getAlternatives(), "rule__Literal__Alternatives");
+					put(grammarAccess.getNumberLiteralAccess().getAlternatives(), "rule__NumberLiteral__Alternatives");
+					put(grammarAccess.getProductOperationAccess().getAlternatives(), "rule__ProductOperation__Alternatives");
+					put(grammarAccess.getTermOperationAccess().getAlternatives(), "rule__TermOperation__Alternatives");
+					put(grammarAccess.getCompareOperationAccess().getAlternatives(), "rule__CompareOperation__Alternatives");
+					put(grammarAccess.getBooleanOperationAccess().getAlternatives(), "rule__BooleanOperation__Alternatives");
+					put(grammarAccess.getDoubleAccess().getGroup(), "rule__Double__Group__0");
+					put(grammarAccess.getIntegerAccess().getGroup(), "rule__Integer__Group__0");
+					put(grammarAccess.getIfElseExpressionAccess().getGroup(), "rule__IfElseExpression__Group__0");
+					put(grammarAccess.getIfElseExpressionAccess().getGroup_1(), "rule__IfElseExpression__Group_1__0");
+					put(grammarAccess.getBinaryBooleanExpressionAccess().getGroup(), "rule__BinaryBooleanExpression__Group__0");
+					put(grammarAccess.getBinaryBooleanExpressionAccess().getGroup_1(), "rule__BinaryBooleanExpression__Group_1__0");
+					put(grammarAccess.getUnaryBooleanExpressionAccess().getGroup_0(), "rule__UnaryBooleanExpression__Group_0__0");
+					put(grammarAccess.getComparisonAccess().getGroup(), "rule__Comparison__Group__0");
+					put(grammarAccess.getComparisonAccess().getGroup_1(), "rule__Comparison__Group_1__0");
 					put(grammarAccess.getTermAccess().getGroup(), "rule__Term__Group__0");
 					put(grammarAccess.getTermAccess().getGroup_1(), "rule__Term__Group_1__0");
-					put(grammarAccess.getTypesAccess().getGroup_2(), "rule__Types__Group_2__0");
-					put(grammarAccess.getArithmeticsAccess().getGroup(), "rule__Arithmetics__Group__0");
-					put(grammarAccess.getStringsAccess().getGroup(), "rule__Strings__Group__0");
-					put(grammarAccess.getDECIMALAccess().getGroup(), "rule__DECIMAL__Group__0");
-					put(grammarAccess.getDECIMALAccess().getGroup_2(), "rule__DECIMAL__Group_2__0");
+					put(grammarAccess.getProductAccess().getGroup(), "rule__Product__Group__0");
+					put(grammarAccess.getProductAccess().getGroup_1(), "rule__Product__Group_1__0");
+					put(grammarAccess.getPowerAccess().getGroup(), "rule__Power__Group__0");
+					put(grammarAccess.getPowerAccess().getGroup_1(), "rule__Power__Group_1__0");
+					put(grammarAccess.getAtomAccess().getGroup_1(), "rule__Atom__Group_1__0");
+					put(grammarAccess.getFunctionAccess().getGroup(), "rule__Function__Group__0");
+					put(grammarAccess.getFunctionAccess().getGroup_2(), "rule__Function__Group_2__0");
+					put(grammarAccess.getFunctionAccess().getGroup_2_1(), "rule__Function__Group_2_1__0");
 					put(grammarAccess.getModelAccess().getTermsAssignment(), "rule__Model__TermsAssignment");
-					put(grammarAccess.getTermAccess().getOperationsAssignment_1_1(), "rule__Term__OperationsAssignment_1_1");
+					put(grammarAccess.getIfElseExpressionAccess().getTrueExpAssignment_1_2(), "rule__IfElseExpression__TrueExpAssignment_1_2");
+					put(grammarAccess.getIfElseExpressionAccess().getFalseExpAssignment_1_4(), "rule__IfElseExpression__FalseExpAssignment_1_4");
+					put(grammarAccess.getBinaryBooleanExpressionAccess().getOperationAssignment_1_1(), "rule__BinaryBooleanExpression__OperationAssignment_1_1");
+					put(grammarAccess.getBinaryBooleanExpressionAccess().getRightAssignment_1_2(), "rule__BinaryBooleanExpression__RightAssignment_1_2");
+					put(grammarAccess.getComparisonAccess().getOperationAssignment_1_1(), "rule__Comparison__OperationAssignment_1_1");
+					put(grammarAccess.getComparisonAccess().getRightAssignment_1_2(), "rule__Comparison__RightAssignment_1_2");
+					put(grammarAccess.getTermAccess().getOperationAssignment_1_1(), "rule__Term__OperationAssignment_1_1");
 					put(grammarAccess.getTermAccess().getRightAssignment_1_2(), "rule__Term__RightAssignment_1_2");
-					put(grammarAccess.getOperationsAccess().getTermOperationsAssignment(), "rule__Operations__TermOperationsAssignment");
+					put(grammarAccess.getProductAccess().getOperationAssignment_1_1(), "rule__Product__OperationAssignment_1_1");
+					put(grammarAccess.getProductAccess().getRightAssignment_1_2(), "rule__Product__RightAssignment_1_2");
+					put(grammarAccess.getPowerAccess().getExponentAssignment_1_2(), "rule__Power__ExponentAssignment_1_2");
+					put(grammarAccess.getFunctionAccess().getNameAssignment_0(), "rule__Function__NameAssignment_0");
+					put(grammarAccess.getFunctionAccess().getParametersAssignment_2_0(), "rule__Function__ParametersAssignment_2_0");
+					put(grammarAccess.getFunctionAccess().getParametersAssignment_2_1_1(), "rule__Function__ParametersAssignment_2_1_1");
+					put(grammarAccess.getFormalParameterAccess().getValueAssignment(), "rule__FormalParameter__ValueAssignment");
+					put(grammarAccess.getBooleanLiteralAccess().getValueAssignment(), "rule__BooleanLiteral__ValueAssignment");
+					put(grammarAccess.getIntLiteralAccess().getValueAssignment(), "rule__IntLiteral__ValueAssignment");
+					put(grammarAccess.getDoubleLiteralAccess().getValueAssignment(), "rule__DoubleLiteral__ValueAssignment");
 				}
 			};
 		}
diff --git a/org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g b/org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g
index fc95b5bdf60f577a56fea7eeb6fa0ace270ba05f..12722cf3bdb8c9a92d69500f91e2883a51008dc5 100644
--- a/org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g
+++ b/org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g
@@ -84,6 +84,258 @@ finally {
 
 
 
+// Entry rule entryRuleDouble
+entryRuleDouble 
+:
+{ before(grammarAccess.getDoubleRule()); }
+	 ruleDouble
+{ after(grammarAccess.getDoubleRule()); } 
+	 EOF 
+;
+
+// Rule Double
+ruleDouble
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getDoubleAccess().getGroup()); }
+(rule__Double__Group__0)
+{ after(grammarAccess.getDoubleAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleInteger
+entryRuleInteger 
+:
+{ before(grammarAccess.getIntegerRule()); }
+	 ruleInteger
+{ after(grammarAccess.getIntegerRule()); } 
+	 EOF 
+;
+
+// Rule Integer
+ruleInteger
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getIntegerAccess().getGroup()); }
+(rule__Integer__Group__0)
+{ after(grammarAccess.getIntegerAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleEString
+entryRuleEString 
+:
+{ before(grammarAccess.getEStringRule()); }
+	 ruleEString
+{ after(grammarAccess.getEStringRule()); } 
+	 EOF 
+;
+
+// Rule EString
+ruleEString
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getEStringAccess().getAlternatives()); }
+(rule__EString__Alternatives)
+{ after(grammarAccess.getEStringAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleEBoolean
+entryRuleEBoolean 
+:
+{ before(grammarAccess.getEBooleanRule()); }
+	 ruleEBoolean
+{ after(grammarAccess.getEBooleanRule()); } 
+	 EOF 
+;
+
+// Rule EBoolean
+ruleEBoolean
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getEBooleanAccess().getAlternatives()); }
+(rule__EBoolean__Alternatives)
+{ after(grammarAccess.getEBooleanAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleRootExpression
+entryRuleRootExpression 
+:
+{ before(grammarAccess.getRootExpressionRule()); }
+	 ruleRootExpression
+{ after(grammarAccess.getRootExpressionRule()); } 
+	 EOF 
+;
+
+// Rule RootExpression
+ruleRootExpression
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getRootExpressionAccess().getIfElseExpressionParserRuleCall()); }
+	ruleIfElseExpression
+{ after(grammarAccess.getRootExpressionAccess().getIfElseExpressionParserRuleCall()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleIfElseExpression
+entryRuleIfElseExpression 
+:
+{ before(grammarAccess.getIfElseExpressionRule()); }
+	 ruleIfElseExpression
+{ after(grammarAccess.getIfElseExpressionRule()); } 
+	 EOF 
+;
+
+// Rule IfElseExpression
+ruleIfElseExpression
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getIfElseExpressionAccess().getGroup()); }
+(rule__IfElseExpression__Group__0)
+{ after(grammarAccess.getIfElseExpressionAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleBinaryBooleanExpression
+entryRuleBinaryBooleanExpression 
+:
+{ before(grammarAccess.getBinaryBooleanExpressionRule()); }
+	 ruleBinaryBooleanExpression
+{ after(grammarAccess.getBinaryBooleanExpressionRule()); } 
+	 EOF 
+;
+
+// Rule BinaryBooleanExpression
+ruleBinaryBooleanExpression
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getBinaryBooleanExpressionAccess().getGroup()); }
+(rule__BinaryBooleanExpression__Group__0)
+{ after(grammarAccess.getBinaryBooleanExpressionAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleUnaryBooleanExpression
+entryRuleUnaryBooleanExpression 
+:
+{ before(grammarAccess.getUnaryBooleanExpressionRule()); }
+	 ruleUnaryBooleanExpression
+{ after(grammarAccess.getUnaryBooleanExpressionRule()); } 
+	 EOF 
+;
+
+// Rule UnaryBooleanExpression
+ruleUnaryBooleanExpression
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getUnaryBooleanExpressionAccess().getAlternatives()); }
+(rule__UnaryBooleanExpression__Alternatives)
+{ after(grammarAccess.getUnaryBooleanExpressionAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleComparison
+entryRuleComparison 
+:
+{ before(grammarAccess.getComparisonRule()); }
+	 ruleComparison
+{ after(grammarAccess.getComparisonRule()); } 
+	 EOF 
+;
+
+// Rule Comparison
+ruleComparison
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getComparisonAccess().getGroup()); }
+(rule__Comparison__Group__0)
+{ after(grammarAccess.getComparisonAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
 // Entry rule entryRuleTerm
 entryRuleTerm 
 :
@@ -112,25 +364,165 @@ finally {
 
 
 
-// Entry rule entryRuleTypes
-entryRuleTypes 
+// Entry rule entryRuleProduct
+entryRuleProduct 
+:
+{ before(grammarAccess.getProductRule()); }
+	 ruleProduct
+{ after(grammarAccess.getProductRule()); } 
+	 EOF 
+;
+
+// Rule Product
+ruleProduct
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getProductAccess().getGroup()); }
+(rule__Product__Group__0)
+{ after(grammarAccess.getProductAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRulePower
+entryRulePower 
+:
+{ before(grammarAccess.getPowerRule()); }
+	 rulePower
+{ after(grammarAccess.getPowerRule()); } 
+	 EOF 
+;
+
+// Rule Power
+rulePower
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getPowerAccess().getGroup()); }
+(rule__Power__Group__0)
+{ after(grammarAccess.getPowerAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleAtom
+entryRuleAtom 
+:
+{ before(grammarAccess.getAtomRule()); }
+	 ruleAtom
+{ after(grammarAccess.getAtomRule()); } 
+	 EOF 
+;
+
+// Rule Atom
+ruleAtom
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getAtomAccess().getAlternatives()); }
+(rule__Atom__Alternatives)
+{ after(grammarAccess.getAtomAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleFunction
+entryRuleFunction 
+:
+{ before(grammarAccess.getFunctionRule()); }
+	 ruleFunction
+{ after(grammarAccess.getFunctionRule()); } 
+	 EOF 
+;
+
+// Rule Function
+ruleFunction
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getFunctionAccess().getGroup()); }
+(rule__Function__Group__0)
+{ after(grammarAccess.getFunctionAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleLiteral
+entryRuleLiteral 
+:
+{ before(grammarAccess.getLiteralRule()); }
+	 ruleLiteral
+{ after(grammarAccess.getLiteralRule()); } 
+	 EOF 
+;
+
+// Rule Literal
+ruleLiteral
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getLiteralAccess().getAlternatives()); }
+(rule__Literal__Alternatives)
+{ after(grammarAccess.getLiteralAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleFormalParameter
+entryRuleFormalParameter 
 :
-{ before(grammarAccess.getTypesRule()); }
-	 ruleTypes
-{ after(grammarAccess.getTypesRule()); } 
+{ before(grammarAccess.getFormalParameterRule()); }
+	 ruleFormalParameter
+{ after(grammarAccess.getFormalParameterRule()); } 
 	 EOF 
 ;
 
-// Rule Types
-ruleTypes
+// Rule FormalParameter
+ruleFormalParameter
     @init {
 		int stackSize = keepStackSize();
     }
 	:
 (
-{ before(grammarAccess.getTypesAccess().getAlternatives()); }
-(rule__Types__Alternatives)
-{ after(grammarAccess.getTypesAccess().getAlternatives()); }
+{ before(grammarAccess.getFormalParameterAccess().getValueAssignment()); }
+(rule__FormalParameter__ValueAssignment)
+{ after(grammarAccess.getFormalParameterAccess().getValueAssignment()); }
 )
 
 ;
@@ -140,25 +532,25 @@ finally {
 
 
 
-// Entry rule entryRuleArithmetics
-entryRuleArithmetics 
+// Entry rule entryRuleBooleanLiteral
+entryRuleBooleanLiteral 
 :
-{ before(grammarAccess.getArithmeticsRule()); }
-	 ruleArithmetics
-{ after(grammarAccess.getArithmeticsRule()); } 
+{ before(grammarAccess.getBooleanLiteralRule()); }
+	 ruleBooleanLiteral
+{ after(grammarAccess.getBooleanLiteralRule()); } 
 	 EOF 
 ;
 
-// Rule Arithmetics
-ruleArithmetics
+// Rule BooleanLiteral
+ruleBooleanLiteral
     @init {
 		int stackSize = keepStackSize();
     }
 	:
 (
-{ before(grammarAccess.getArithmeticsAccess().getGroup()); }
-(rule__Arithmetics__Group__0)
-{ after(grammarAccess.getArithmeticsAccess().getGroup()); }
+{ before(grammarAccess.getBooleanLiteralAccess().getValueAssignment()); }
+(rule__BooleanLiteral__ValueAssignment)
+{ after(grammarAccess.getBooleanLiteralAccess().getValueAssignment()); }
 )
 
 ;
@@ -168,25 +560,1603 @@ finally {
 
 
 
-// Entry rule entryRuleStrings
-entryRuleStrings 
+// Entry rule entryRuleNumberLiteral
+entryRuleNumberLiteral 
 :
-{ before(grammarAccess.getStringsRule()); }
-	 ruleStrings
-{ after(grammarAccess.getStringsRule()); } 
+{ before(grammarAccess.getNumberLiteralRule()); }
+	 ruleNumberLiteral
+{ after(grammarAccess.getNumberLiteralRule()); } 
 	 EOF 
 ;
 
-// Rule Strings
-ruleStrings
+// Rule NumberLiteral
+ruleNumberLiteral
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getNumberLiteralAccess().getAlternatives()); }
+(rule__NumberLiteral__Alternatives)
+{ after(grammarAccess.getNumberLiteralAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleIntLiteral
+entryRuleIntLiteral 
+:
+{ before(grammarAccess.getIntLiteralRule()); }
+	 ruleIntLiteral
+{ after(grammarAccess.getIntLiteralRule()); } 
+	 EOF 
+;
+
+// Rule IntLiteral
+ruleIntLiteral
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getIntLiteralAccess().getValueAssignment()); }
+(rule__IntLiteral__ValueAssignment)
+{ after(grammarAccess.getIntLiteralAccess().getValueAssignment()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleDoubleLiteral
+entryRuleDoubleLiteral 
+:
+{ before(grammarAccess.getDoubleLiteralRule()); }
+	 ruleDoubleLiteral
+{ after(grammarAccess.getDoubleLiteralRule()); } 
+	 EOF 
+;
+
+// Rule DoubleLiteral
+ruleDoubleLiteral
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getDoubleLiteralAccess().getValueAssignment()); }
+(rule__DoubleLiteral__ValueAssignment)
+{ after(grammarAccess.getDoubleLiteralAccess().getValueAssignment()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+// Rule ProductOperation
+ruleProductOperation
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getProductOperationAccess().getAlternatives()); }
+(rule__ProductOperation__Alternatives)
+{ after(grammarAccess.getProductOperationAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Rule TermOperation
+ruleTermOperation
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getTermOperationAccess().getAlternatives()); }
+(rule__TermOperation__Alternatives)
+{ after(grammarAccess.getTermOperationAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Rule CompareOperation
+ruleCompareOperation
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getCompareOperationAccess().getAlternatives()); }
+(rule__CompareOperation__Alternatives)
+{ after(grammarAccess.getCompareOperationAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Rule BooleanOperation
+ruleBooleanOperation
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getBooleanOperationAccess().getAlternatives()); }
+(rule__BooleanOperation__Alternatives)
+{ after(grammarAccess.getBooleanOperationAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+rule__EString__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEStringAccess().getSTRINGTerminalRuleCall_0()); }
+	RULE_STRING
+{ after(grammarAccess.getEStringAccess().getSTRINGTerminalRuleCall_0()); }
+)
+
+    |(
+{ before(grammarAccess.getEStringAccess().getIDTerminalRuleCall_1()); }
+	RULE_ID
+{ after(grammarAccess.getEStringAccess().getIDTerminalRuleCall_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EBoolean__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEBooleanAccess().getTrueKeyword_0()); }
+
+	'true' 
+
+{ after(grammarAccess.getEBooleanAccess().getTrueKeyword_0()); }
+)
+
+    |(
+{ before(grammarAccess.getEBooleanAccess().getFalseKeyword_1()); }
+
+	'false' 
+
+{ after(grammarAccess.getEBooleanAccess().getFalseKeyword_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__UnaryBooleanExpression__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getUnaryBooleanExpressionAccess().getGroup_0()); }
+(rule__UnaryBooleanExpression__Group_0__0)
+{ after(grammarAccess.getUnaryBooleanExpressionAccess().getGroup_0()); }
+)
+
+    |(
+{ before(grammarAccess.getUnaryBooleanExpressionAccess().getComparisonParserRuleCall_1()); }
+	ruleComparison
+{ after(grammarAccess.getUnaryBooleanExpressionAccess().getComparisonParserRuleCall_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Atom__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAtomAccess().getLiteralParserRuleCall_0()); }
+	ruleLiteral
+{ after(grammarAccess.getAtomAccess().getLiteralParserRuleCall_0()); }
+)
+
+    |(
+{ before(grammarAccess.getAtomAccess().getGroup_1()); }
+(rule__Atom__Group_1__0)
+{ after(grammarAccess.getAtomAccess().getGroup_1()); }
+)
+
+    |(
+{ before(grammarAccess.getAtomAccess().getFunctionParserRuleCall_2()); }
+	ruleFunction
+{ after(grammarAccess.getAtomAccess().getFunctionParserRuleCall_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Literal__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getLiteralAccess().getNumberLiteralParserRuleCall_0()); }
+	ruleNumberLiteral
+{ after(grammarAccess.getLiteralAccess().getNumberLiteralParserRuleCall_0()); }
+)
+
+    |(
+{ before(grammarAccess.getLiteralAccess().getBooleanLiteralParserRuleCall_1()); }
+	ruleBooleanLiteral
+{ after(grammarAccess.getLiteralAccess().getBooleanLiteralParserRuleCall_1()); }
+)
+
+    |(
+{ before(grammarAccess.getLiteralAccess().getFormalParameterParserRuleCall_2()); }
+	ruleFormalParameter
+{ after(grammarAccess.getLiteralAccess().getFormalParameterParserRuleCall_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NumberLiteral__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getNumberLiteralAccess().getIntLiteralParserRuleCall_0()); }
+	ruleIntLiteral
+{ after(grammarAccess.getNumberLiteralAccess().getIntLiteralParserRuleCall_0()); }
+)
+
+    |(
+{ before(grammarAccess.getNumberLiteralAccess().getDoubleLiteralParserRuleCall_1()); }
+	ruleDoubleLiteral
+{ after(grammarAccess.getNumberLiteralAccess().getDoubleLiteralParserRuleCall_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ProductOperation__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getProductOperationAccess().getMULTEnumLiteralDeclaration_0()); }
+(	'*' 
+)
+{ after(grammarAccess.getProductOperationAccess().getMULTEnumLiteralDeclaration_0()); }
+)
+
+    |(
+{ before(grammarAccess.getProductOperationAccess().getDIVEnumLiteralDeclaration_1()); }
+(	'/' 
+)
+{ after(grammarAccess.getProductOperationAccess().getDIVEnumLiteralDeclaration_1()); }
+)
+
+    |(
+{ before(grammarAccess.getProductOperationAccess().getMODEnumLiteralDeclaration_2()); }
+(	'%' 
+)
+{ after(grammarAccess.getProductOperationAccess().getMODEnumLiteralDeclaration_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__TermOperation__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getTermOperationAccess().getADDEnumLiteralDeclaration_0()); }
+(	'+' 
+)
+{ after(grammarAccess.getTermOperationAccess().getADDEnumLiteralDeclaration_0()); }
+)
+
+    |(
+{ before(grammarAccess.getTermOperationAccess().getSUBEnumLiteralDeclaration_1()); }
+(	'-' 
+)
+{ after(grammarAccess.getTermOperationAccess().getSUBEnumLiteralDeclaration_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CompareOperation__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getCompareOperationAccess().getGREATEREnumLiteralDeclaration_0()); }
+(	'>' 
+)
+{ after(grammarAccess.getCompareOperationAccess().getGREATEREnumLiteralDeclaration_0()); }
+)
+
+    |(
+{ before(grammarAccess.getCompareOperationAccess().getLESSEnumLiteralDeclaration_1()); }
+(	'<' 
+)
+{ after(grammarAccess.getCompareOperationAccess().getLESSEnumLiteralDeclaration_1()); }
+)
+
+    |(
+{ before(grammarAccess.getCompareOperationAccess().getEQUALSEnumLiteralDeclaration_2()); }
+(	'=' 
+)
+{ after(grammarAccess.getCompareOperationAccess().getEQUALSEnumLiteralDeclaration_2()); }
+)
+
+    |(
+{ before(grammarAccess.getCompareOperationAccess().getNOTEQUALEnumLiteralDeclaration_3()); }
+(	'!=' 
+)
+{ after(grammarAccess.getCompareOperationAccess().getNOTEQUALEnumLiteralDeclaration_3()); }
+)
+
+    |(
+{ before(grammarAccess.getCompareOperationAccess().getLESSEQUALEnumLiteralDeclaration_4()); }
+(	'<=' 
+)
+{ after(grammarAccess.getCompareOperationAccess().getLESSEQUALEnumLiteralDeclaration_4()); }
+)
+
+    |(
+{ before(grammarAccess.getCompareOperationAccess().getGREATEREQUALEnumLiteralDeclaration_5()); }
+(	'>=' 
+)
+{ after(grammarAccess.getCompareOperationAccess().getGREATEREQUALEnumLiteralDeclaration_5()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__BooleanOperation__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getBooleanOperationAccess().getANDEnumLiteralDeclaration_0()); }
+(	'AND' 
+)
+{ after(grammarAccess.getBooleanOperationAccess().getANDEnumLiteralDeclaration_0()); }
+)
+
+    |(
+{ before(grammarAccess.getBooleanOperationAccess().getOREnumLiteralDeclaration_1()); }
+(	'OR' 
+)
+{ after(grammarAccess.getBooleanOperationAccess().getOREnumLiteralDeclaration_1()); }
+)
+
+    |(
+{ before(grammarAccess.getBooleanOperationAccess().getXOREnumLiteralDeclaration_2()); }
+(	'XOR' 
+)
+{ after(grammarAccess.getBooleanOperationAccess().getXOREnumLiteralDeclaration_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+rule__Double__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Double__Group__0__Impl
+	rule__Double__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Double__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getDoubleAccess().getHyphenMinusKeyword_0()); }
+(
+	'-' 
+)?
+{ after(grammarAccess.getDoubleAccess().getHyphenMinusKeyword_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Double__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Double__Group__1__Impl
+	rule__Double__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Double__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getDoubleAccess().getINTTerminalRuleCall_1()); }
+	RULE_INT
+{ after(grammarAccess.getDoubleAccess().getINTTerminalRuleCall_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Double__Group__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Double__Group__2__Impl
+	rule__Double__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Double__Group__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getDoubleAccess().getFullStopKeyword_2()); }
+
+	'.' 
+
+{ after(grammarAccess.getDoubleAccess().getFullStopKeyword_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Double__Group__3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Double__Group__3__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Double__Group__3__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getDoubleAccess().getINTTerminalRuleCall_3()); }
+	RULE_INT
+{ after(grammarAccess.getDoubleAccess().getINTTerminalRuleCall_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+
+rule__Integer__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Integer__Group__0__Impl
+	rule__Integer__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Integer__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getIntegerAccess().getHyphenMinusKeyword_0()); }
+(
+	'-' 
+)?
+{ after(grammarAccess.getIntegerAccess().getHyphenMinusKeyword_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Integer__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Integer__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Integer__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getIntegerAccess().getINTTerminalRuleCall_1()); }
+	RULE_INT
+{ after(grammarAccess.getIntegerAccess().getINTTerminalRuleCall_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__IfElseExpression__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__IfElseExpression__Group__0__Impl
+	rule__IfElseExpression__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IfElseExpression__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getIfElseExpressionAccess().getBinaryBooleanExpressionParserRuleCall_0()); }
+	ruleBinaryBooleanExpression
+{ after(grammarAccess.getIfElseExpressionAccess().getBinaryBooleanExpressionParserRuleCall_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__IfElseExpression__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__IfElseExpression__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IfElseExpression__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getIfElseExpressionAccess().getGroup_1()); }
+(rule__IfElseExpression__Group_1__0)?
+{ after(grammarAccess.getIfElseExpressionAccess().getGroup_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__IfElseExpression__Group_1__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__IfElseExpression__Group_1__0__Impl
+	rule__IfElseExpression__Group_1__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IfElseExpression__Group_1__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getIfElseExpressionAccess().getIfElseExpressionConditionAction_1_0()); }
+(
+
+)
+{ after(grammarAccess.getIfElseExpressionAccess().getIfElseExpressionConditionAction_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__IfElseExpression__Group_1__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__IfElseExpression__Group_1__1__Impl
+	rule__IfElseExpression__Group_1__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IfElseExpression__Group_1__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getIfElseExpressionAccess().getQuestionMarkKeyword_1_1()); }
+
+	'?' 
+
+{ after(grammarAccess.getIfElseExpressionAccess().getQuestionMarkKeyword_1_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__IfElseExpression__Group_1__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__IfElseExpression__Group_1__2__Impl
+	rule__IfElseExpression__Group_1__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IfElseExpression__Group_1__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getIfElseExpressionAccess().getTrueExpAssignment_1_2()); }
+(rule__IfElseExpression__TrueExpAssignment_1_2)
+{ after(grammarAccess.getIfElseExpressionAccess().getTrueExpAssignment_1_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__IfElseExpression__Group_1__3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__IfElseExpression__Group_1__3__Impl
+	rule__IfElseExpression__Group_1__4
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IfElseExpression__Group_1__3__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getIfElseExpressionAccess().getColonKeyword_1_3()); }
+
+	':' 
+
+{ after(grammarAccess.getIfElseExpressionAccess().getColonKeyword_1_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__IfElseExpression__Group_1__4
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__IfElseExpression__Group_1__4__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IfElseExpression__Group_1__4__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getIfElseExpressionAccess().getFalseExpAssignment_1_4()); }
+(rule__IfElseExpression__FalseExpAssignment_1_4)
+{ after(grammarAccess.getIfElseExpressionAccess().getFalseExpAssignment_1_4()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+rule__BinaryBooleanExpression__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__BinaryBooleanExpression__Group__0__Impl
+	rule__BinaryBooleanExpression__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__BinaryBooleanExpression__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getBinaryBooleanExpressionAccess().getUnaryBooleanExpressionParserRuleCall_0()); }
+	ruleUnaryBooleanExpression
+{ after(grammarAccess.getBinaryBooleanExpressionAccess().getUnaryBooleanExpressionParserRuleCall_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__BinaryBooleanExpression__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__BinaryBooleanExpression__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__BinaryBooleanExpression__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getBinaryBooleanExpressionAccess().getGroup_1()); }
+(rule__BinaryBooleanExpression__Group_1__0)*
+{ after(grammarAccess.getBinaryBooleanExpressionAccess().getGroup_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__BinaryBooleanExpression__Group_1__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__BinaryBooleanExpression__Group_1__0__Impl
+	rule__BinaryBooleanExpression__Group_1__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__BinaryBooleanExpression__Group_1__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getBinaryBooleanExpressionAccess().getBinaryBooleanExpressionLeftAction_1_0()); }
+(
+
+)
+{ after(grammarAccess.getBinaryBooleanExpressionAccess().getBinaryBooleanExpressionLeftAction_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__BinaryBooleanExpression__Group_1__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__BinaryBooleanExpression__Group_1__1__Impl
+	rule__BinaryBooleanExpression__Group_1__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__BinaryBooleanExpression__Group_1__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getBinaryBooleanExpressionAccess().getOperationAssignment_1_1()); }
+(rule__BinaryBooleanExpression__OperationAssignment_1_1)
+{ after(grammarAccess.getBinaryBooleanExpressionAccess().getOperationAssignment_1_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__BinaryBooleanExpression__Group_1__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__BinaryBooleanExpression__Group_1__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__BinaryBooleanExpression__Group_1__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getBinaryBooleanExpressionAccess().getRightAssignment_1_2()); }
+(rule__BinaryBooleanExpression__RightAssignment_1_2)
+{ after(grammarAccess.getBinaryBooleanExpressionAccess().getRightAssignment_1_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+rule__UnaryBooleanExpression__Group_0__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__UnaryBooleanExpression__Group_0__0__Impl
+	rule__UnaryBooleanExpression__Group_0__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__UnaryBooleanExpression__Group_0__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getUnaryBooleanExpressionAccess().getNOTKeyword_0_0()); }
+
+	'NOT' 
+
+{ after(grammarAccess.getUnaryBooleanExpressionAccess().getNOTKeyword_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__UnaryBooleanExpression__Group_0__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__UnaryBooleanExpression__Group_0__1__Impl
+	rule__UnaryBooleanExpression__Group_0__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__UnaryBooleanExpression__Group_0__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getUnaryBooleanExpressionAccess().getComparisonParserRuleCall_0_1()); }
+	ruleComparison
+{ after(grammarAccess.getUnaryBooleanExpressionAccess().getComparisonParserRuleCall_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__UnaryBooleanExpression__Group_0__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__UnaryBooleanExpression__Group_0__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__UnaryBooleanExpression__Group_0__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getUnaryBooleanExpressionAccess().getUnaryBooleanExpressionInnerAction_0_2()); }
+(
+
+)
+{ after(grammarAccess.getUnaryBooleanExpressionAccess().getUnaryBooleanExpressionInnerAction_0_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+rule__Comparison__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Comparison__Group__0__Impl
+	rule__Comparison__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Comparison__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getComparisonAccess().getTermParserRuleCall_0()); }
+	ruleTerm
+{ after(grammarAccess.getComparisonAccess().getTermParserRuleCall_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Comparison__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Comparison__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Comparison__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getComparisonAccess().getGroup_1()); }
+(rule__Comparison__Group_1__0)*
+{ after(grammarAccess.getComparisonAccess().getGroup_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__Comparison__Group_1__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Comparison__Group_1__0__Impl
+	rule__Comparison__Group_1__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Comparison__Group_1__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getComparisonAccess().getComparisonLeftAction_1_0()); }
+(
+
+)
+{ after(grammarAccess.getComparisonAccess().getComparisonLeftAction_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Comparison__Group_1__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Comparison__Group_1__1__Impl
+	rule__Comparison__Group_1__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Comparison__Group_1__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getComparisonAccess().getOperationAssignment_1_1()); }
+(rule__Comparison__OperationAssignment_1_1)
+{ after(grammarAccess.getComparisonAccess().getOperationAssignment_1_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Comparison__Group_1__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Comparison__Group_1__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Comparison__Group_1__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getComparisonAccess().getRightAssignment_1_2()); }
+(rule__Comparison__RightAssignment_1_2)
+{ after(grammarAccess.getComparisonAccess().getRightAssignment_1_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+rule__Term__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Term__Group__0__Impl
+	rule__Term__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Term__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getTermAccess().getProductParserRuleCall_0()); }
+	ruleProduct
+{ after(grammarAccess.getTermAccess().getProductParserRuleCall_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Term__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Term__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Term__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getTermAccess().getGroup_1()); }
+(rule__Term__Group_1__0)*
+{ after(grammarAccess.getTermAccess().getGroup_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__Term__Group_1__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Term__Group_1__0__Impl
+	rule__Term__Group_1__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Term__Group_1__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getTermAccess().getTermLeftAction_1_0()); }
+(
+
+)
+{ after(grammarAccess.getTermAccess().getTermLeftAction_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Term__Group_1__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Term__Group_1__1__Impl
+	rule__Term__Group_1__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Term__Group_1__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getTermAccess().getOperationAssignment_1_1()); }
+(rule__Term__OperationAssignment_1_1)
+{ after(grammarAccess.getTermAccess().getOperationAssignment_1_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Term__Group_1__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Term__Group_1__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Term__Group_1__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getTermAccess().getRightAssignment_1_2()); }
+(rule__Term__RightAssignment_1_2)
+{ after(grammarAccess.getTermAccess().getRightAssignment_1_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+rule__Product__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Product__Group__0__Impl
+	rule__Product__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Product__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getProductAccess().getPowerParserRuleCall_0()); }
+	rulePower
+{ after(grammarAccess.getProductAccess().getPowerParserRuleCall_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Product__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Product__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Product__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getProductAccess().getGroup_1()); }
+(rule__Product__Group_1__0)*
+{ after(grammarAccess.getProductAccess().getGroup_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__Product__Group_1__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Product__Group_1__0__Impl
+	rule__Product__Group_1__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Product__Group_1__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getProductAccess().getProductLeftAction_1_0()); }
+(
+
+)
+{ after(grammarAccess.getProductAccess().getProductLeftAction_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Product__Group_1__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Product__Group_1__1__Impl
+	rule__Product__Group_1__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Product__Group_1__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getProductAccess().getOperationAssignment_1_1()); }
+(rule__Product__OperationAssignment_1_1)
+{ after(grammarAccess.getProductAccess().getOperationAssignment_1_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Product__Group_1__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Product__Group_1__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Product__Group_1__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getProductAccess().getRightAssignment_1_2()); }
+(rule__Product__RightAssignment_1_2)
+{ after(grammarAccess.getProductAccess().getRightAssignment_1_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+rule__Power__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Power__Group__0__Impl
+	rule__Power__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Power__Group__0__Impl
     @init {
 		int stackSize = keepStackSize();
     }
-	:
+:
 (
-{ before(grammarAccess.getStringsAccess().getGroup()); }
-(rule__Strings__Group__0)
-{ after(grammarAccess.getStringsAccess().getGroup()); }
+{ before(grammarAccess.getPowerAccess().getAtomParserRuleCall_0()); }
+	ruleAtom
+{ after(grammarAccess.getPowerAccess().getAtomParserRuleCall_0()); }
 )
 
 ;
@@ -195,26 +2165,26 @@ finally {
 }
 
 
-
-// Entry rule entryRuleDECIMAL
-entryRuleDECIMAL 
+rule__Power__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
 :
-{ before(grammarAccess.getDECIMALRule()); }
-	 ruleDECIMAL
-{ after(grammarAccess.getDECIMALRule()); } 
-	 EOF 
+	rule__Power__Group__1__Impl
 ;
+finally {
+	restoreStackSize(stackSize);
+}
 
-// Rule DECIMAL
-ruleDECIMAL
+rule__Power__Group__1__Impl
     @init {
 		int stackSize = keepStackSize();
     }
-	:
+:
 (
-{ before(grammarAccess.getDECIMALAccess().getGroup()); }
-(rule__DECIMAL__Group__0)
-{ after(grammarAccess.getDECIMALAccess().getGroup()); }
+{ before(grammarAccess.getPowerAccess().getGroup_1()); }
+(rule__Power__Group_1__0)*
+{ after(grammarAccess.getPowerAccess().getGroup_1()); }
 )
 
 ;
@@ -224,53 +2194,32 @@ finally {
 
 
 
-// Entry rule entryRuleE_STRING
-entryRuleE_STRING 
-:
-{ before(grammarAccess.getE_STRINGRule()); }
-	 ruleE_STRING
-{ after(grammarAccess.getE_STRINGRule()); } 
-	 EOF 
-;
 
-// Rule E_STRING
-ruleE_STRING
+
+
+rule__Power__Group_1__0
     @init {
 		int stackSize = keepStackSize();
     }
-	:
-(
-{ before(grammarAccess.getE_STRINGAccess().getAlternatives()); }
-(rule__E_STRING__Alternatives)
-{ after(grammarAccess.getE_STRINGAccess().getAlternatives()); }
-)
-
+:
+	rule__Power__Group_1__0__Impl
+	rule__Power__Group_1__1
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-
-
-// Entry rule entryRuleOperations
-entryRuleOperations 
-:
-{ before(grammarAccess.getOperationsRule()); }
-	 ruleOperations
-{ after(grammarAccess.getOperationsRule()); } 
-	 EOF 
-;
-
-// Rule Operations
-ruleOperations
+rule__Power__Group_1__0__Impl
     @init {
 		int stackSize = keepStackSize();
     }
-	:
+:
+(
+{ before(grammarAccess.getPowerAccess().getPowerBaseAction_1_0()); }
 (
-{ before(grammarAccess.getOperationsAccess().getTermOperationsAssignment()); }
-(rule__Operations__TermOperationsAssignment)
-{ after(grammarAccess.getOperationsAccess().getTermOperationsAssignment()); }
+
+)
+{ after(grammarAccess.getPowerAccess().getPowerBaseAction_1_0()); }
 )
 
 ;
@@ -279,48 +2228,29 @@ finally {
 }
 
 
-
-
-// Rule OperationsType
-ruleOperationsType
+rule__Power__Group_1__1
     @init {
 		int stackSize = keepStackSize();
     }
 :
-(
-{ before(grammarAccess.getOperationsTypeAccess().getAlternatives()); }
-(rule__OperationsType__Alternatives)
-{ after(grammarAccess.getOperationsTypeAccess().getAlternatives()); }
-)
-
+	rule__Power__Group_1__1__Impl
+	rule__Power__Group_1__2
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-
-
-rule__Types__Alternatives
+rule__Power__Group_1__1__Impl
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getTypesAccess().getArithmeticsParserRuleCall_0()); }
-	ruleArithmetics
-{ after(grammarAccess.getTypesAccess().getArithmeticsParserRuleCall_0()); }
-)
+{ before(grammarAccess.getPowerAccess().getCircumflexAccentKeyword_1_1()); }
 
-    |(
-{ before(grammarAccess.getTypesAccess().getStringsParserRuleCall_1()); }
-	ruleStrings
-{ after(grammarAccess.getTypesAccess().getStringsParserRuleCall_1()); }
-)
+	'^' 
 
-    |(
-{ before(grammarAccess.getTypesAccess().getGroup_2()); }
-(rule__Types__Group_2__0)
-{ after(grammarAccess.getTypesAccess().getGroup_2()); }
+{ after(grammarAccess.getPowerAccess().getCircumflexAccentKeyword_1_1()); }
 )
 
 ;
@@ -328,129 +2258,64 @@ finally {
 	restoreStackSize(stackSize);
 }
 
-rule__E_STRING__Alternatives
+
+rule__Power__Group_1__2
     @init {
 		int stackSize = keepStackSize();
     }
 :
-(
-{ before(grammarAccess.getE_STRINGAccess().getSTRINGTerminalRuleCall_0()); }
-	RULE_STRING
-{ after(grammarAccess.getE_STRINGAccess().getSTRINGTerminalRuleCall_0()); }
-)
-
-    |(
-{ before(grammarAccess.getE_STRINGAccess().getIDTerminalRuleCall_1()); }
-	RULE_ID
-{ after(grammarAccess.getE_STRINGAccess().getIDTerminalRuleCall_1()); }
-)
-
+	rule__Power__Group_1__2__Impl
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__OperationsType__Alternatives
+rule__Power__Group_1__2__Impl
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getOperationsTypeAccess().getADDEnumLiteralDeclaration_0()); }
-(	'+' 
-)
-{ after(grammarAccess.getOperationsTypeAccess().getADDEnumLiteralDeclaration_0()); }
+{ before(grammarAccess.getPowerAccess().getExponentAssignment_1_2()); }
+(rule__Power__ExponentAssignment_1_2)
+{ after(grammarAccess.getPowerAccess().getExponentAssignment_1_2()); }
 )
 
-    |(
-{ before(grammarAccess.getOperationsTypeAccess().getSUBEnumLiteralDeclaration_1()); }
-(	'-' 
-)
-{ after(grammarAccess.getOperationsTypeAccess().getSUBEnumLiteralDeclaration_1()); }
-)
-
-    |(
-{ before(grammarAccess.getOperationsTypeAccess().getMULTEnumLiteralDeclaration_2()); }
-(	'*' 
-)
-{ after(grammarAccess.getOperationsTypeAccess().getMULTEnumLiteralDeclaration_2()); }
-)
+;
+finally {
+	restoreStackSize(stackSize);
+}
 
-    |(
-{ before(grammarAccess.getOperationsTypeAccess().getDIVEnumLiteralDeclaration_3()); }
-(	'/' 
-)
-{ after(grammarAccess.getOperationsTypeAccess().getDIVEnumLiteralDeclaration_3()); }
-)
 
-    |(
-{ before(grammarAccess.getOperationsTypeAccess().getMODEnumLiteralDeclaration_4()); }
-(	'%' 
-)
-{ after(grammarAccess.getOperationsTypeAccess().getMODEnumLiteralDeclaration_4()); }
-)
 
-    |(
-{ before(grammarAccess.getOperationsTypeAccess().getGREATEREnumLiteralDeclaration_5()); }
-(	'>' 
-)
-{ after(grammarAccess.getOperationsTypeAccess().getGREATEREnumLiteralDeclaration_5()); }
-)
 
-    |(
-{ before(grammarAccess.getOperationsTypeAccess().getLESSEnumLiteralDeclaration_6()); }
-(	'<' 
-)
-{ after(grammarAccess.getOperationsTypeAccess().getLESSEnumLiteralDeclaration_6()); }
-)
 
-    |(
-{ before(grammarAccess.getOperationsTypeAccess().getEQUALSEnumLiteralDeclaration_7()); }
-(	'=' 
-)
-{ after(grammarAccess.getOperationsTypeAccess().getEQUALSEnumLiteralDeclaration_7()); }
-)
 
-    |(
-{ before(grammarAccess.getOperationsTypeAccess().getNOTEQUALEnumLiteralDeclaration_8()); }
-(	'!=' 
-)
-{ after(grammarAccess.getOperationsTypeAccess().getNOTEQUALEnumLiteralDeclaration_8()); }
-)
 
-    |(
-{ before(grammarAccess.getOperationsTypeAccess().getLESSEQUALEnumLiteralDeclaration_9()); }
-(	'<=' 
-)
-{ after(grammarAccess.getOperationsTypeAccess().getLESSEQUALEnumLiteralDeclaration_9()); }
-)
 
-    |(
-{ before(grammarAccess.getOperationsTypeAccess().getGREATEREQUALEnumLiteralDeclaration_10()); }
-(	'>=' 
-)
-{ after(grammarAccess.getOperationsTypeAccess().getGREATEREQUALEnumLiteralDeclaration_10()); }
-)
+rule__Atom__Group_1__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Atom__Group_1__0__Impl
+	rule__Atom__Group_1__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
 
-    |(
-{ before(grammarAccess.getOperationsTypeAccess().getANDEnumLiteralDeclaration_11()); }
-(	'AND' 
-)
-{ after(grammarAccess.getOperationsTypeAccess().getANDEnumLiteralDeclaration_11()); }
-)
+rule__Atom__Group_1__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAtomAccess().getLeftParenthesisKeyword_1_0()); }
 
-    |(
-{ before(grammarAccess.getOperationsTypeAccess().getOREnumLiteralDeclaration_12()); }
-(	'OR' 
-)
-{ after(grammarAccess.getOperationsTypeAccess().getOREnumLiteralDeclaration_12()); }
-)
+	'(' 
 
-    |(
-{ before(grammarAccess.getOperationsTypeAccess().getXOREnumLiteralDeclaration_13()); }
-(	'XOR' 
-)
-{ after(grammarAccess.getOperationsTypeAccess().getXOREnumLiteralDeclaration_13()); }
+{ after(grammarAccess.getAtomAccess().getLeftParenthesisKeyword_1_0()); }
 )
 
 ;
@@ -459,28 +2324,27 @@ finally {
 }
 
 
-
-rule__Term__Group__0
+rule__Atom__Group_1__1
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__Term__Group__0__Impl
-	rule__Term__Group__1
+	rule__Atom__Group_1__1__Impl
+	rule__Atom__Group_1__2
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__Term__Group__0__Impl
+rule__Atom__Group_1__1__Impl
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getTermAccess().getTypesParserRuleCall_0()); }
-	ruleTypes
-{ after(grammarAccess.getTermAccess().getTypesParserRuleCall_0()); }
+{ before(grammarAccess.getAtomAccess().getRootExpressionParserRuleCall_1_1()); }
+	ruleRootExpression
+{ after(grammarAccess.getAtomAccess().getRootExpressionParserRuleCall_1_1()); }
 )
 
 ;
@@ -489,26 +2353,28 @@ finally {
 }
 
 
-rule__Term__Group__1
+rule__Atom__Group_1__2
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__Term__Group__1__Impl
+	rule__Atom__Group_1__2__Impl
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__Term__Group__1__Impl
+rule__Atom__Group_1__2__Impl
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getTermAccess().getGroup_1()); }
-(rule__Term__Group_1__0)*
-{ after(grammarAccess.getTermAccess().getGroup_1()); }
+{ before(grammarAccess.getAtomAccess().getRightParenthesisKeyword_1_2()); }
+
+	')' 
+
+{ after(grammarAccess.getAtomAccess().getRightParenthesisKeyword_1_2()); }
 )
 
 ;
@@ -521,29 +2387,29 @@ finally {
 
 
 
-rule__Term__Group_1__0
+
+
+rule__Function__Group__0
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__Term__Group_1__0__Impl
-	rule__Term__Group_1__1
+	rule__Function__Group__0__Impl
+	rule__Function__Group__1
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__Term__Group_1__0__Impl
+rule__Function__Group__0__Impl
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getTermAccess().getTermLeftAction_1_0()); }
-(
-
-)
-{ after(grammarAccess.getTermAccess().getTermLeftAction_1_0()); }
+{ before(grammarAccess.getFunctionAccess().getNameAssignment_0()); }
+(rule__Function__NameAssignment_0)
+{ after(grammarAccess.getFunctionAccess().getNameAssignment_0()); }
 )
 
 ;
@@ -552,27 +2418,29 @@ finally {
 }
 
 
-rule__Term__Group_1__1
+rule__Function__Group__1
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__Term__Group_1__1__Impl
-	rule__Term__Group_1__2
+	rule__Function__Group__1__Impl
+	rule__Function__Group__2
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__Term__Group_1__1__Impl
+rule__Function__Group__1__Impl
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getTermAccess().getOperationsAssignment_1_1()); }
-(rule__Term__OperationsAssignment_1_1)
-{ after(grammarAccess.getTermAccess().getOperationsAssignment_1_1()); }
+{ before(grammarAccess.getFunctionAccess().getLeftParenthesisKeyword_1()); }
+
+	'(' 
+
+{ after(grammarAccess.getFunctionAccess().getLeftParenthesisKeyword_1()); }
 )
 
 ;
@@ -581,26 +2449,27 @@ finally {
 }
 
 
-rule__Term__Group_1__2
+rule__Function__Group__2
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__Term__Group_1__2__Impl
+	rule__Function__Group__2__Impl
+	rule__Function__Group__3
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__Term__Group_1__2__Impl
+rule__Function__Group__2__Impl
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getTermAccess().getRightAssignment_1_2()); }
-(rule__Term__RightAssignment_1_2)
-{ after(grammarAccess.getTermAccess().getRightAssignment_1_2()); }
+{ before(grammarAccess.getFunctionAccess().getGroup_2()); }
+(rule__Function__Group_2__0)?
+{ after(grammarAccess.getFunctionAccess().getGroup_2()); }
 )
 
 ;
@@ -609,35 +2478,28 @@ finally {
 }
 
 
-
-
-
-
-
-
-rule__Types__Group_2__0
+rule__Function__Group__3
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__Types__Group_2__0__Impl
-	rule__Types__Group_2__1
+	rule__Function__Group__3__Impl
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__Types__Group_2__0__Impl
+rule__Function__Group__3__Impl
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getTypesAccess().getLeftParenthesisKeyword_2_0()); }
+{ before(grammarAccess.getFunctionAccess().getRightParenthesisKeyword_3()); }
 
-	'(' 
+	')' 
 
-{ after(grammarAccess.getTypesAccess().getLeftParenthesisKeyword_2_0()); }
+{ after(grammarAccess.getFunctionAccess().getRightParenthesisKeyword_3()); }
 )
 
 ;
@@ -646,27 +2508,35 @@ finally {
 }
 
 
-rule__Types__Group_2__1
+
+
+
+
+
+
+
+
+rule__Function__Group_2__0
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__Types__Group_2__1__Impl
-	rule__Types__Group_2__2
+	rule__Function__Group_2__0__Impl
+	rule__Function__Group_2__1
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__Types__Group_2__1__Impl
+rule__Function__Group_2__0__Impl
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getTypesAccess().getTermParserRuleCall_2_1()); }
-	ruleTerm
-{ after(grammarAccess.getTypesAccess().getTermParserRuleCall_2_1()); }
+{ before(grammarAccess.getFunctionAccess().getParametersAssignment_2_0()); }
+(rule__Function__ParametersAssignment_2_0)
+{ after(grammarAccess.getFunctionAccess().getParametersAssignment_2_0()); }
 )
 
 ;
@@ -675,28 +2545,26 @@ finally {
 }
 
 
-rule__Types__Group_2__2
+rule__Function__Group_2__1
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__Types__Group_2__2__Impl
+	rule__Function__Group_2__1__Impl
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__Types__Group_2__2__Impl
+rule__Function__Group_2__1__Impl
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getTypesAccess().getRightParenthesisKeyword_2_2()); }
-
-	')' 
-
-{ after(grammarAccess.getTypesAccess().getRightParenthesisKeyword_2_2()); }
+{ before(grammarAccess.getFunctionAccess().getGroup_2_1()); }
+(rule__Function__Group_2_1__0)*
+{ after(grammarAccess.getFunctionAccess().getGroup_2_1()); }
 )
 
 ;
@@ -709,31 +2577,29 @@ finally {
 
 
 
-
-
-rule__Arithmetics__Group__0
+rule__Function__Group_2_1__0
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__Arithmetics__Group__0__Impl
-	rule__Arithmetics__Group__1
+	rule__Function__Group_2_1__0__Impl
+	rule__Function__Group_2_1__1
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__Arithmetics__Group__0__Impl
+rule__Function__Group_2_1__0__Impl
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getArithmeticsAccess().getExpressionAction_0()); }
-(
+{ before(grammarAccess.getFunctionAccess().getCommaKeyword_2_1_0()); }
 
-)
-{ after(grammarAccess.getArithmeticsAccess().getExpressionAction_0()); }
+	',' 
+
+{ after(grammarAccess.getFunctionAccess().getCommaKeyword_2_1_0()); }
 )
 
 ;
@@ -742,26 +2608,26 @@ finally {
 }
 
 
-rule__Arithmetics__Group__1
+rule__Function__Group_2_1__1
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__Arithmetics__Group__1__Impl
+	rule__Function__Group_2_1__1__Impl
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__Arithmetics__Group__1__Impl
+rule__Function__Group_2_1__1__Impl
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getArithmeticsAccess().getDECIMALParserRuleCall_1()); }
-	ruleDECIMAL
-{ after(grammarAccess.getArithmeticsAccess().getDECIMALParserRuleCall_1()); }
+{ before(grammarAccess.getFunctionAccess().getParametersAssignment_2_1_1()); }
+(rule__Function__ParametersAssignment_2_1_1)
+{ after(grammarAccess.getFunctionAccess().getParametersAssignment_2_1_1()); }
 )
 
 ;
@@ -774,29 +2640,30 @@ finally {
 
 
 
-rule__Strings__Group__0
+
+rule__Model__TermsAssignment
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__Strings__Group__0__Impl
-	rule__Strings__Group__1
+(
+{ before(grammarAccess.getModelAccess().getTermsIfElseExpressionParserRuleCall_0()); }
+	ruleIfElseExpression{ after(grammarAccess.getModelAccess().getTermsIfElseExpressionParserRuleCall_0()); }
+)
+
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__Strings__Group__0__Impl
+rule__IfElseExpression__TrueExpAssignment_1_2
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getStringsAccess().getExpressionAction_0()); }
-(
-
-)
-{ after(grammarAccess.getStringsAccess().getExpressionAction_0()); }
+{ before(grammarAccess.getIfElseExpressionAccess().getTrueExpIfElseExpressionParserRuleCall_1_2_0()); }
+	ruleIfElseExpression{ after(grammarAccess.getIfElseExpressionAccess().getTrueExpIfElseExpressionParserRuleCall_1_2_0()); }
 )
 
 ;
@@ -804,27 +2671,29 @@ finally {
 	restoreStackSize(stackSize);
 }
 
-
-rule__Strings__Group__1
+rule__IfElseExpression__FalseExpAssignment_1_4
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__Strings__Group__1__Impl
+(
+{ before(grammarAccess.getIfElseExpressionAccess().getFalseExpIfElseExpressionParserRuleCall_1_4_0()); }
+	ruleIfElseExpression{ after(grammarAccess.getIfElseExpressionAccess().getFalseExpIfElseExpressionParserRuleCall_1_4_0()); }
+)
+
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__Strings__Group__1__Impl
+rule__BinaryBooleanExpression__OperationAssignment_1_1
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getStringsAccess().getE_STRINGParserRuleCall_1()); }
-	ruleE_STRING
-{ after(grammarAccess.getStringsAccess().getE_STRINGParserRuleCall_1()); }
+{ before(grammarAccess.getBinaryBooleanExpressionAccess().getOperationBooleanOperationEnumRuleCall_1_1_0()); }
+	ruleBooleanOperation{ after(grammarAccess.getBinaryBooleanExpressionAccess().getOperationBooleanOperationEnumRuleCall_1_1_0()); }
 )
 
 ;
@@ -832,34 +2701,29 @@ finally {
 	restoreStackSize(stackSize);
 }
 
-
-
-
-
-
-rule__DECIMAL__Group__0
+rule__BinaryBooleanExpression__RightAssignment_1_2
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__DECIMAL__Group__0__Impl
-	rule__DECIMAL__Group__1
+(
+{ before(grammarAccess.getBinaryBooleanExpressionAccess().getRightUnaryBooleanExpressionParserRuleCall_1_2_0()); }
+	ruleUnaryBooleanExpression{ after(grammarAccess.getBinaryBooleanExpressionAccess().getRightUnaryBooleanExpressionParserRuleCall_1_2_0()); }
+)
+
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__DECIMAL__Group__0__Impl
+rule__Comparison__OperationAssignment_1_1
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getDECIMALAccess().getHyphenMinusKeyword_0()); }
-(
-	'-' 
-)?
-{ after(grammarAccess.getDECIMALAccess().getHyphenMinusKeyword_0()); }
+{ before(grammarAccess.getComparisonAccess().getOperationCompareOperationEnumRuleCall_1_1_0()); }
+	ruleCompareOperation{ after(grammarAccess.getComparisonAccess().getOperationCompareOperationEnumRuleCall_1_1_0()); }
 )
 
 ;
@@ -867,28 +2731,29 @@ finally {
 	restoreStackSize(stackSize);
 }
 
-
-rule__DECIMAL__Group__1
+rule__Comparison__RightAssignment_1_2
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__DECIMAL__Group__1__Impl
-	rule__DECIMAL__Group__2
+(
+{ before(grammarAccess.getComparisonAccess().getRightTermParserRuleCall_1_2_0()); }
+	ruleTerm{ after(grammarAccess.getComparisonAccess().getRightTermParserRuleCall_1_2_0()); }
+)
+
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__DECIMAL__Group__1__Impl
+rule__Term__OperationAssignment_1_1
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getDECIMALAccess().getINTTerminalRuleCall_1()); }
-	RULE_INT
-{ after(grammarAccess.getDECIMALAccess().getINTTerminalRuleCall_1()); }
+{ before(grammarAccess.getTermAccess().getOperationTermOperationEnumRuleCall_1_1_0()); }
+	ruleTermOperation{ after(grammarAccess.getTermAccess().getOperationTermOperationEnumRuleCall_1_1_0()); }
 )
 
 ;
@@ -896,27 +2761,29 @@ finally {
 	restoreStackSize(stackSize);
 }
 
-
-rule__DECIMAL__Group__2
+rule__Term__RightAssignment_1_2
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__DECIMAL__Group__2__Impl
+(
+{ before(grammarAccess.getTermAccess().getRightProductParserRuleCall_1_2_0()); }
+	ruleProduct{ after(grammarAccess.getTermAccess().getRightProductParserRuleCall_1_2_0()); }
+)
+
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__DECIMAL__Group__2__Impl
+rule__Product__OperationAssignment_1_1
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getDECIMALAccess().getGroup_2()); }
-(rule__DECIMAL__Group_2__0)?
-{ after(grammarAccess.getDECIMALAccess().getGroup_2()); }
+{ before(grammarAccess.getProductAccess().getOperationProductOperationEnumRuleCall_1_1_0()); }
+	ruleProductOperation{ after(grammarAccess.getProductAccess().getOperationProductOperationEnumRuleCall_1_1_0()); }
 )
 
 ;
@@ -924,36 +2791,29 @@ finally {
 	restoreStackSize(stackSize);
 }
 
-
-
-
-
-
-
-
-rule__DECIMAL__Group_2__0
+rule__Product__RightAssignment_1_2
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__DECIMAL__Group_2__0__Impl
-	rule__DECIMAL__Group_2__1
+(
+{ before(grammarAccess.getProductAccess().getRightPowerParserRuleCall_1_2_0()); }
+	rulePower{ after(grammarAccess.getProductAccess().getRightPowerParserRuleCall_1_2_0()); }
+)
+
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__DECIMAL__Group_2__0__Impl
+rule__Power__ExponentAssignment_1_2
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getDECIMALAccess().getFullStopKeyword_2_0()); }
-
-	'.' 
-
-{ after(grammarAccess.getDECIMALAccess().getFullStopKeyword_2_0()); }
+{ before(grammarAccess.getPowerAccess().getExponentAtomParserRuleCall_1_2_0()); }
+	ruleAtom{ after(grammarAccess.getPowerAccess().getExponentAtomParserRuleCall_1_2_0()); }
 )
 
 ;
@@ -961,27 +2821,29 @@ finally {
 	restoreStackSize(stackSize);
 }
 
-
-rule__DECIMAL__Group_2__1
+rule__Function__NameAssignment_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
-	rule__DECIMAL__Group_2__1__Impl
+(
+{ before(grammarAccess.getFunctionAccess().getNameIDTerminalRuleCall_0_0()); }
+	RULE_ID{ after(grammarAccess.getFunctionAccess().getNameIDTerminalRuleCall_0_0()); }
+)
+
 ;
 finally {
 	restoreStackSize(stackSize);
 }
 
-rule__DECIMAL__Group_2__1__Impl
+rule__Function__ParametersAssignment_2_0
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getDECIMALAccess().getINTTerminalRuleCall_2_1()); }
-	RULE_INT
-{ after(grammarAccess.getDECIMALAccess().getINTTerminalRuleCall_2_1()); }
+{ before(grammarAccess.getFunctionAccess().getParametersRootExpressionParserRuleCall_2_0_0()); }
+	ruleRootExpression{ after(grammarAccess.getFunctionAccess().getParametersRootExpressionParserRuleCall_2_0_0()); }
 )
 
 ;
@@ -989,20 +2851,29 @@ finally {
 	restoreStackSize(stackSize);
 }
 
+rule__Function__ParametersAssignment_2_1_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getFunctionAccess().getParametersRootExpressionParserRuleCall_2_1_1_0()); }
+	ruleRootExpression{ after(grammarAccess.getFunctionAccess().getParametersRootExpressionParserRuleCall_2_1_1_0()); }
+)
 
+;
+finally {
+	restoreStackSize(stackSize);
+}
 
-
-
-
-
-rule__Model__TermsAssignment
+rule__FormalParameter__ValueAssignment
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getModelAccess().getTermsTermParserRuleCall_0()); }
-	ruleTerm{ after(grammarAccess.getModelAccess().getTermsTermParserRuleCall_0()); }
+{ before(grammarAccess.getFormalParameterAccess().getValueEStringParserRuleCall_0()); }
+	ruleEString{ after(grammarAccess.getFormalParameterAccess().getValueEStringParserRuleCall_0()); }
 )
 
 ;
@@ -1010,14 +2881,14 @@ finally {
 	restoreStackSize(stackSize);
 }
 
-rule__Term__OperationsAssignment_1_1
+rule__BooleanLiteral__ValueAssignment
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getTermAccess().getOperationsOperationsParserRuleCall_1_1_0()); }
-	ruleOperations{ after(grammarAccess.getTermAccess().getOperationsOperationsParserRuleCall_1_1_0()); }
+{ before(grammarAccess.getBooleanLiteralAccess().getValueEBooleanParserRuleCall_0()); }
+	ruleEBoolean{ after(grammarAccess.getBooleanLiteralAccess().getValueEBooleanParserRuleCall_0()); }
 )
 
 ;
@@ -1025,14 +2896,14 @@ finally {
 	restoreStackSize(stackSize);
 }
 
-rule__Term__RightAssignment_1_2
+rule__IntLiteral__ValueAssignment
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getTermAccess().getRightTypesParserRuleCall_1_2_0()); }
-	ruleTypes{ after(grammarAccess.getTermAccess().getRightTypesParserRuleCall_1_2_0()); }
+{ before(grammarAccess.getIntLiteralAccess().getValueIntegerParserRuleCall_0()); }
+	ruleInteger{ after(grammarAccess.getIntLiteralAccess().getValueIntegerParserRuleCall_0()); }
 )
 
 ;
@@ -1040,14 +2911,14 @@ finally {
 	restoreStackSize(stackSize);
 }
 
-rule__Operations__TermOperationsAssignment
+rule__DoubleLiteral__ValueAssignment
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getOperationsAccess().getTermOperationsOperationsTypeEnumRuleCall_0()); }
-	ruleOperationsType{ after(grammarAccess.getOperationsAccess().getTermOperationsOperationsTypeEnumRuleCall_0()); }
+{ before(grammarAccess.getDoubleLiteralAccess().getValueDoubleParserRuleCall_0()); }
+	ruleDouble{ after(grammarAccess.getDoubleLiteralAccess().getValueDoubleParserRuleCall_0()); }
 )
 
 ;
diff --git a/org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.tokens b/org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.tokens
index b04f893a6257cd4972d3b213f5d2662a3f5018f7..3397e917a6e9f619f0d98e12dfb3538a02b88e09 100644
--- a/org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.tokens
+++ b/org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.tokens
@@ -1,41 +1,55 @@
-RULE_ID=5
-T__27=27
-T__26=26
-T__25=25
-T__24=24
-T__23=23
-T__22=22
-RULE_ANY_OTHER=10
-T__21=21
-T__20=20
-RULE_SL_COMMENT=8
-RULE_ML_COMMENT=7
-T__19=19
-RULE_STRING=4
-T__16=16
-T__15=15
-T__18=18
-T__17=17
-T__12=12
-T__11=11
-T__14=14
-T__13=13
-RULE_INT=6
-RULE_WS=9
-'>='=21
-'/'=14
-'OR'=23
-'>'=16
-'XOR'=24
-'<='=20
-'!='=19
-'='=18
-'<'=17
-'('=25
-'-'=12
-'*'=13
-'+'=11
-'.'=27
-')'=26
-'AND'=22
-'%'=15
+RULE_ID=5
+T__29=29
+T__28=28
+T__27=27
+T__26=26
+T__25=25
+T__24=24
+T__23=23
+T__22=22
+RULE_ANY_OTHER=10
+T__21=21
+T__20=20
+RULE_SL_COMMENT=8
+RULE_ML_COMMENT=7
+T__30=30
+T__19=19
+T__31=31
+RULE_STRING=4
+T__32=32
+T__33=33
+T__16=16
+T__34=34
+T__15=15
+T__18=18
+T__17=17
+T__12=12
+T__11=11
+T__14=14
+T__13=13
+RULE_INT=6
+RULE_WS=9
+'NOT'=30
+'true'=11
+'>='=23
+'/'=14
+'OR'=25
+'>'=18
+'XOR'=26
+'?'=28
+'<='=22
+'!='=21
+'false'=12
+'='=20
+'<'=19
+'('=32
+':'=29
+'*'=13
+'-'=17
+'+'=16
+','=34
+')'=33
+'.'=27
+'^'=31
+'AND'=24
+'%'=15
diff --git a/org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDslLexer.java b/org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDslLexer.java
index 67db6336f341709c1e2455c410b934b7af70b42f..71b73e1dfa411fa74b0c97ac74d57adc335e79cf 100644
--- a/org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDslLexer.java
+++ b/org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDslLexer.java
@@ -1,1287 +1,1525 @@
-package org.xtext.example.mydsl.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;
-
+package org.xtext.example.mydsl.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 InternalMyDslLexer extends Lexer {
-    public static final int RULE_ID=5;
-    public static final int T__27=27;
-    public static final int T__26=26;
-    public static final int T__25=25;
-    public static final int T__24=24;
-    public static final int T__23=23;
-    public static final int T__22=22;
-    public static final int RULE_ANY_OTHER=10;
-    public static final int T__21=21;
-    public static final int T__20=20;
-    public static final int EOF=-1;
-    public static final int RULE_SL_COMMENT=8;
-    public static final int RULE_ML_COMMENT=7;
-    public static final int T__19=19;
-    public static final int RULE_STRING=4;
-    public static final int T__16=16;
-    public static final int T__15=15;
-    public static final int T__18=18;
-    public static final int T__17=17;
-    public static final int T__12=12;
-    public static final int T__11=11;
-    public static final int T__14=14;
-    public static final int T__13=13;
-    public static final int RULE_INT=6;
-    public static final int RULE_WS=9;
-
-    // delegates
-    // delegators
-
-    public InternalMyDslLexer() {;} 
-    public InternalMyDslLexer(CharStream input) {
-        this(input, new RecognizerSharedState());
-    }
-    public InternalMyDslLexer(CharStream input, RecognizerSharedState state) {
-        super(input,state);
-
-    }
-    public String getGrammarFileName() { return "../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g"; }
-
-    // $ANTLR start "T__11"
-    public final void mT__11() throws RecognitionException {
-        try {
-            int _type = T__11;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:11:7: ( '+' )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:11:9: '+'
-            {
-            match('+'); 
-
-            }
-
-            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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:12:7: ( '-' )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:12:9: '-'
-            {
-            match('-'); 
-
-            }
-
-            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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:13:7: ( '*' )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:14:7: ( '/' )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:14:9: '/'
-            {
-            match('/'); 
-
-            }
-
-            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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:15:7: ( '%' )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:16:7: ( '>' )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:17:7: ( '<' )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:18:7: ( '=' )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:19:7: ( '!=' )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:19:9: '!='
-            {
-            match("!="); 
-
-
-            }
-
-            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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:20:7: ( '<=' )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:20:9: '<='
-            {
-            match("<="); 
-
-
-            }
-
-            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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:21:7: ( '>=' )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:21:9: '>='
-            {
-            match(">="); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__21"
-
-    // $ANTLR start "T__22"
-    public final void mT__22() throws RecognitionException {
-        try {
-            int _type = T__22;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:22:7: ( 'AND' )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:22:9: 'AND'
-            {
-            match("AND"); 
-
-
-            }
-
-            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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:23:7: ( 'OR' )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:23:9: 'OR'
-            {
-            match("OR"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__23"
-
-    // $ANTLR start "T__24"
-    public final void mT__24() throws RecognitionException {
-        try {
-            int _type = T__24;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:24:7: ( 'XOR' )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:24:9: 'XOR'
-            {
-            match("XOR"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__24"
-
-    // $ANTLR start "T__25"
-    public final void mT__25() throws RecognitionException {
-        try {
-            int _type = T__25;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:25:7: ( '(' )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:25:9: '('
-            {
-            match('('); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__25"
-
-    // $ANTLR start "T__26"
-    public final void mT__26() throws RecognitionException {
-        try {
-            int _type = T__26;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:26:7: ( ')' )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:26:9: ')'
-            {
-            match(')'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__26"
-
-    // $ANTLR start "T__27"
-    public final void mT__27() throws RecognitionException {
-        try {
-            int _type = T__27;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:27:7: ( '.' )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:27:9: '.'
-            {
-            match('.'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__27"
-
-    // $ANTLR start "RULE_ID"
-    public final void mRULE_ID() throws RecognitionException {
-        try {
-            int _type = RULE_ID;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1059:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1059:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1059:11: ( '^' )?
-            int alt1=2;
-            int LA1_0 = input.LA(1);
-
-            if ( (LA1_0=='^') ) {
-                alt1=1;
-            }
-            switch (alt1) {
-                case 1 :
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1059: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1059: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1061:10: ( ( '0' .. '9' )+ )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1061:12: ( '0' .. '9' )+
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1061: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1061: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1063:13: ( ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1063:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1063: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1063:16: '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
-                    {
-                    match('\"'); 
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1063: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1063: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1063: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1063:86: '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
-                    {
-                    match('\''); 
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1063: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1063: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1063: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1065:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1065:19: '/*' ( options {greedy=false; } : . )* '*/'
-            {
-            match("/*"); 
-
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1065: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1065: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1067:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1067:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
-            {
-            match("//"); 
-
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1067: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1067: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1067: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1067:41: ( '\\r' )? '\\n'
-                    {
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1067:41: ( '\\r' )?
-                    int alt9=2;
-                    int LA9_0 = input.LA(1);
-
-                    if ( (LA9_0=='\r') ) {
-                        alt9=1;
-                    }
-                    switch (alt9) {
-                        case 1 :
-                            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1067: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1069:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1069:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1069: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1071:16: ( . )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1071:18: .
-            {
-            matchAny(); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "RULE_ANY_OTHER"
-
-    public void mTokens() throws RecognitionException {
-        // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.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 | T__24 | T__25 | T__26 | T__27 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
-        int alt12=24;
-        alt12 = dfa12.predict(input);
-        switch (alt12) {
-            case 1 :
-                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:10: T__11
-                {
-                mT__11(); 
-
-                }
-                break;
-            case 2 :
-                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:16: T__12
-                {
-                mT__12(); 
-
-                }
-                break;
-            case 3 :
-                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:22: T__13
-                {
-                mT__13(); 
-
-                }
-                break;
-            case 4 :
-                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:28: T__14
-                {
-                mT__14(); 
-
-                }
-                break;
-            case 5 :
-                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:34: T__15
-                {
-                mT__15(); 
-
-                }
-                break;
-            case 6 :
-                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:40: T__16
-                {
-                mT__16(); 
-
-                }
-                break;
-            case 7 :
-                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:46: T__17
-                {
-                mT__17(); 
-
-                }
-                break;
-            case 8 :
-                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:52: T__18
-                {
-                mT__18(); 
-
-                }
-                break;
-            case 9 :
-                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:58: T__19
-                {
-                mT__19(); 
-
-                }
-                break;
-            case 10 :
-                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:64: T__20
-                {
-                mT__20(); 
-
-                }
-                break;
-            case 11 :
-                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:70: T__21
-                {
-                mT__21(); 
-
-                }
-                break;
-            case 12 :
-                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:76: T__22
-                {
-                mT__22(); 
-
-                }
-                break;
-            case 13 :
-                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:82: T__23
-                {
-                mT__23(); 
-
-                }
-                break;
-            case 14 :
-                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:88: T__24
-                {
-                mT__24(); 
-
-                }
-                break;
-            case 15 :
-                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:94: T__25
-                {
-                mT__25(); 
-
-                }
-                break;
-            case 16 :
-                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:100: T__26
-                {
-                mT__26(); 
-
-                }
-                break;
-            case 17 :
-                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:106: T__27
-                {
-                mT__27(); 
-
-                }
-                break;
-            case 18 :
-                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:112: RULE_ID
-                {
-                mRULE_ID(); 
-
-                }
-                break;
-            case 19 :
-                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:120: RULE_INT
-                {
-                mRULE_INT(); 
-
-                }
-                break;
-            case 20 :
-                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:129: RULE_STRING
-                {
-                mRULE_STRING(); 
-
-                }
-                break;
-            case 21 :
-                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:141: RULE_ML_COMMENT
-                {
-                mRULE_ML_COMMENT(); 
-
-                }
-                break;
-            case 22 :
-                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:157: RULE_SL_COMMENT
-                {
-                mRULE_SL_COMMENT(); 
-
-                }
-                break;
-            case 23 :
-                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:173: RULE_WS
-                {
-                mRULE_WS(); 
-
-                }
-                break;
-            case 24 :
-                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:181: RULE_ANY_OTHER
-                {
-                mRULE_ANY_OTHER(); 
-
-                }
-                break;
-
-        }
-
-    }
-
-
-    protected DFA12 dfa12 = new DFA12(this);
-    static final String DFA12_eotS =
-        "\4\uffff\1\34\1\uffff\1\37\1\41\1\uffff\1\26\3\45\3\uffff\1\26"+
-        "\2\uffff\2\26\17\uffff\1\45\1\uffff\1\57\1\45\6\uffff\1\61\1\uffff"+
-        "\1\62\2\uffff";
-    static final String DFA12_eofS =
-        "\63\uffff";
-    static final String DFA12_minS =
-        "\1\0\3\uffff\1\52\1\uffff\2\75\1\uffff\1\75\1\116\1\122\1\117\3"+
-        "\uffff\1\101\2\uffff\2\0\17\uffff\1\104\1\uffff\1\60\1\122\6\uffff"+
-        "\1\60\1\uffff\1\60\2\uffff";
-    static final String DFA12_maxS =
-        "\1\uffff\3\uffff\1\57\1\uffff\2\75\1\uffff\1\75\1\116\1\122\1\117"+
-        "\3\uffff\1\172\2\uffff\2\uffff\17\uffff\1\104\1\uffff\1\172\1\122"+
-        "\6\uffff\1\172\1\uffff\1\172\2\uffff";
-    static final String DFA12_acceptS =
-        "\1\uffff\1\1\1\2\1\3\1\uffff\1\5\2\uffff\1\10\4\uffff\1\17\1\20"+
-        "\1\21\1\uffff\1\22\1\23\2\uffff\1\27\1\30\1\1\1\2\1\3\1\25\1\26"+
-        "\1\4\1\5\1\13\1\6\1\12\1\7\1\10\1\11\1\uffff\1\22\2\uffff\1\17\1"+
-        "\20\1\21\1\23\1\24\1\27\1\uffff\1\15\1\uffff\1\14\1\16";
-    static final String DFA12_specialS =
-        "\1\0\22\uffff\1\1\1\2\36\uffff}>";
-    static final String[] DFA12_transitionS = {
-            "\11\26\2\25\2\26\1\25\22\26\1\25\1\11\1\23\2\26\1\5\1\26\1"+
-            "\24\1\15\1\16\1\3\1\1\1\26\1\2\1\17\1\4\12\22\2\26\1\7\1\10"+
-            "\1\6\2\26\1\12\15\21\1\13\10\21\1\14\2\21\3\26\1\20\1\21\1\26"+
-            "\32\21\uff85\26",
-            "",
-            "",
-            "",
-            "\1\32\4\uffff\1\33",
-            "",
-            "\1\36",
-            "\1\40",
-            "",
-            "\1\43",
-            "\1\44",
-            "\1\46",
-            "\1\47",
-            "",
-            "",
-            "",
-            "\32\45\4\uffff\1\45\1\uffff\32\45",
-            "",
-            "",
-            "\0\54",
-            "\0\54",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\1\56",
-            "",
-            "\12\45\7\uffff\32\45\4\uffff\1\45\1\uffff\32\45",
-            "\1\60",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\12\45\7\uffff\32\45\4\uffff\1\45\1\uffff\32\45",
-            "",
-            "\12\45\7\uffff\32\45\4\uffff\1\45\1\uffff\32\45",
-            "",
-            ""
-    };
-
-    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 | T__24 | T__25 | T__26 | T__27 | 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_0 = input.LA(1);
-
-                        s = -1;
-                        if ( (LA12_0=='+') ) {s = 1;}
-
-                        else if ( (LA12_0=='-') ) {s = 2;}
-
-                        else if ( (LA12_0=='*') ) {s = 3;}
-
-                        else if ( (LA12_0=='/') ) {s = 4;}
-
-                        else if ( (LA12_0=='%') ) {s = 5;}
-
-                        else if ( (LA12_0=='>') ) {s = 6;}
-
-                        else if ( (LA12_0=='<') ) {s = 7;}
-
-                        else if ( (LA12_0=='=') ) {s = 8;}
-
-                        else if ( (LA12_0=='!') ) {s = 9;}
-
-                        else if ( (LA12_0=='A') ) {s = 10;}
-
-                        else if ( (LA12_0=='O') ) {s = 11;}
-
-                        else if ( (LA12_0=='X') ) {s = 12;}
-
-                        else if ( (LA12_0=='(') ) {s = 13;}
-
-                        else if ( (LA12_0==')') ) {s = 14;}
-
-                        else if ( (LA12_0=='.') ) {s = 15;}
-
-                        else if ( (LA12_0=='^') ) {s = 16;}
-
-                        else if ( ((LA12_0>='B' && LA12_0<='N')||(LA12_0>='P' && LA12_0<='W')||(LA12_0>='Y' && LA12_0<='Z')||LA12_0=='_'||(LA12_0>='a' && LA12_0<='z')) ) {s = 17;}
-
-                        else if ( ((LA12_0>='0' && LA12_0<='9')) ) {s = 18;}
-
-                        else if ( (LA12_0=='\"') ) {s = 19;}
-
-                        else if ( (LA12_0=='\'') ) {s = 20;}
-
-                        else if ( ((LA12_0>='\t' && LA12_0<='\n')||LA12_0=='\r'||LA12_0==' ') ) {s = 21;}
-
-                        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<='\uFFFF')) ) {s = 22;}
-
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA12_19 = input.LA(1);
-
-                        s = -1;
-                        if ( ((LA12_19>='\u0000' && LA12_19<='\uFFFF')) ) {s = 44;}
-
-                        else s = 22;
-
-                        if ( s>=0 ) return s;
-                        break;
-                    case 2 : 
-                        int LA12_20 = input.LA(1);
-
-                        s = -1;
-                        if ( ((LA12_20>='\u0000' && LA12_20<='\uFFFF')) ) {s = 44;}
-
-                        else s = 22;
-
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 12, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
- 
-
+public class InternalMyDslLexer extends Lexer {
+    public static final int RULE_ID=5;
+    public static final int T__29=29;
+    public static final int T__28=28;
+    public static final int T__27=27;
+    public static final int T__26=26;
+    public static final int T__25=25;
+    public static final int T__24=24;
+    public static final int T__23=23;
+    public static final int T__22=22;
+    public static final int RULE_ANY_OTHER=10;
+    public static final int T__21=21;
+    public static final int T__20=20;
+    public static final int EOF=-1;
+    public static final int RULE_SL_COMMENT=8;
+    public static final int RULE_ML_COMMENT=7;
+    public static final int T__30=30;
+    public static final int T__19=19;
+    public static final int T__31=31;
+    public static final int T__32=32;
+    public static final int RULE_STRING=4;
+    public static final int T__16=16;
+    public static final int T__33=33;
+    public static final int T__15=15;
+    public static final int T__34=34;
+    public static final int T__18=18;
+    public static final int T__17=17;
+    public static final int T__12=12;
+    public static final int T__11=11;
+    public static final int T__14=14;
+    public static final int T__13=13;
+    public static final int RULE_INT=6;
+    public static final int RULE_WS=9;
+
+    // delegates
+    // delegators
+
+    public InternalMyDslLexer() {;} 
+    public InternalMyDslLexer(CharStream input) {
+        this(input, new RecognizerSharedState());
+    }
+    public InternalMyDslLexer(CharStream input, RecognizerSharedState state) {
+        super(input,state);
+
+    }
+    public String getGrammarFileName() { return "../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g"; }
+
+    // $ANTLR start "T__11"
+    public final void mT__11() throws RecognitionException {
+        try {
+            int _type = T__11;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:11:7: ( 'true' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:11:9: 'true'
+            {
+            match("true"); 
+
+
+            }
+
+            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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:12:7: ( 'false' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:12:9: 'false'
+            {
+            match("false"); 
+
+
+            }
+
+            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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:13:7: ( '*' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:14:7: ( '/' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:14:9: '/'
+            {
+            match('/'); 
+
+            }
+
+            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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:15:7: ( '%' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:16:7: ( '+' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:17:7: ( '-' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:18:7: ( '>' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:19:7: ( '<' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:19:9: '<'
+            {
+            match('<'); 
+
+            }
+
+            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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:20:7: ( '=' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:20:9: '='
+            {
+            match('='); 
+
+            }
+
+            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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:21:7: ( '!=' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:21:9: '!='
+            {
+            match("!="); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__21"
+
+    // $ANTLR start "T__22"
+    public final void mT__22() throws RecognitionException {
+        try {
+            int _type = T__22;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:22:7: ( '<=' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:23:7: ( '>=' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:23:9: '>='
+            {
+            match(">="); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__23"
+
+    // $ANTLR start "T__24"
+    public final void mT__24() throws RecognitionException {
+        try {
+            int _type = T__24;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:24:7: ( 'AND' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:24:9: 'AND'
+            {
+            match("AND"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__24"
+
+    // $ANTLR start "T__25"
+    public final void mT__25() throws RecognitionException {
+        try {
+            int _type = T__25;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:25:7: ( 'OR' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:25:9: 'OR'
+            {
+            match("OR"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__25"
+
+    // $ANTLR start "T__26"
+    public final void mT__26() throws RecognitionException {
+        try {
+            int _type = T__26;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:26:7: ( 'XOR' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:26:9: 'XOR'
+            {
+            match("XOR"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__26"
+
+    // $ANTLR start "T__27"
+    public final void mT__27() throws RecognitionException {
+        try {
+            int _type = T__27;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:27:7: ( '.' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:27:9: '.'
+            {
+            match('.'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__27"
+
+    // $ANTLR start "T__28"
+    public final void mT__28() throws RecognitionException {
+        try {
+            int _type = T__28;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:28:7: ( '?' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:28:9: '?'
+            {
+            match('?'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__28"
+
+    // $ANTLR start "T__29"
+    public final void mT__29() throws RecognitionException {
+        try {
+            int _type = T__29;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:29:7: ( ':' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:29:9: ':'
+            {
+            match(':'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__29"
+
+    // $ANTLR start "T__30"
+    public final void mT__30() throws RecognitionException {
+        try {
+            int _type = T__30;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:30:7: ( 'NOT' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:30:9: 'NOT'
+            {
+            match("NOT"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__30"
+
+    // $ANTLR start "T__31"
+    public final void mT__31() throws RecognitionException {
+        try {
+            int _type = T__31;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:31:7: ( '^' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:31:9: '^'
+            {
+            match('^'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__31"
+
+    // $ANTLR start "T__32"
+    public final void mT__32() throws RecognitionException {
+        try {
+            int _type = T__32;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:32:7: ( '(' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:32:9: '('
+            {
+            match('('); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__32"
+
+    // $ANTLR start "T__33"
+    public final void mT__33() throws RecognitionException {
+        try {
+            int _type = T__33;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:33:7: ( ')' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:33:9: ')'
+            {
+            match(')'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__33"
+
+    // $ANTLR start "T__34"
+    public final void mT__34() throws RecognitionException {
+        try {
+            int _type = T__34;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:34:7: ( ',' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:34:9: ','
+            {
+            match(','); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__34"
+
+    // $ANTLR start "RULE_ID"
+    public final void mRULE_ID() throws RecognitionException {
+        try {
+            int _type = RULE_ID;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2930:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2930:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2930:11: ( '^' )?
+            int alt1=2;
+            int LA1_0 = input.LA(1);
+
+            if ( (LA1_0=='^') ) {
+                alt1=1;
+            }
+            switch (alt1) {
+                case 1 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2930: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2930: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2932:10: ( ( '0' .. '9' )+ )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2932:12: ( '0' .. '9' )+
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2932: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2932: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2934:13: ( ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2934:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2934: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2934:16: '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
+                    {
+                    match('\"'); 
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2934: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2934: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2934: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2934:86: '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
+                    {
+                    match('\''); 
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2934: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2934: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2934: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2936:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2936:19: '/*' ( options {greedy=false; } : . )* '*/'
+            {
+            match("/*"); 
+
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2936: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2936: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2938:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2938:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            {
+            match("//"); 
+
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2938: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2938: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2938: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2938:41: ( '\\r' )? '\\n'
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2938:41: ( '\\r' )?
+                    int alt9=2;
+                    int LA9_0 = input.LA(1);
+
+                    if ( (LA9_0=='\r') ) {
+                        alt9=1;
+                    }
+                    switch (alt9) {
+                        case 1 :
+                            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2938: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2940:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2940:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2940: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2942:16: ( . )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2942:18: .
+            {
+            matchAny(); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ANY_OTHER"
+
+    public void mTokens() throws RecognitionException {
+        // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.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 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
+        int alt12=31;
+        alt12 = dfa12.predict(input);
+        switch (alt12) {
+            case 1 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:10: T__11
+                {
+                mT__11(); 
+
+                }
+                break;
+            case 2 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:16: T__12
+                {
+                mT__12(); 
+
+                }
+                break;
+            case 3 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:22: T__13
+                {
+                mT__13(); 
+
+                }
+                break;
+            case 4 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:28: T__14
+                {
+                mT__14(); 
+
+                }
+                break;
+            case 5 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:34: T__15
+                {
+                mT__15(); 
+
+                }
+                break;
+            case 6 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:40: T__16
+                {
+                mT__16(); 
+
+                }
+                break;
+            case 7 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:46: T__17
+                {
+                mT__17(); 
+
+                }
+                break;
+            case 8 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:52: T__18
+                {
+                mT__18(); 
+
+                }
+                break;
+            case 9 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:58: T__19
+                {
+                mT__19(); 
+
+                }
+                break;
+            case 10 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:64: T__20
+                {
+                mT__20(); 
+
+                }
+                break;
+            case 11 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:70: T__21
+                {
+                mT__21(); 
+
+                }
+                break;
+            case 12 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:76: T__22
+                {
+                mT__22(); 
+
+                }
+                break;
+            case 13 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:82: T__23
+                {
+                mT__23(); 
+
+                }
+                break;
+            case 14 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:88: T__24
+                {
+                mT__24(); 
+
+                }
+                break;
+            case 15 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:94: T__25
+                {
+                mT__25(); 
+
+                }
+                break;
+            case 16 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:100: T__26
+                {
+                mT__26(); 
+
+                }
+                break;
+            case 17 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:106: T__27
+                {
+                mT__27(); 
+
+                }
+                break;
+            case 18 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:112: T__28
+                {
+                mT__28(); 
+
+                }
+                break;
+            case 19 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:118: T__29
+                {
+                mT__29(); 
+
+                }
+                break;
+            case 20 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:124: T__30
+                {
+                mT__30(); 
+
+                }
+                break;
+            case 21 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:130: T__31
+                {
+                mT__31(); 
+
+                }
+                break;
+            case 22 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:136: T__32
+                {
+                mT__32(); 
+
+                }
+                break;
+            case 23 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:142: T__33
+                {
+                mT__33(); 
+
+                }
+                break;
+            case 24 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:148: T__34
+                {
+                mT__34(); 
+
+                }
+                break;
+            case 25 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:154: RULE_ID
+                {
+                mRULE_ID(); 
+
+                }
+                break;
+            case 26 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:162: RULE_INT
+                {
+                mRULE_INT(); 
+
+                }
+                break;
+            case 27 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:171: RULE_STRING
+                {
+                mRULE_STRING(); 
+
+                }
+                break;
+            case 28 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:183: RULE_ML_COMMENT
+                {
+                mRULE_ML_COMMENT(); 
+
+                }
+                break;
+            case 29 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:199: RULE_SL_COMMENT
+                {
+                mRULE_SL_COMMENT(); 
+
+                }
+                break;
+            case 30 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:215: RULE_WS
+                {
+                mRULE_WS(); 
+
+                }
+                break;
+            case 31 :
+                // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1:223: RULE_ANY_OTHER
+                {
+                mRULE_ANY_OTHER(); 
+
+                }
+                break;
+
+        }
+
+    }
+
+
+    protected DFA12 dfa12 = new DFA12(this);
+    static final String DFA12_eotS =
+        "\1\uffff\2\36\1\uffff\1\43\3\uffff\1\50\1\52\1\uffff\1\34\3\36\3"+
+        "\uffff\1\36\1\64\5\uffff\2\34\2\uffff\1\36\1\uffff\1\36\15\uffff"+
+        "\1\36\1\76\1\36\3\uffff\1\36\7\uffff\2\36\1\103\1\uffff\1\104\1"+
+        "\105\1\106\1\36\4\uffff\1\110\1\uffff";
+    static final String DFA12_eofS =
+        "\111\uffff";
+    static final String DFA12_minS =
+        "\1\0\1\162\1\141\1\uffff\1\52\3\uffff\2\75\1\uffff\1\75\1\116\1"+
+        "\122\1\117\3\uffff\1\117\1\101\5\uffff\2\0\2\uffff\1\165\1\uffff"+
+        "\1\154\15\uffff\1\104\1\60\1\122\3\uffff\1\124\7\uffff\1\145\1\163"+
+        "\1\60\1\uffff\3\60\1\145\4\uffff\1\60\1\uffff";
+    static final String DFA12_maxS =
+        "\1\uffff\1\162\1\141\1\uffff\1\57\3\uffff\2\75\1\uffff\1\75\1\116"+
+        "\1\122\1\117\3\uffff\1\117\1\172\5\uffff\2\uffff\2\uffff\1\165\1"+
+        "\uffff\1\154\15\uffff\1\104\1\172\1\122\3\uffff\1\124\7\uffff\1"+
+        "\145\1\163\1\172\1\uffff\3\172\1\145\4\uffff\1\172\1\uffff";
+    static final String DFA12_acceptS =
+        "\3\uffff\1\3\1\uffff\1\5\1\6\1\7\2\uffff\1\12\4\uffff\1\21\1\22"+
+        "\1\23\2\uffff\1\26\1\27\1\30\1\31\1\32\2\uffff\1\36\1\37\1\uffff"+
+        "\1\31\1\uffff\1\3\1\34\1\35\1\4\1\5\1\6\1\7\1\15\1\10\1\14\1\11"+
+        "\1\12\1\13\3\uffff\1\21\1\22\1\23\1\uffff\1\25\1\26\1\27\1\30\1"+
+        "\32\1\33\1\36\3\uffff\1\17\4\uffff\1\16\1\20\1\24\1\1\1\uffff\1"+
+        "\2";
+    static final String DFA12_specialS =
+        "\1\1\30\uffff\1\0\1\2\56\uffff}>";
+    static final String[] DFA12_transitionS = {
+            "\11\34\2\33\2\34\1\33\22\34\1\33\1\13\1\31\2\34\1\5\1\34\1\32"+
+            "\1\24\1\25\1\3\1\6\1\26\1\7\1\17\1\4\12\30\1\21\1\34\1\11\1"+
+            "\12\1\10\1\20\1\34\1\14\14\27\1\22\1\15\10\27\1\16\2\27\3\34"+
+            "\1\23\1\27\1\34\5\27\1\2\15\27\1\1\6\27\uff85\34",
+            "\1\35",
+            "\1\37",
+            "",
+            "\1\41\4\uffff\1\42",
+            "",
+            "",
+            "",
+            "\1\47",
+            "\1\51",
+            "",
+            "\1\54",
+            "\1\55",
+            "\1\56",
+            "\1\57",
+            "",
+            "",
+            "",
+            "\1\63",
+            "\32\36\4\uffff\1\36\1\uffff\32\36",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\0\71",
+            "\0\71",
+            "",
+            "",
+            "\1\73",
+            "",
+            "\1\74",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\75",
+            "\12\36\7\uffff\32\36\4\uffff\1\36\1\uffff\32\36",
+            "\1\77",
+            "",
+            "",
+            "",
+            "\1\100",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\101",
+            "\1\102",
+            "\12\36\7\uffff\32\36\4\uffff\1\36\1\uffff\32\36",
+            "",
+            "\12\36\7\uffff\32\36\4\uffff\1\36\1\uffff\32\36",
+            "\12\36\7\uffff\32\36\4\uffff\1\36\1\uffff\32\36",
+            "\12\36\7\uffff\32\36\4\uffff\1\36\1\uffff\32\36",
+            "\1\107",
+            "",
+            "",
+            "",
+            "",
+            "\12\36\7\uffff\32\36\4\uffff\1\36\1\uffff\32\36",
+            ""
+    };
+
+    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 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | 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_25 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA12_25>='\u0000' && LA12_25<='\uFFFF')) ) {s = 57;}
+
+                        else s = 28;
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA12_0 = input.LA(1);
+
+                        s = -1;
+                        if ( (LA12_0=='t') ) {s = 1;}
+
+                        else if ( (LA12_0=='f') ) {s = 2;}
+
+                        else if ( (LA12_0=='*') ) {s = 3;}
+
+                        else if ( (LA12_0=='/') ) {s = 4;}
+
+                        else if ( (LA12_0=='%') ) {s = 5;}
+
+                        else if ( (LA12_0=='+') ) {s = 6;}
+
+                        else if ( (LA12_0=='-') ) {s = 7;}
+
+                        else if ( (LA12_0=='>') ) {s = 8;}
+
+                        else if ( (LA12_0=='<') ) {s = 9;}
+
+                        else if ( (LA12_0=='=') ) {s = 10;}
+
+                        else if ( (LA12_0=='!') ) {s = 11;}
+
+                        else if ( (LA12_0=='A') ) {s = 12;}
+
+                        else if ( (LA12_0=='O') ) {s = 13;}
+
+                        else if ( (LA12_0=='X') ) {s = 14;}
+
+                        else if ( (LA12_0=='.') ) {s = 15;}
+
+                        else if ( (LA12_0=='?') ) {s = 16;}
+
+                        else if ( (LA12_0==':') ) {s = 17;}
+
+                        else if ( (LA12_0=='N') ) {s = 18;}
+
+                        else if ( (LA12_0=='^') ) {s = 19;}
+
+                        else if ( (LA12_0=='(') ) {s = 20;}
+
+                        else if ( (LA12_0==')') ) {s = 21;}
+
+                        else if ( (LA12_0==',') ) {s = 22;}
+
+                        else if ( ((LA12_0>='B' && LA12_0<='M')||(LA12_0>='P' && LA12_0<='W')||(LA12_0>='Y' && LA12_0<='Z')||LA12_0=='_'||(LA12_0>='a' && LA12_0<='e')||(LA12_0>='g' && LA12_0<='s')||(LA12_0>='u' && LA12_0<='z')) ) {s = 23;}
+
+                        else if ( ((LA12_0>='0' && LA12_0<='9')) ) {s = 24;}
+
+                        else if ( (LA12_0=='\"') ) {s = 25;}
+
+                        else if ( (LA12_0=='\'') ) {s = 26;}
+
+                        else if ( ((LA12_0>='\t' && LA12_0<='\n')||LA12_0=='\r'||LA12_0==' ') ) {s = 27;}
+
+                        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<='\uFFFF')) ) {s = 28;}
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA12_26 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA12_26>='\u0000' && LA12_26<='\uFFFF')) ) {s = 57;}
+
+                        else s = 28;
+
+                        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/org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDslParser.java b/org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDslParser.java
index 7e8f3bf055d0c7da85733a55d3fdd39efbb624cf..62e09bbadb42b4e746e549848ea7d5777aef1ccc 100644
--- a/org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDslParser.java
+++ b/org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDslParser.java
@@ -1,2938 +1,8223 @@
-package org.xtext.example.mydsl.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.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.xtext.example.mydsl.services.MyDslGrammarAccess;
-
-
-
-import org.antlr.runtime.*;
-import java.util.Stack;
-import java.util.List;
-import java.util.ArrayList;
-
+package org.xtext.example.mydsl.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.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.xtext.example.mydsl.services.MyDslGrammarAccess;
+
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
 @SuppressWarnings("all")
-public class InternalMyDslParser 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", "'+'", "'-'", "'*'", "'/'", "'%'", "'>'", "'<'", "'='", "'!='", "'<='", "'>='", "'AND'", "'OR'", "'XOR'", "'('", "')'", "'.'"
-    };
-    public static final int RULE_ID=5;
-    public static final int T__27=27;
-    public static final int T__26=26;
-    public static final int T__25=25;
-    public static final int T__24=24;
-    public static final int T__23=23;
-    public static final int T__22=22;
-    public static final int RULE_ANY_OTHER=10;
-    public static final int T__21=21;
-    public static final int T__20=20;
-    public static final int RULE_SL_COMMENT=8;
-    public static final int EOF=-1;
-    public static final int RULE_ML_COMMENT=7;
-    public static final int T__19=19;
-    public static final int RULE_STRING=4;
-    public static final int T__16=16;
-    public static final int T__15=15;
-    public static final int T__18=18;
-    public static final int T__17=17;
-    public static final int T__12=12;
-    public static final int T__11=11;
-    public static final int T__14=14;
-    public static final int T__13=13;
-    public static final int RULE_INT=6;
-    public static final int RULE_WS=9;
-
-    // delegates
-    // delegators
-
-
-        public InternalMyDslParser(TokenStream input) {
-            this(input, new RecognizerSharedState());
-        }
-        public InternalMyDslParser(TokenStream input, RecognizerSharedState state) {
-            super(input, state);
-             
-        }
-        
-
-    public String[] getTokenNames() { return InternalMyDslParser.tokenNames; }
-    public String getGrammarFileName() { return "../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g"; }
-
-
-     
-     	private MyDslGrammarAccess grammarAccess;
-     	
-        public void setGrammarAccess(MyDslGrammarAccess grammarAccess) {
-        	this.grammarAccess = grammarAccess;
-        }
-        
-        @Override
-        protected Grammar getGrammar() {
-        	return grammarAccess.getGrammar();
-        }
-        
-        @Override
-        protected String getValueForTokenName(String tokenName) {
-        	return tokenName;
-        }
-
-
-
-
-    // $ANTLR start "entryRuleModel"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:60:1: entryRuleModel : ruleModel EOF ;
-    public final void entryRuleModel() throws RecognitionException {
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:61:1: ( ruleModel EOF )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:62:1: ruleModel EOF
-            {
-             before(grammarAccess.getModelRule()); 
-            pushFollow(FOLLOW_ruleModel_in_entryRuleModel61);
-            ruleModel();
-
-            state._fsp--;
-
-             after(grammarAccess.getModelRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleModel68); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end "entryRuleModel"
-
-
-    // $ANTLR start "ruleModel"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:69:1: ruleModel : ( ( rule__Model__TermsAssignment ) ) ;
-    public final void ruleModel() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:73:2: ( ( ( rule__Model__TermsAssignment ) ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:74:1: ( ( rule__Model__TermsAssignment ) )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:74:1: ( ( rule__Model__TermsAssignment ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:75:1: ( rule__Model__TermsAssignment )
-            {
-             before(grammarAccess.getModelAccess().getTermsAssignment()); 
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:76:1: ( rule__Model__TermsAssignment )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:76:2: rule__Model__TermsAssignment
-            {
-            pushFollow(FOLLOW_rule__Model__TermsAssignment_in_ruleModel94);
-            rule__Model__TermsAssignment();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getModelAccess().getTermsAssignment()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "ruleModel"
-
-
-    // $ANTLR start "entryRuleTerm"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:88:1: entryRuleTerm : ruleTerm EOF ;
-    public final void entryRuleTerm() throws RecognitionException {
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:89:1: ( ruleTerm EOF )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:90:1: ruleTerm EOF
-            {
-             before(grammarAccess.getTermRule()); 
-            pushFollow(FOLLOW_ruleTerm_in_entryRuleTerm121);
-            ruleTerm();
-
-            state._fsp--;
-
-             after(grammarAccess.getTermRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleTerm128); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end "entryRuleTerm"
-
-
-    // $ANTLR start "ruleTerm"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:97:1: ruleTerm : ( ( rule__Term__Group__0 ) ) ;
-    public final void ruleTerm() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:101:2: ( ( ( rule__Term__Group__0 ) ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:102:1: ( ( rule__Term__Group__0 ) )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:102:1: ( ( rule__Term__Group__0 ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:103:1: ( rule__Term__Group__0 )
-            {
-             before(grammarAccess.getTermAccess().getGroup()); 
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:104:1: ( rule__Term__Group__0 )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:104:2: rule__Term__Group__0
-            {
-            pushFollow(FOLLOW_rule__Term__Group__0_in_ruleTerm154);
-            rule__Term__Group__0();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getTermAccess().getGroup()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "ruleTerm"
-
-
-    // $ANTLR start "entryRuleTypes"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:116:1: entryRuleTypes : ruleTypes EOF ;
-    public final void entryRuleTypes() throws RecognitionException {
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:117:1: ( ruleTypes EOF )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:118:1: ruleTypes EOF
-            {
-             before(grammarAccess.getTypesRule()); 
-            pushFollow(FOLLOW_ruleTypes_in_entryRuleTypes181);
-            ruleTypes();
-
-            state._fsp--;
-
-             after(grammarAccess.getTypesRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleTypes188); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end "entryRuleTypes"
-
-
-    // $ANTLR start "ruleTypes"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:125:1: ruleTypes : ( ( rule__Types__Alternatives ) ) ;
-    public final void ruleTypes() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:129:2: ( ( ( rule__Types__Alternatives ) ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:130:1: ( ( rule__Types__Alternatives ) )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:130:1: ( ( rule__Types__Alternatives ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:131:1: ( rule__Types__Alternatives )
-            {
-             before(grammarAccess.getTypesAccess().getAlternatives()); 
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:132:1: ( rule__Types__Alternatives )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:132:2: rule__Types__Alternatives
-            {
-            pushFollow(FOLLOW_rule__Types__Alternatives_in_ruleTypes214);
-            rule__Types__Alternatives();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getTypesAccess().getAlternatives()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "ruleTypes"
-
-
-    // $ANTLR start "entryRuleArithmetics"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:144:1: entryRuleArithmetics : ruleArithmetics EOF ;
-    public final void entryRuleArithmetics() throws RecognitionException {
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:145:1: ( ruleArithmetics EOF )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:146:1: ruleArithmetics EOF
-            {
-             before(grammarAccess.getArithmeticsRule()); 
-            pushFollow(FOLLOW_ruleArithmetics_in_entryRuleArithmetics241);
-            ruleArithmetics();
-
-            state._fsp--;
-
-             after(grammarAccess.getArithmeticsRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleArithmetics248); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end "entryRuleArithmetics"
-
-
-    // $ANTLR start "ruleArithmetics"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:153:1: ruleArithmetics : ( ( rule__Arithmetics__Group__0 ) ) ;
-    public final void ruleArithmetics() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:157:2: ( ( ( rule__Arithmetics__Group__0 ) ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:158:1: ( ( rule__Arithmetics__Group__0 ) )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:158:1: ( ( rule__Arithmetics__Group__0 ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:159:1: ( rule__Arithmetics__Group__0 )
-            {
-             before(grammarAccess.getArithmeticsAccess().getGroup()); 
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:160:1: ( rule__Arithmetics__Group__0 )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:160:2: rule__Arithmetics__Group__0
-            {
-            pushFollow(FOLLOW_rule__Arithmetics__Group__0_in_ruleArithmetics274);
-            rule__Arithmetics__Group__0();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getArithmeticsAccess().getGroup()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "ruleArithmetics"
-
-
-    // $ANTLR start "entryRuleStrings"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:172:1: entryRuleStrings : ruleStrings EOF ;
-    public final void entryRuleStrings() throws RecognitionException {
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:173:1: ( ruleStrings EOF )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:174:1: ruleStrings EOF
-            {
-             before(grammarAccess.getStringsRule()); 
-            pushFollow(FOLLOW_ruleStrings_in_entryRuleStrings301);
-            ruleStrings();
-
-            state._fsp--;
-
-             after(grammarAccess.getStringsRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleStrings308); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end "entryRuleStrings"
-
-
-    // $ANTLR start "ruleStrings"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:181:1: ruleStrings : ( ( rule__Strings__Group__0 ) ) ;
-    public final void ruleStrings() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:185:2: ( ( ( rule__Strings__Group__0 ) ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:186:1: ( ( rule__Strings__Group__0 ) )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:186:1: ( ( rule__Strings__Group__0 ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:187:1: ( rule__Strings__Group__0 )
-            {
-             before(grammarAccess.getStringsAccess().getGroup()); 
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:188:1: ( rule__Strings__Group__0 )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:188:2: rule__Strings__Group__0
-            {
-            pushFollow(FOLLOW_rule__Strings__Group__0_in_ruleStrings334);
-            rule__Strings__Group__0();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getStringsAccess().getGroup()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "ruleStrings"
-
-
-    // $ANTLR start "entryRuleDECIMAL"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:200:1: entryRuleDECIMAL : ruleDECIMAL EOF ;
-    public final void entryRuleDECIMAL() throws RecognitionException {
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:201:1: ( ruleDECIMAL EOF )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:202:1: ruleDECIMAL EOF
-            {
-             before(grammarAccess.getDECIMALRule()); 
-            pushFollow(FOLLOW_ruleDECIMAL_in_entryRuleDECIMAL361);
-            ruleDECIMAL();
-
-            state._fsp--;
-
-             after(grammarAccess.getDECIMALRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleDECIMAL368); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end "entryRuleDECIMAL"
-
-
-    // $ANTLR start "ruleDECIMAL"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:209:1: ruleDECIMAL : ( ( rule__DECIMAL__Group__0 ) ) ;
-    public final void ruleDECIMAL() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:213:2: ( ( ( rule__DECIMAL__Group__0 ) ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:214:1: ( ( rule__DECIMAL__Group__0 ) )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:214:1: ( ( rule__DECIMAL__Group__0 ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:215:1: ( rule__DECIMAL__Group__0 )
-            {
-             before(grammarAccess.getDECIMALAccess().getGroup()); 
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:216:1: ( rule__DECIMAL__Group__0 )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:216:2: rule__DECIMAL__Group__0
-            {
-            pushFollow(FOLLOW_rule__DECIMAL__Group__0_in_ruleDECIMAL394);
-            rule__DECIMAL__Group__0();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getDECIMALAccess().getGroup()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "ruleDECIMAL"
-
-
-    // $ANTLR start "entryRuleE_STRING"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:228:1: entryRuleE_STRING : ruleE_STRING EOF ;
-    public final void entryRuleE_STRING() throws RecognitionException {
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:229:1: ( ruleE_STRING EOF )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:230:1: ruleE_STRING EOF
-            {
-             before(grammarAccess.getE_STRINGRule()); 
-            pushFollow(FOLLOW_ruleE_STRING_in_entryRuleE_STRING421);
-            ruleE_STRING();
-
-            state._fsp--;
-
-             after(grammarAccess.getE_STRINGRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleE_STRING428); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end "entryRuleE_STRING"
-
-
-    // $ANTLR start "ruleE_STRING"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:237:1: ruleE_STRING : ( ( rule__E_STRING__Alternatives ) ) ;
-    public final void ruleE_STRING() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:241:2: ( ( ( rule__E_STRING__Alternatives ) ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:242:1: ( ( rule__E_STRING__Alternatives ) )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:242:1: ( ( rule__E_STRING__Alternatives ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:243:1: ( rule__E_STRING__Alternatives )
-            {
-             before(grammarAccess.getE_STRINGAccess().getAlternatives()); 
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:244:1: ( rule__E_STRING__Alternatives )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:244:2: rule__E_STRING__Alternatives
-            {
-            pushFollow(FOLLOW_rule__E_STRING__Alternatives_in_ruleE_STRING454);
-            rule__E_STRING__Alternatives();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getE_STRINGAccess().getAlternatives()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "ruleE_STRING"
-
-
-    // $ANTLR start "entryRuleOperations"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:256:1: entryRuleOperations : ruleOperations EOF ;
-    public final void entryRuleOperations() throws RecognitionException {
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:257:1: ( ruleOperations EOF )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:258:1: ruleOperations EOF
-            {
-             before(grammarAccess.getOperationsRule()); 
-            pushFollow(FOLLOW_ruleOperations_in_entryRuleOperations481);
-            ruleOperations();
-
-            state._fsp--;
-
-             after(grammarAccess.getOperationsRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleOperations488); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end "entryRuleOperations"
-
-
-    // $ANTLR start "ruleOperations"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:265:1: ruleOperations : ( ( rule__Operations__TermOperationsAssignment ) ) ;
-    public final void ruleOperations() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:269:2: ( ( ( rule__Operations__TermOperationsAssignment ) ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:270:1: ( ( rule__Operations__TermOperationsAssignment ) )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:270:1: ( ( rule__Operations__TermOperationsAssignment ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:271:1: ( rule__Operations__TermOperationsAssignment )
-            {
-             before(grammarAccess.getOperationsAccess().getTermOperationsAssignment()); 
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:272:1: ( rule__Operations__TermOperationsAssignment )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:272:2: rule__Operations__TermOperationsAssignment
-            {
-            pushFollow(FOLLOW_rule__Operations__TermOperationsAssignment_in_ruleOperations514);
-            rule__Operations__TermOperationsAssignment();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getOperationsAccess().getTermOperationsAssignment()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "ruleOperations"
-
-
-    // $ANTLR start "ruleOperationsType"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:285:1: ruleOperationsType : ( ( rule__OperationsType__Alternatives ) ) ;
-    public final void ruleOperationsType() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:289:1: ( ( ( rule__OperationsType__Alternatives ) ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:290:1: ( ( rule__OperationsType__Alternatives ) )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:290:1: ( ( rule__OperationsType__Alternatives ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:291:1: ( rule__OperationsType__Alternatives )
-            {
-             before(grammarAccess.getOperationsTypeAccess().getAlternatives()); 
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:292:1: ( rule__OperationsType__Alternatives )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:292:2: rule__OperationsType__Alternatives
-            {
-            pushFollow(FOLLOW_rule__OperationsType__Alternatives_in_ruleOperationsType551);
-            rule__OperationsType__Alternatives();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getOperationsTypeAccess().getAlternatives()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "ruleOperationsType"
-
-
-    // $ANTLR start "rule__Types__Alternatives"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:303:1: rule__Types__Alternatives : ( ( ruleArithmetics ) | ( ruleStrings ) | ( ( rule__Types__Group_2__0 ) ) );
-    public final void rule__Types__Alternatives() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:307:1: ( ( ruleArithmetics ) | ( ruleStrings ) | ( ( rule__Types__Group_2__0 ) ) )
-            int alt1=3;
-            switch ( input.LA(1) ) {
-            case RULE_INT:
-            case 12:
-                {
-                alt1=1;
-                }
-                break;
-            case RULE_STRING:
-            case RULE_ID:
-                {
-                alt1=2;
-                }
-                break;
-            case 25:
-                {
-                alt1=3;
-                }
-                break;
-            default:
-                NoViableAltException nvae =
-                    new NoViableAltException("", 1, 0, input);
-
-                throw nvae;
-            }
-
-            switch (alt1) {
-                case 1 :
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:308:1: ( ruleArithmetics )
-                    {
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:308:1: ( ruleArithmetics )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:309:1: ruleArithmetics
-                    {
-                     before(grammarAccess.getTypesAccess().getArithmeticsParserRuleCall_0()); 
-                    pushFollow(FOLLOW_ruleArithmetics_in_rule__Types__Alternatives586);
-                    ruleArithmetics();
-
-                    state._fsp--;
-
-                     after(grammarAccess.getTypesAccess().getArithmeticsParserRuleCall_0()); 
-
-                    }
-
-
-                    }
-                    break;
-                case 2 :
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:314:6: ( ruleStrings )
-                    {
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:314:6: ( ruleStrings )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:315:1: ruleStrings
-                    {
-                     before(grammarAccess.getTypesAccess().getStringsParserRuleCall_1()); 
-                    pushFollow(FOLLOW_ruleStrings_in_rule__Types__Alternatives603);
-                    ruleStrings();
-
-                    state._fsp--;
-
-                     after(grammarAccess.getTypesAccess().getStringsParserRuleCall_1()); 
-
-                    }
-
-
-                    }
-                    break;
-                case 3 :
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:320:6: ( ( rule__Types__Group_2__0 ) )
-                    {
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:320:6: ( ( rule__Types__Group_2__0 ) )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:321:1: ( rule__Types__Group_2__0 )
-                    {
-                     before(grammarAccess.getTypesAccess().getGroup_2()); 
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:322:1: ( rule__Types__Group_2__0 )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:322:2: rule__Types__Group_2__0
-                    {
-                    pushFollow(FOLLOW_rule__Types__Group_2__0_in_rule__Types__Alternatives620);
-                    rule__Types__Group_2__0();
-
-                    state._fsp--;
-
-
-                    }
-
-                     after(grammarAccess.getTypesAccess().getGroup_2()); 
-
-                    }
-
-
-                    }
-                    break;
-
-            }
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Types__Alternatives"
-
-
-    // $ANTLR start "rule__E_STRING__Alternatives"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:331:1: rule__E_STRING__Alternatives : ( ( RULE_STRING ) | ( RULE_ID ) );
-    public final void rule__E_STRING__Alternatives() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:335:1: ( ( RULE_STRING ) | ( RULE_ID ) )
-            int alt2=2;
-            int LA2_0 = input.LA(1);
-
-            if ( (LA2_0==RULE_STRING) ) {
-                alt2=1;
-            }
-            else if ( (LA2_0==RULE_ID) ) {
-                alt2=2;
-            }
-            else {
-                NoViableAltException nvae =
-                    new NoViableAltException("", 2, 0, input);
-
-                throw nvae;
-            }
-            switch (alt2) {
-                case 1 :
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:336:1: ( RULE_STRING )
-                    {
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:336:1: ( RULE_STRING )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:337:1: RULE_STRING
-                    {
-                     before(grammarAccess.getE_STRINGAccess().getSTRINGTerminalRuleCall_0()); 
-                    match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rule__E_STRING__Alternatives653); 
-                     after(grammarAccess.getE_STRINGAccess().getSTRINGTerminalRuleCall_0()); 
-
-                    }
-
-
-                    }
-                    break;
-                case 2 :
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:342:6: ( RULE_ID )
-                    {
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:342:6: ( RULE_ID )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:343:1: RULE_ID
-                    {
-                     before(grammarAccess.getE_STRINGAccess().getIDTerminalRuleCall_1()); 
-                    match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__E_STRING__Alternatives670); 
-                     after(grammarAccess.getE_STRINGAccess().getIDTerminalRuleCall_1()); 
-
-                    }
-
-
-                    }
-                    break;
-
-            }
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__E_STRING__Alternatives"
-
-
-    // $ANTLR start "rule__OperationsType__Alternatives"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:353:1: rule__OperationsType__Alternatives : ( ( ( '+' ) ) | ( ( '-' ) ) | ( ( '*' ) ) | ( ( '/' ) ) | ( ( '%' ) ) | ( ( '>' ) ) | ( ( '<' ) ) | ( ( '=' ) ) | ( ( '!=' ) ) | ( ( '<=' ) ) | ( ( '>=' ) ) | ( ( 'AND' ) ) | ( ( 'OR' ) ) | ( ( 'XOR' ) ) );
-    public final void rule__OperationsType__Alternatives() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:357:1: ( ( ( '+' ) ) | ( ( '-' ) ) | ( ( '*' ) ) | ( ( '/' ) ) | ( ( '%' ) ) | ( ( '>' ) ) | ( ( '<' ) ) | ( ( '=' ) ) | ( ( '!=' ) ) | ( ( '<=' ) ) | ( ( '>=' ) ) | ( ( 'AND' ) ) | ( ( 'OR' ) ) | ( ( 'XOR' ) ) )
-            int alt3=14;
-            switch ( input.LA(1) ) {
-            case 11:
-                {
-                alt3=1;
-                }
-                break;
-            case 12:
-                {
-                alt3=2;
-                }
-                break;
-            case 13:
-                {
-                alt3=3;
-                }
-                break;
-            case 14:
-                {
-                alt3=4;
-                }
-                break;
-            case 15:
-                {
-                alt3=5;
-                }
-                break;
-            case 16:
-                {
-                alt3=6;
-                }
-                break;
-            case 17:
-                {
-                alt3=7;
-                }
-                break;
-            case 18:
-                {
-                alt3=8;
-                }
-                break;
-            case 19:
-                {
-                alt3=9;
-                }
-                break;
-            case 20:
-                {
-                alt3=10;
-                }
-                break;
-            case 21:
-                {
-                alt3=11;
-                }
-                break;
-            case 22:
-                {
-                alt3=12;
-                }
-                break;
-            case 23:
-                {
-                alt3=13;
-                }
-                break;
-            case 24:
-                {
-                alt3=14;
-                }
-                break;
-            default:
-                NoViableAltException nvae =
-                    new NoViableAltException("", 3, 0, input);
-
-                throw nvae;
-            }
-
-            switch (alt3) {
-                case 1 :
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:358:1: ( ( '+' ) )
-                    {
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:358:1: ( ( '+' ) )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:359:1: ( '+' )
-                    {
-                     before(grammarAccess.getOperationsTypeAccess().getADDEnumLiteralDeclaration_0()); 
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:360:1: ( '+' )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:360:3: '+'
-                    {
-                    match(input,11,FOLLOW_11_in_rule__OperationsType__Alternatives703); 
-
-                    }
-
-                     after(grammarAccess.getOperationsTypeAccess().getADDEnumLiteralDeclaration_0()); 
-
-                    }
-
-
-                    }
-                    break;
-                case 2 :
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:365:6: ( ( '-' ) )
-                    {
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:365:6: ( ( '-' ) )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:366:1: ( '-' )
-                    {
-                     before(grammarAccess.getOperationsTypeAccess().getSUBEnumLiteralDeclaration_1()); 
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:367:1: ( '-' )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:367:3: '-'
-                    {
-                    match(input,12,FOLLOW_12_in_rule__OperationsType__Alternatives724); 
-
-                    }
-
-                     after(grammarAccess.getOperationsTypeAccess().getSUBEnumLiteralDeclaration_1()); 
-
-                    }
-
-
-                    }
-                    break;
-                case 3 :
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:372:6: ( ( '*' ) )
-                    {
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:372:6: ( ( '*' ) )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:373:1: ( '*' )
-                    {
-                     before(grammarAccess.getOperationsTypeAccess().getMULTEnumLiteralDeclaration_2()); 
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:374:1: ( '*' )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:374:3: '*'
-                    {
-                    match(input,13,FOLLOW_13_in_rule__OperationsType__Alternatives745); 
-
-                    }
-
-                     after(grammarAccess.getOperationsTypeAccess().getMULTEnumLiteralDeclaration_2()); 
-
-                    }
-
-
-                    }
-                    break;
-                case 4 :
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:379:6: ( ( '/' ) )
-                    {
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:379:6: ( ( '/' ) )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:380:1: ( '/' )
-                    {
-                     before(grammarAccess.getOperationsTypeAccess().getDIVEnumLiteralDeclaration_3()); 
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:381:1: ( '/' )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:381:3: '/'
-                    {
-                    match(input,14,FOLLOW_14_in_rule__OperationsType__Alternatives766); 
-
-                    }
-
-                     after(grammarAccess.getOperationsTypeAccess().getDIVEnumLiteralDeclaration_3()); 
-
-                    }
-
-
-                    }
-                    break;
-                case 5 :
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:386:6: ( ( '%' ) )
-                    {
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:386:6: ( ( '%' ) )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:387:1: ( '%' )
-                    {
-                     before(grammarAccess.getOperationsTypeAccess().getMODEnumLiteralDeclaration_4()); 
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:388:1: ( '%' )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:388:3: '%'
-                    {
-                    match(input,15,FOLLOW_15_in_rule__OperationsType__Alternatives787); 
-
-                    }
-
-                     after(grammarAccess.getOperationsTypeAccess().getMODEnumLiteralDeclaration_4()); 
-
-                    }
-
-
-                    }
-                    break;
-                case 6 :
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:393:6: ( ( '>' ) )
-                    {
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:393:6: ( ( '>' ) )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:394:1: ( '>' )
-                    {
-                     before(grammarAccess.getOperationsTypeAccess().getGREATEREnumLiteralDeclaration_5()); 
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:395:1: ( '>' )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:395:3: '>'
-                    {
-                    match(input,16,FOLLOW_16_in_rule__OperationsType__Alternatives808); 
-
-                    }
-
-                     after(grammarAccess.getOperationsTypeAccess().getGREATEREnumLiteralDeclaration_5()); 
-
-                    }
-
-
-                    }
-                    break;
-                case 7 :
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:400:6: ( ( '<' ) )
-                    {
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:400:6: ( ( '<' ) )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:401:1: ( '<' )
-                    {
-                     before(grammarAccess.getOperationsTypeAccess().getLESSEnumLiteralDeclaration_6()); 
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:402:1: ( '<' )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:402:3: '<'
-                    {
-                    match(input,17,FOLLOW_17_in_rule__OperationsType__Alternatives829); 
-
-                    }
-
-                     after(grammarAccess.getOperationsTypeAccess().getLESSEnumLiteralDeclaration_6()); 
-
-                    }
-
-
-                    }
-                    break;
-                case 8 :
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:407:6: ( ( '=' ) )
-                    {
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:407:6: ( ( '=' ) )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:408:1: ( '=' )
-                    {
-                     before(grammarAccess.getOperationsTypeAccess().getEQUALSEnumLiteralDeclaration_7()); 
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:409:1: ( '=' )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:409:3: '='
-                    {
-                    match(input,18,FOLLOW_18_in_rule__OperationsType__Alternatives850); 
-
-                    }
-
-                     after(grammarAccess.getOperationsTypeAccess().getEQUALSEnumLiteralDeclaration_7()); 
-
-                    }
-
-
-                    }
-                    break;
-                case 9 :
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:414:6: ( ( '!=' ) )
-                    {
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:414:6: ( ( '!=' ) )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:415:1: ( '!=' )
-                    {
-                     before(grammarAccess.getOperationsTypeAccess().getNOTEQUALEnumLiteralDeclaration_8()); 
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:416:1: ( '!=' )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:416:3: '!='
-                    {
-                    match(input,19,FOLLOW_19_in_rule__OperationsType__Alternatives871); 
-
-                    }
-
-                     after(grammarAccess.getOperationsTypeAccess().getNOTEQUALEnumLiteralDeclaration_8()); 
-
-                    }
-
-
-                    }
-                    break;
-                case 10 :
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:421:6: ( ( '<=' ) )
-                    {
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:421:6: ( ( '<=' ) )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:422:1: ( '<=' )
-                    {
-                     before(grammarAccess.getOperationsTypeAccess().getLESSEQUALEnumLiteralDeclaration_9()); 
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:423:1: ( '<=' )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:423:3: '<='
-                    {
-                    match(input,20,FOLLOW_20_in_rule__OperationsType__Alternatives892); 
-
-                    }
-
-                     after(grammarAccess.getOperationsTypeAccess().getLESSEQUALEnumLiteralDeclaration_9()); 
-
-                    }
-
-
-                    }
-                    break;
-                case 11 :
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:428:6: ( ( '>=' ) )
-                    {
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:428:6: ( ( '>=' ) )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:429:1: ( '>=' )
-                    {
-                     before(grammarAccess.getOperationsTypeAccess().getGREATEREQUALEnumLiteralDeclaration_10()); 
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:430:1: ( '>=' )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:430:3: '>='
-                    {
-                    match(input,21,FOLLOW_21_in_rule__OperationsType__Alternatives913); 
-
-                    }
-
-                     after(grammarAccess.getOperationsTypeAccess().getGREATEREQUALEnumLiteralDeclaration_10()); 
-
-                    }
-
-
-                    }
-                    break;
-                case 12 :
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:435:6: ( ( 'AND' ) )
-                    {
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:435:6: ( ( 'AND' ) )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:436:1: ( 'AND' )
-                    {
-                     before(grammarAccess.getOperationsTypeAccess().getANDEnumLiteralDeclaration_11()); 
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:437:1: ( 'AND' )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:437:3: 'AND'
-                    {
-                    match(input,22,FOLLOW_22_in_rule__OperationsType__Alternatives934); 
-
-                    }
-
-                     after(grammarAccess.getOperationsTypeAccess().getANDEnumLiteralDeclaration_11()); 
-
-                    }
-
-
-                    }
-                    break;
-                case 13 :
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:442:6: ( ( 'OR' ) )
-                    {
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:442:6: ( ( 'OR' ) )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:443:1: ( 'OR' )
-                    {
-                     before(grammarAccess.getOperationsTypeAccess().getOREnumLiteralDeclaration_12()); 
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:444:1: ( 'OR' )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:444:3: 'OR'
-                    {
-                    match(input,23,FOLLOW_23_in_rule__OperationsType__Alternatives955); 
-
-                    }
-
-                     after(grammarAccess.getOperationsTypeAccess().getOREnumLiteralDeclaration_12()); 
-
-                    }
-
-
-                    }
-                    break;
-                case 14 :
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:449:6: ( ( 'XOR' ) )
-                    {
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:449:6: ( ( 'XOR' ) )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:450:1: ( 'XOR' )
-                    {
-                     before(grammarAccess.getOperationsTypeAccess().getXOREnumLiteralDeclaration_13()); 
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:451:1: ( 'XOR' )
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:451:3: 'XOR'
-                    {
-                    match(input,24,FOLLOW_24_in_rule__OperationsType__Alternatives976); 
-
-                    }
-
-                     after(grammarAccess.getOperationsTypeAccess().getXOREnumLiteralDeclaration_13()); 
-
-                    }
-
-
-                    }
-                    break;
-
-            }
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__OperationsType__Alternatives"
-
-
-    // $ANTLR start "rule__Term__Group__0"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:463:1: rule__Term__Group__0 : rule__Term__Group__0__Impl rule__Term__Group__1 ;
-    public final void rule__Term__Group__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:467:1: ( rule__Term__Group__0__Impl rule__Term__Group__1 )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:468:2: rule__Term__Group__0__Impl rule__Term__Group__1
-            {
-            pushFollow(FOLLOW_rule__Term__Group__0__Impl_in_rule__Term__Group__01009);
-            rule__Term__Group__0__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__Term__Group__1_in_rule__Term__Group__01012);
-            rule__Term__Group__1();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Term__Group__0"
-
-
-    // $ANTLR start "rule__Term__Group__0__Impl"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:475:1: rule__Term__Group__0__Impl : ( ruleTypes ) ;
-    public final void rule__Term__Group__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:479:1: ( ( ruleTypes ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:480:1: ( ruleTypes )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:480:1: ( ruleTypes )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:481:1: ruleTypes
-            {
-             before(grammarAccess.getTermAccess().getTypesParserRuleCall_0()); 
-            pushFollow(FOLLOW_ruleTypes_in_rule__Term__Group__0__Impl1039);
-            ruleTypes();
-
-            state._fsp--;
-
-             after(grammarAccess.getTermAccess().getTypesParserRuleCall_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Term__Group__0__Impl"
-
-
-    // $ANTLR start "rule__Term__Group__1"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:492:1: rule__Term__Group__1 : rule__Term__Group__1__Impl ;
-    public final void rule__Term__Group__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:496:1: ( rule__Term__Group__1__Impl )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:497:2: rule__Term__Group__1__Impl
-            {
-            pushFollow(FOLLOW_rule__Term__Group__1__Impl_in_rule__Term__Group__11068);
-            rule__Term__Group__1__Impl();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Term__Group__1"
-
-
-    // $ANTLR start "rule__Term__Group__1__Impl"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:503:1: rule__Term__Group__1__Impl : ( ( rule__Term__Group_1__0 )* ) ;
-    public final void rule__Term__Group__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:507:1: ( ( ( rule__Term__Group_1__0 )* ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:508:1: ( ( rule__Term__Group_1__0 )* )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:508:1: ( ( rule__Term__Group_1__0 )* )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:509:1: ( rule__Term__Group_1__0 )*
-            {
-             before(grammarAccess.getTermAccess().getGroup_1()); 
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:510:1: ( rule__Term__Group_1__0 )*
-            loop4:
-            do {
-                int alt4=2;
-                int LA4_0 = input.LA(1);
-
-                if ( ((LA4_0>=11 && LA4_0<=24)) ) {
-                    alt4=1;
-                }
-
-
-                switch (alt4) {
-            	case 1 :
-            	    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:510:2: rule__Term__Group_1__0
-            	    {
-            	    pushFollow(FOLLOW_rule__Term__Group_1__0_in_rule__Term__Group__1__Impl1095);
-            	    rule__Term__Group_1__0();
-
-            	    state._fsp--;
-
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop4;
-                }
-            } while (true);
-
-             after(grammarAccess.getTermAccess().getGroup_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Term__Group__1__Impl"
-
-
-    // $ANTLR start "rule__Term__Group_1__0"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:524:1: rule__Term__Group_1__0 : rule__Term__Group_1__0__Impl rule__Term__Group_1__1 ;
-    public final void rule__Term__Group_1__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:528:1: ( rule__Term__Group_1__0__Impl rule__Term__Group_1__1 )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:529:2: rule__Term__Group_1__0__Impl rule__Term__Group_1__1
-            {
-            pushFollow(FOLLOW_rule__Term__Group_1__0__Impl_in_rule__Term__Group_1__01130);
-            rule__Term__Group_1__0__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__Term__Group_1__1_in_rule__Term__Group_1__01133);
-            rule__Term__Group_1__1();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Term__Group_1__0"
-
-
-    // $ANTLR start "rule__Term__Group_1__0__Impl"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:536:1: rule__Term__Group_1__0__Impl : ( () ) ;
-    public final void rule__Term__Group_1__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:540:1: ( ( () ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:541:1: ( () )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:541:1: ( () )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:542:1: ()
-            {
-             before(grammarAccess.getTermAccess().getTermLeftAction_1_0()); 
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:543:1: ()
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:545:1: 
-            {
-            }
-
-             after(grammarAccess.getTermAccess().getTermLeftAction_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Term__Group_1__0__Impl"
-
-
-    // $ANTLR start "rule__Term__Group_1__1"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:555:1: rule__Term__Group_1__1 : rule__Term__Group_1__1__Impl rule__Term__Group_1__2 ;
-    public final void rule__Term__Group_1__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:559:1: ( rule__Term__Group_1__1__Impl rule__Term__Group_1__2 )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:560:2: rule__Term__Group_1__1__Impl rule__Term__Group_1__2
-            {
-            pushFollow(FOLLOW_rule__Term__Group_1__1__Impl_in_rule__Term__Group_1__11191);
-            rule__Term__Group_1__1__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__Term__Group_1__2_in_rule__Term__Group_1__11194);
-            rule__Term__Group_1__2();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Term__Group_1__1"
-
-
-    // $ANTLR start "rule__Term__Group_1__1__Impl"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:567:1: rule__Term__Group_1__1__Impl : ( ( rule__Term__OperationsAssignment_1_1 ) ) ;
-    public final void rule__Term__Group_1__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:571:1: ( ( ( rule__Term__OperationsAssignment_1_1 ) ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:572:1: ( ( rule__Term__OperationsAssignment_1_1 ) )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:572:1: ( ( rule__Term__OperationsAssignment_1_1 ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:573:1: ( rule__Term__OperationsAssignment_1_1 )
-            {
-             before(grammarAccess.getTermAccess().getOperationsAssignment_1_1()); 
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:574:1: ( rule__Term__OperationsAssignment_1_1 )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:574:2: rule__Term__OperationsAssignment_1_1
-            {
-            pushFollow(FOLLOW_rule__Term__OperationsAssignment_1_1_in_rule__Term__Group_1__1__Impl1221);
-            rule__Term__OperationsAssignment_1_1();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getTermAccess().getOperationsAssignment_1_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Term__Group_1__1__Impl"
-
-
-    // $ANTLR start "rule__Term__Group_1__2"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:584:1: rule__Term__Group_1__2 : rule__Term__Group_1__2__Impl ;
-    public final void rule__Term__Group_1__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:588:1: ( rule__Term__Group_1__2__Impl )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:589:2: rule__Term__Group_1__2__Impl
-            {
-            pushFollow(FOLLOW_rule__Term__Group_1__2__Impl_in_rule__Term__Group_1__21251);
-            rule__Term__Group_1__2__Impl();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Term__Group_1__2"
-
-
-    // $ANTLR start "rule__Term__Group_1__2__Impl"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:595:1: rule__Term__Group_1__2__Impl : ( ( rule__Term__RightAssignment_1_2 ) ) ;
-    public final void rule__Term__Group_1__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:599:1: ( ( ( rule__Term__RightAssignment_1_2 ) ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:600:1: ( ( rule__Term__RightAssignment_1_2 ) )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:600:1: ( ( rule__Term__RightAssignment_1_2 ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:601:1: ( rule__Term__RightAssignment_1_2 )
-            {
-             before(grammarAccess.getTermAccess().getRightAssignment_1_2()); 
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:602:1: ( rule__Term__RightAssignment_1_2 )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:602:2: rule__Term__RightAssignment_1_2
-            {
-            pushFollow(FOLLOW_rule__Term__RightAssignment_1_2_in_rule__Term__Group_1__2__Impl1278);
-            rule__Term__RightAssignment_1_2();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getTermAccess().getRightAssignment_1_2()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Term__Group_1__2__Impl"
-
-
-    // $ANTLR start "rule__Types__Group_2__0"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:618:1: rule__Types__Group_2__0 : rule__Types__Group_2__0__Impl rule__Types__Group_2__1 ;
-    public final void rule__Types__Group_2__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:622:1: ( rule__Types__Group_2__0__Impl rule__Types__Group_2__1 )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:623:2: rule__Types__Group_2__0__Impl rule__Types__Group_2__1
-            {
-            pushFollow(FOLLOW_rule__Types__Group_2__0__Impl_in_rule__Types__Group_2__01314);
-            rule__Types__Group_2__0__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__Types__Group_2__1_in_rule__Types__Group_2__01317);
-            rule__Types__Group_2__1();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Types__Group_2__0"
-
-
-    // $ANTLR start "rule__Types__Group_2__0__Impl"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:630:1: rule__Types__Group_2__0__Impl : ( '(' ) ;
-    public final void rule__Types__Group_2__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:634:1: ( ( '(' ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:635:1: ( '(' )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:635:1: ( '(' )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:636:1: '('
-            {
-             before(grammarAccess.getTypesAccess().getLeftParenthesisKeyword_2_0()); 
-            match(input,25,FOLLOW_25_in_rule__Types__Group_2__0__Impl1345); 
-             after(grammarAccess.getTypesAccess().getLeftParenthesisKeyword_2_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Types__Group_2__0__Impl"
-
-
-    // $ANTLR start "rule__Types__Group_2__1"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:649:1: rule__Types__Group_2__1 : rule__Types__Group_2__1__Impl rule__Types__Group_2__2 ;
-    public final void rule__Types__Group_2__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:653:1: ( rule__Types__Group_2__1__Impl rule__Types__Group_2__2 )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:654:2: rule__Types__Group_2__1__Impl rule__Types__Group_2__2
-            {
-            pushFollow(FOLLOW_rule__Types__Group_2__1__Impl_in_rule__Types__Group_2__11376);
-            rule__Types__Group_2__1__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__Types__Group_2__2_in_rule__Types__Group_2__11379);
-            rule__Types__Group_2__2();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Types__Group_2__1"
-
-
-    // $ANTLR start "rule__Types__Group_2__1__Impl"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:661:1: rule__Types__Group_2__1__Impl : ( ruleTerm ) ;
-    public final void rule__Types__Group_2__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:665:1: ( ( ruleTerm ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:666:1: ( ruleTerm )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:666:1: ( ruleTerm )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:667:1: ruleTerm
-            {
-             before(grammarAccess.getTypesAccess().getTermParserRuleCall_2_1()); 
-            pushFollow(FOLLOW_ruleTerm_in_rule__Types__Group_2__1__Impl1406);
-            ruleTerm();
-
-            state._fsp--;
-
-             after(grammarAccess.getTypesAccess().getTermParserRuleCall_2_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Types__Group_2__1__Impl"
-
-
-    // $ANTLR start "rule__Types__Group_2__2"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:678:1: rule__Types__Group_2__2 : rule__Types__Group_2__2__Impl ;
-    public final void rule__Types__Group_2__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:682:1: ( rule__Types__Group_2__2__Impl )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:683:2: rule__Types__Group_2__2__Impl
-            {
-            pushFollow(FOLLOW_rule__Types__Group_2__2__Impl_in_rule__Types__Group_2__21435);
-            rule__Types__Group_2__2__Impl();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Types__Group_2__2"
-
-
-    // $ANTLR start "rule__Types__Group_2__2__Impl"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:689:1: rule__Types__Group_2__2__Impl : ( ')' ) ;
-    public final void rule__Types__Group_2__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:693:1: ( ( ')' ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:694:1: ( ')' )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:694:1: ( ')' )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:695:1: ')'
-            {
-             before(grammarAccess.getTypesAccess().getRightParenthesisKeyword_2_2()); 
-            match(input,26,FOLLOW_26_in_rule__Types__Group_2__2__Impl1463); 
-             after(grammarAccess.getTypesAccess().getRightParenthesisKeyword_2_2()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Types__Group_2__2__Impl"
-
-
-    // $ANTLR start "rule__Arithmetics__Group__0"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:714:1: rule__Arithmetics__Group__0 : rule__Arithmetics__Group__0__Impl rule__Arithmetics__Group__1 ;
-    public final void rule__Arithmetics__Group__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:718:1: ( rule__Arithmetics__Group__0__Impl rule__Arithmetics__Group__1 )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:719:2: rule__Arithmetics__Group__0__Impl rule__Arithmetics__Group__1
-            {
-            pushFollow(FOLLOW_rule__Arithmetics__Group__0__Impl_in_rule__Arithmetics__Group__01500);
-            rule__Arithmetics__Group__0__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__Arithmetics__Group__1_in_rule__Arithmetics__Group__01503);
-            rule__Arithmetics__Group__1();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Arithmetics__Group__0"
-
-
-    // $ANTLR start "rule__Arithmetics__Group__0__Impl"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:726:1: rule__Arithmetics__Group__0__Impl : ( () ) ;
-    public final void rule__Arithmetics__Group__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:730:1: ( ( () ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:731:1: ( () )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:731:1: ( () )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:732:1: ()
-            {
-             before(grammarAccess.getArithmeticsAccess().getExpressionAction_0()); 
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:733:1: ()
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:735:1: 
-            {
-            }
-
-             after(grammarAccess.getArithmeticsAccess().getExpressionAction_0()); 
-
-            }
-
-
-            }
-
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Arithmetics__Group__0__Impl"
-
-
-    // $ANTLR start "rule__Arithmetics__Group__1"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:745:1: rule__Arithmetics__Group__1 : rule__Arithmetics__Group__1__Impl ;
-    public final void rule__Arithmetics__Group__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:749:1: ( rule__Arithmetics__Group__1__Impl )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:750:2: rule__Arithmetics__Group__1__Impl
-            {
-            pushFollow(FOLLOW_rule__Arithmetics__Group__1__Impl_in_rule__Arithmetics__Group__11561);
-            rule__Arithmetics__Group__1__Impl();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Arithmetics__Group__1"
-
-
-    // $ANTLR start "rule__Arithmetics__Group__1__Impl"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:756:1: rule__Arithmetics__Group__1__Impl : ( ruleDECIMAL ) ;
-    public final void rule__Arithmetics__Group__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:760:1: ( ( ruleDECIMAL ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:761:1: ( ruleDECIMAL )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:761:1: ( ruleDECIMAL )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:762:1: ruleDECIMAL
-            {
-             before(grammarAccess.getArithmeticsAccess().getDECIMALParserRuleCall_1()); 
-            pushFollow(FOLLOW_ruleDECIMAL_in_rule__Arithmetics__Group__1__Impl1588);
-            ruleDECIMAL();
-
-            state._fsp--;
-
-             after(grammarAccess.getArithmeticsAccess().getDECIMALParserRuleCall_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Arithmetics__Group__1__Impl"
-
-
-    // $ANTLR start "rule__Strings__Group__0"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:777:1: rule__Strings__Group__0 : rule__Strings__Group__0__Impl rule__Strings__Group__1 ;
-    public final void rule__Strings__Group__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:781:1: ( rule__Strings__Group__0__Impl rule__Strings__Group__1 )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:782:2: rule__Strings__Group__0__Impl rule__Strings__Group__1
-            {
-            pushFollow(FOLLOW_rule__Strings__Group__0__Impl_in_rule__Strings__Group__01621);
-            rule__Strings__Group__0__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__Strings__Group__1_in_rule__Strings__Group__01624);
-            rule__Strings__Group__1();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Strings__Group__0"
-
-
-    // $ANTLR start "rule__Strings__Group__0__Impl"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:789:1: rule__Strings__Group__0__Impl : ( () ) ;
-    public final void rule__Strings__Group__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:793:1: ( ( () ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:794:1: ( () )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:794:1: ( () )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:795:1: ()
-            {
-             before(grammarAccess.getStringsAccess().getExpressionAction_0()); 
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:796:1: ()
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:798:1: 
-            {
-            }
-
-             after(grammarAccess.getStringsAccess().getExpressionAction_0()); 
-
-            }
-
-
-            }
-
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Strings__Group__0__Impl"
-
-
-    // $ANTLR start "rule__Strings__Group__1"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:808:1: rule__Strings__Group__1 : rule__Strings__Group__1__Impl ;
-    public final void rule__Strings__Group__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:812:1: ( rule__Strings__Group__1__Impl )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:813:2: rule__Strings__Group__1__Impl
-            {
-            pushFollow(FOLLOW_rule__Strings__Group__1__Impl_in_rule__Strings__Group__11682);
-            rule__Strings__Group__1__Impl();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Strings__Group__1"
-
-
-    // $ANTLR start "rule__Strings__Group__1__Impl"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:819:1: rule__Strings__Group__1__Impl : ( ruleE_STRING ) ;
-    public final void rule__Strings__Group__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:823:1: ( ( ruleE_STRING ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:824:1: ( ruleE_STRING )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:824:1: ( ruleE_STRING )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:825:1: ruleE_STRING
-            {
-             before(grammarAccess.getStringsAccess().getE_STRINGParserRuleCall_1()); 
-            pushFollow(FOLLOW_ruleE_STRING_in_rule__Strings__Group__1__Impl1709);
-            ruleE_STRING();
-
-            state._fsp--;
-
-             after(grammarAccess.getStringsAccess().getE_STRINGParserRuleCall_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Strings__Group__1__Impl"
-
-
-    // $ANTLR start "rule__DECIMAL__Group__0"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:840:1: rule__DECIMAL__Group__0 : rule__DECIMAL__Group__0__Impl rule__DECIMAL__Group__1 ;
-    public final void rule__DECIMAL__Group__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:844:1: ( rule__DECIMAL__Group__0__Impl rule__DECIMAL__Group__1 )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:845:2: rule__DECIMAL__Group__0__Impl rule__DECIMAL__Group__1
-            {
-            pushFollow(FOLLOW_rule__DECIMAL__Group__0__Impl_in_rule__DECIMAL__Group__01742);
-            rule__DECIMAL__Group__0__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__DECIMAL__Group__1_in_rule__DECIMAL__Group__01745);
-            rule__DECIMAL__Group__1();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__DECIMAL__Group__0"
-
-
-    // $ANTLR start "rule__DECIMAL__Group__0__Impl"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:852:1: rule__DECIMAL__Group__0__Impl : ( ( '-' )? ) ;
-    public final void rule__DECIMAL__Group__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:856:1: ( ( ( '-' )? ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:857:1: ( ( '-' )? )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:857:1: ( ( '-' )? )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:858:1: ( '-' )?
-            {
-             before(grammarAccess.getDECIMALAccess().getHyphenMinusKeyword_0()); 
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:859:1: ( '-' )?
-            int alt5=2;
-            int LA5_0 = input.LA(1);
-
-            if ( (LA5_0==12) ) {
-                alt5=1;
-            }
-            switch (alt5) {
-                case 1 :
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:860:2: '-'
-                    {
-                    match(input,12,FOLLOW_12_in_rule__DECIMAL__Group__0__Impl1774); 
-
-                    }
-                    break;
-
-            }
-
-             after(grammarAccess.getDECIMALAccess().getHyphenMinusKeyword_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__DECIMAL__Group__0__Impl"
-
-
-    // $ANTLR start "rule__DECIMAL__Group__1"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:871:1: rule__DECIMAL__Group__1 : rule__DECIMAL__Group__1__Impl rule__DECIMAL__Group__2 ;
-    public final void rule__DECIMAL__Group__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:875:1: ( rule__DECIMAL__Group__1__Impl rule__DECIMAL__Group__2 )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:876:2: rule__DECIMAL__Group__1__Impl rule__DECIMAL__Group__2
-            {
-            pushFollow(FOLLOW_rule__DECIMAL__Group__1__Impl_in_rule__DECIMAL__Group__11807);
-            rule__DECIMAL__Group__1__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__DECIMAL__Group__2_in_rule__DECIMAL__Group__11810);
-            rule__DECIMAL__Group__2();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__DECIMAL__Group__1"
-
-
-    // $ANTLR start "rule__DECIMAL__Group__1__Impl"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:883:1: rule__DECIMAL__Group__1__Impl : ( RULE_INT ) ;
-    public final void rule__DECIMAL__Group__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:887:1: ( ( RULE_INT ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:888:1: ( RULE_INT )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:888:1: ( RULE_INT )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:889:1: RULE_INT
-            {
-             before(grammarAccess.getDECIMALAccess().getINTTerminalRuleCall_1()); 
-            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__DECIMAL__Group__1__Impl1837); 
-             after(grammarAccess.getDECIMALAccess().getINTTerminalRuleCall_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__DECIMAL__Group__1__Impl"
-
-
-    // $ANTLR start "rule__DECIMAL__Group__2"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:900:1: rule__DECIMAL__Group__2 : rule__DECIMAL__Group__2__Impl ;
-    public final void rule__DECIMAL__Group__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:904:1: ( rule__DECIMAL__Group__2__Impl )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:905:2: rule__DECIMAL__Group__2__Impl
-            {
-            pushFollow(FOLLOW_rule__DECIMAL__Group__2__Impl_in_rule__DECIMAL__Group__21866);
-            rule__DECIMAL__Group__2__Impl();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__DECIMAL__Group__2"
-
-
-    // $ANTLR start "rule__DECIMAL__Group__2__Impl"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:911:1: rule__DECIMAL__Group__2__Impl : ( ( rule__DECIMAL__Group_2__0 )? ) ;
-    public final void rule__DECIMAL__Group__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:915:1: ( ( ( rule__DECIMAL__Group_2__0 )? ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:916:1: ( ( rule__DECIMAL__Group_2__0 )? )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:916:1: ( ( rule__DECIMAL__Group_2__0 )? )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:917:1: ( rule__DECIMAL__Group_2__0 )?
-            {
-             before(grammarAccess.getDECIMALAccess().getGroup_2()); 
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:918:1: ( rule__DECIMAL__Group_2__0 )?
-            int alt6=2;
-            int LA6_0 = input.LA(1);
-
-            if ( (LA6_0==27) ) {
-                alt6=1;
-            }
-            switch (alt6) {
-                case 1 :
-                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:918:2: rule__DECIMAL__Group_2__0
-                    {
-                    pushFollow(FOLLOW_rule__DECIMAL__Group_2__0_in_rule__DECIMAL__Group__2__Impl1893);
-                    rule__DECIMAL__Group_2__0();
-
-                    state._fsp--;
-
-
-                    }
-                    break;
-
-            }
-
-             after(grammarAccess.getDECIMALAccess().getGroup_2()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__DECIMAL__Group__2__Impl"
-
-
-    // $ANTLR start "rule__DECIMAL__Group_2__0"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:934:1: rule__DECIMAL__Group_2__0 : rule__DECIMAL__Group_2__0__Impl rule__DECIMAL__Group_2__1 ;
-    public final void rule__DECIMAL__Group_2__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:938:1: ( rule__DECIMAL__Group_2__0__Impl rule__DECIMAL__Group_2__1 )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:939:2: rule__DECIMAL__Group_2__0__Impl rule__DECIMAL__Group_2__1
-            {
-            pushFollow(FOLLOW_rule__DECIMAL__Group_2__0__Impl_in_rule__DECIMAL__Group_2__01930);
-            rule__DECIMAL__Group_2__0__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__DECIMAL__Group_2__1_in_rule__DECIMAL__Group_2__01933);
-            rule__DECIMAL__Group_2__1();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__DECIMAL__Group_2__0"
-
-
-    // $ANTLR start "rule__DECIMAL__Group_2__0__Impl"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:946:1: rule__DECIMAL__Group_2__0__Impl : ( '.' ) ;
-    public final void rule__DECIMAL__Group_2__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:950:1: ( ( '.' ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:951:1: ( '.' )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:951:1: ( '.' )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:952:1: '.'
-            {
-             before(grammarAccess.getDECIMALAccess().getFullStopKeyword_2_0()); 
-            match(input,27,FOLLOW_27_in_rule__DECIMAL__Group_2__0__Impl1961); 
-             after(grammarAccess.getDECIMALAccess().getFullStopKeyword_2_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__DECIMAL__Group_2__0__Impl"
-
-
-    // $ANTLR start "rule__DECIMAL__Group_2__1"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:965:1: rule__DECIMAL__Group_2__1 : rule__DECIMAL__Group_2__1__Impl ;
-    public final void rule__DECIMAL__Group_2__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:969:1: ( rule__DECIMAL__Group_2__1__Impl )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:970:2: rule__DECIMAL__Group_2__1__Impl
-            {
-            pushFollow(FOLLOW_rule__DECIMAL__Group_2__1__Impl_in_rule__DECIMAL__Group_2__11992);
-            rule__DECIMAL__Group_2__1__Impl();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__DECIMAL__Group_2__1"
-
-
-    // $ANTLR start "rule__DECIMAL__Group_2__1__Impl"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:976:1: rule__DECIMAL__Group_2__1__Impl : ( RULE_INT ) ;
-    public final void rule__DECIMAL__Group_2__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:980:1: ( ( RULE_INT ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:981:1: ( RULE_INT )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:981:1: ( RULE_INT )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:982:1: RULE_INT
-            {
-             before(grammarAccess.getDECIMALAccess().getINTTerminalRuleCall_2_1()); 
-            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__DECIMAL__Group_2__1__Impl2019); 
-             after(grammarAccess.getDECIMALAccess().getINTTerminalRuleCall_2_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__DECIMAL__Group_2__1__Impl"
-
-
-    // $ANTLR start "rule__Model__TermsAssignment"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:998:1: rule__Model__TermsAssignment : ( ruleTerm ) ;
-    public final void rule__Model__TermsAssignment() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1002:1: ( ( ruleTerm ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1003:1: ( ruleTerm )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1003:1: ( ruleTerm )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1004:1: ruleTerm
-            {
-             before(grammarAccess.getModelAccess().getTermsTermParserRuleCall_0()); 
-            pushFollow(FOLLOW_ruleTerm_in_rule__Model__TermsAssignment2057);
-            ruleTerm();
-
-            state._fsp--;
-
-             after(grammarAccess.getModelAccess().getTermsTermParserRuleCall_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Model__TermsAssignment"
-
-
-    // $ANTLR start "rule__Term__OperationsAssignment_1_1"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1013:1: rule__Term__OperationsAssignment_1_1 : ( ruleOperations ) ;
-    public final void rule__Term__OperationsAssignment_1_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1017:1: ( ( ruleOperations ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1018:1: ( ruleOperations )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1018:1: ( ruleOperations )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1019:1: ruleOperations
-            {
-             before(grammarAccess.getTermAccess().getOperationsOperationsParserRuleCall_1_1_0()); 
-            pushFollow(FOLLOW_ruleOperations_in_rule__Term__OperationsAssignment_1_12088);
-            ruleOperations();
-
-            state._fsp--;
-
-             after(grammarAccess.getTermAccess().getOperationsOperationsParserRuleCall_1_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Term__OperationsAssignment_1_1"
-
-
-    // $ANTLR start "rule__Term__RightAssignment_1_2"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1028:1: rule__Term__RightAssignment_1_2 : ( ruleTypes ) ;
-    public final void rule__Term__RightAssignment_1_2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1032:1: ( ( ruleTypes ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1033:1: ( ruleTypes )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1033:1: ( ruleTypes )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1034:1: ruleTypes
-            {
-             before(grammarAccess.getTermAccess().getRightTypesParserRuleCall_1_2_0()); 
-            pushFollow(FOLLOW_ruleTypes_in_rule__Term__RightAssignment_1_22119);
-            ruleTypes();
-
-            state._fsp--;
-
-             after(grammarAccess.getTermAccess().getRightTypesParserRuleCall_1_2_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Term__RightAssignment_1_2"
-
-
-    // $ANTLR start "rule__Operations__TermOperationsAssignment"
-    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1043:1: rule__Operations__TermOperationsAssignment : ( ruleOperationsType ) ;
-    public final void rule__Operations__TermOperationsAssignment() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1047:1: ( ( ruleOperationsType ) )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1048:1: ( ruleOperationsType )
-            {
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1048:1: ( ruleOperationsType )
-            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1049:1: ruleOperationsType
-            {
-             before(grammarAccess.getOperationsAccess().getTermOperationsOperationsTypeEnumRuleCall_0()); 
-            pushFollow(FOLLOW_ruleOperationsType_in_rule__Operations__TermOperationsAssignment2150);
-            ruleOperationsType();
-
-            state._fsp--;
-
-             after(grammarAccess.getOperationsAccess().getTermOperationsOperationsTypeEnumRuleCall_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Operations__TermOperationsAssignment"
-
-    // Delegated rules
-
-
- 
-
-    public static final BitSet FOLLOW_ruleModel_in_entryRuleModel61 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleModel68 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Model__TermsAssignment_in_ruleModel94 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleTerm_in_entryRuleTerm121 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleTerm128 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Term__Group__0_in_ruleTerm154 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleTypes_in_entryRuleTypes181 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleTypes188 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Types__Alternatives_in_ruleTypes214 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleArithmetics_in_entryRuleArithmetics241 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleArithmetics248 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Arithmetics__Group__0_in_ruleArithmetics274 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleStrings_in_entryRuleStrings301 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleStrings308 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Strings__Group__0_in_ruleStrings334 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleDECIMAL_in_entryRuleDECIMAL361 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleDECIMAL368 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__DECIMAL__Group__0_in_ruleDECIMAL394 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleE_STRING_in_entryRuleE_STRING421 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleE_STRING428 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__E_STRING__Alternatives_in_ruleE_STRING454 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleOperations_in_entryRuleOperations481 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleOperations488 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Operations__TermOperationsAssignment_in_ruleOperations514 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__OperationsType__Alternatives_in_ruleOperationsType551 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleArithmetics_in_rule__Types__Alternatives586 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleStrings_in_rule__Types__Alternatives603 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Types__Group_2__0_in_rule__Types__Alternatives620 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_STRING_in_rule__E_STRING__Alternatives653 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_ID_in_rule__E_STRING__Alternatives670 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_11_in_rule__OperationsType__Alternatives703 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_12_in_rule__OperationsType__Alternatives724 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_13_in_rule__OperationsType__Alternatives745 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_14_in_rule__OperationsType__Alternatives766 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_15_in_rule__OperationsType__Alternatives787 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_16_in_rule__OperationsType__Alternatives808 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_17_in_rule__OperationsType__Alternatives829 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_18_in_rule__OperationsType__Alternatives850 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_19_in_rule__OperationsType__Alternatives871 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_20_in_rule__OperationsType__Alternatives892 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_21_in_rule__OperationsType__Alternatives913 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_22_in_rule__OperationsType__Alternatives934 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_23_in_rule__OperationsType__Alternatives955 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_24_in_rule__OperationsType__Alternatives976 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Term__Group__0__Impl_in_rule__Term__Group__01009 = new BitSet(new long[]{0x0000000001FFF800L});
-    public static final BitSet FOLLOW_rule__Term__Group__1_in_rule__Term__Group__01012 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleTypes_in_rule__Term__Group__0__Impl1039 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Term__Group__1__Impl_in_rule__Term__Group__11068 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Term__Group_1__0_in_rule__Term__Group__1__Impl1095 = new BitSet(new long[]{0x0000000001FFF802L});
-    public static final BitSet FOLLOW_rule__Term__Group_1__0__Impl_in_rule__Term__Group_1__01130 = new BitSet(new long[]{0x0000000001FFF800L});
-    public static final BitSet FOLLOW_rule__Term__Group_1__1_in_rule__Term__Group_1__01133 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Term__Group_1__1__Impl_in_rule__Term__Group_1__11191 = new BitSet(new long[]{0x0000000002001070L});
-    public static final BitSet FOLLOW_rule__Term__Group_1__2_in_rule__Term__Group_1__11194 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Term__OperationsAssignment_1_1_in_rule__Term__Group_1__1__Impl1221 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Term__Group_1__2__Impl_in_rule__Term__Group_1__21251 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Term__RightAssignment_1_2_in_rule__Term__Group_1__2__Impl1278 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Types__Group_2__0__Impl_in_rule__Types__Group_2__01314 = new BitSet(new long[]{0x0000000002001070L});
-    public static final BitSet FOLLOW_rule__Types__Group_2__1_in_rule__Types__Group_2__01317 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_25_in_rule__Types__Group_2__0__Impl1345 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Types__Group_2__1__Impl_in_rule__Types__Group_2__11376 = new BitSet(new long[]{0x0000000004000000L});
-    public static final BitSet FOLLOW_rule__Types__Group_2__2_in_rule__Types__Group_2__11379 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleTerm_in_rule__Types__Group_2__1__Impl1406 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Types__Group_2__2__Impl_in_rule__Types__Group_2__21435 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_26_in_rule__Types__Group_2__2__Impl1463 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Arithmetics__Group__0__Impl_in_rule__Arithmetics__Group__01500 = new BitSet(new long[]{0x0000000000001040L});
-    public static final BitSet FOLLOW_rule__Arithmetics__Group__1_in_rule__Arithmetics__Group__01503 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Arithmetics__Group__1__Impl_in_rule__Arithmetics__Group__11561 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleDECIMAL_in_rule__Arithmetics__Group__1__Impl1588 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Strings__Group__0__Impl_in_rule__Strings__Group__01621 = new BitSet(new long[]{0x0000000000000030L});
-    public static final BitSet FOLLOW_rule__Strings__Group__1_in_rule__Strings__Group__01624 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Strings__Group__1__Impl_in_rule__Strings__Group__11682 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleE_STRING_in_rule__Strings__Group__1__Impl1709 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__DECIMAL__Group__0__Impl_in_rule__DECIMAL__Group__01742 = new BitSet(new long[]{0x0000000000001040L});
-    public static final BitSet FOLLOW_rule__DECIMAL__Group__1_in_rule__DECIMAL__Group__01745 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_12_in_rule__DECIMAL__Group__0__Impl1774 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__DECIMAL__Group__1__Impl_in_rule__DECIMAL__Group__11807 = new BitSet(new long[]{0x0000000008000000L});
-    public static final BitSet FOLLOW_rule__DECIMAL__Group__2_in_rule__DECIMAL__Group__11810 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_INT_in_rule__DECIMAL__Group__1__Impl1837 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__DECIMAL__Group__2__Impl_in_rule__DECIMAL__Group__21866 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__DECIMAL__Group_2__0_in_rule__DECIMAL__Group__2__Impl1893 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__DECIMAL__Group_2__0__Impl_in_rule__DECIMAL__Group_2__01930 = new BitSet(new long[]{0x0000000000000040L});
-    public static final BitSet FOLLOW_rule__DECIMAL__Group_2__1_in_rule__DECIMAL__Group_2__01933 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_27_in_rule__DECIMAL__Group_2__0__Impl1961 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__DECIMAL__Group_2__1__Impl_in_rule__DECIMAL__Group_2__11992 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_INT_in_rule__DECIMAL__Group_2__1__Impl2019 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleTerm_in_rule__Model__TermsAssignment2057 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleOperations_in_rule__Term__OperationsAssignment_1_12088 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleTypes_in_rule__Term__RightAssignment_1_22119 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleOperationsType_in_rule__Operations__TermOperationsAssignment2150 = new BitSet(new long[]{0x0000000000000002L});
-
+public class InternalMyDslParser 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", "'true'", "'false'", "'*'", "'/'", "'%'", "'+'", "'-'", "'>'", "'<'", "'='", "'!='", "'<='", "'>='", "'AND'", "'OR'", "'XOR'", "'.'", "'?'", "':'", "'NOT'", "'^'", "'('", "')'", "','"
+    };
+    public static final int RULE_ID=5;
+    public static final int T__29=29;
+    public static final int T__28=28;
+    public static final int T__27=27;
+    public static final int T__26=26;
+    public static final int T__25=25;
+    public static final int T__24=24;
+    public static final int T__23=23;
+    public static final int T__22=22;
+    public static final int RULE_ANY_OTHER=10;
+    public static final int T__21=21;
+    public static final int T__20=20;
+    public static final int RULE_SL_COMMENT=8;
+    public static final int EOF=-1;
+    public static final int RULE_ML_COMMENT=7;
+    public static final int T__30=30;
+    public static final int T__19=19;
+    public static final int T__31=31;
+    public static final int RULE_STRING=4;
+    public static final int T__32=32;
+    public static final int T__33=33;
+    public static final int T__16=16;
+    public static final int T__34=34;
+    public static final int T__15=15;
+    public static final int T__18=18;
+    public static final int T__17=17;
+    public static final int T__12=12;
+    public static final int T__11=11;
+    public static final int T__14=14;
+    public static final int T__13=13;
+    public static final int RULE_INT=6;
+    public static final int RULE_WS=9;
+
+    // delegates
+    // delegators
+
+
+        public InternalMyDslParser(TokenStream input) {
+            this(input, new RecognizerSharedState());
+        }
+        public InternalMyDslParser(TokenStream input, RecognizerSharedState state) {
+            super(input, state);
+             
+        }
+        
+
+    public String[] getTokenNames() { return InternalMyDslParser.tokenNames; }
+    public String getGrammarFileName() { return "../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g"; }
+
+
+     
+     	private MyDslGrammarAccess grammarAccess;
+     	
+        public void setGrammarAccess(MyDslGrammarAccess grammarAccess) {
+        	this.grammarAccess = grammarAccess;
+        }
+        
+        @Override
+        protected Grammar getGrammar() {
+        	return grammarAccess.getGrammar();
+        }
+        
+        @Override
+        protected String getValueForTokenName(String tokenName) {
+        	return tokenName;
+        }
+
+
+
+
+    // $ANTLR start "entryRuleModel"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:60:1: entryRuleModel : ruleModel EOF ;
+    public final void entryRuleModel() throws RecognitionException {
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:61:1: ( ruleModel EOF )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:62:1: ruleModel EOF
+            {
+             before(grammarAccess.getModelRule()); 
+            pushFollow(FOLLOW_ruleModel_in_entryRuleModel61);
+            ruleModel();
+
+            state._fsp--;
+
+             after(grammarAccess.getModelRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleModel68); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleModel"
+
+
+    // $ANTLR start "ruleModel"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:69:1: ruleModel : ( ( rule__Model__TermsAssignment ) ) ;
+    public final void ruleModel() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:73:2: ( ( ( rule__Model__TermsAssignment ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:74:1: ( ( rule__Model__TermsAssignment ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:74:1: ( ( rule__Model__TermsAssignment ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:75:1: ( rule__Model__TermsAssignment )
+            {
+             before(grammarAccess.getModelAccess().getTermsAssignment()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:76:1: ( rule__Model__TermsAssignment )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:76:2: rule__Model__TermsAssignment
+            {
+            pushFollow(FOLLOW_rule__Model__TermsAssignment_in_ruleModel94);
+            rule__Model__TermsAssignment();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getModelAccess().getTermsAssignment()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleModel"
+
+
+    // $ANTLR start "entryRuleDouble"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:88:1: entryRuleDouble : ruleDouble EOF ;
+    public final void entryRuleDouble() throws RecognitionException {
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:89:1: ( ruleDouble EOF )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:90:1: ruleDouble EOF
+            {
+             before(grammarAccess.getDoubleRule()); 
+            pushFollow(FOLLOW_ruleDouble_in_entryRuleDouble121);
+            ruleDouble();
+
+            state._fsp--;
+
+             after(grammarAccess.getDoubleRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleDouble128); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleDouble"
+
+
+    // $ANTLR start "ruleDouble"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:97:1: ruleDouble : ( ( rule__Double__Group__0 ) ) ;
+    public final void ruleDouble() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:101:2: ( ( ( rule__Double__Group__0 ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:102:1: ( ( rule__Double__Group__0 ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:102:1: ( ( rule__Double__Group__0 ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:103:1: ( rule__Double__Group__0 )
+            {
+             before(grammarAccess.getDoubleAccess().getGroup()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:104:1: ( rule__Double__Group__0 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:104:2: rule__Double__Group__0
+            {
+            pushFollow(FOLLOW_rule__Double__Group__0_in_ruleDouble154);
+            rule__Double__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getDoubleAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleDouble"
+
+
+    // $ANTLR start "entryRuleInteger"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:116:1: entryRuleInteger : ruleInteger EOF ;
+    public final void entryRuleInteger() throws RecognitionException {
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:117:1: ( ruleInteger EOF )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:118:1: ruleInteger EOF
+            {
+             before(grammarAccess.getIntegerRule()); 
+            pushFollow(FOLLOW_ruleInteger_in_entryRuleInteger181);
+            ruleInteger();
+
+            state._fsp--;
+
+             after(grammarAccess.getIntegerRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleInteger188); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleInteger"
+
+
+    // $ANTLR start "ruleInteger"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:125:1: ruleInteger : ( ( rule__Integer__Group__0 ) ) ;
+    public final void ruleInteger() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:129:2: ( ( ( rule__Integer__Group__0 ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:130:1: ( ( rule__Integer__Group__0 ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:130:1: ( ( rule__Integer__Group__0 ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:131:1: ( rule__Integer__Group__0 )
+            {
+             before(grammarAccess.getIntegerAccess().getGroup()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:132:1: ( rule__Integer__Group__0 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:132:2: rule__Integer__Group__0
+            {
+            pushFollow(FOLLOW_rule__Integer__Group__0_in_ruleInteger214);
+            rule__Integer__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getIntegerAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleInteger"
+
+
+    // $ANTLR start "entryRuleEString"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:144:1: entryRuleEString : ruleEString EOF ;
+    public final void entryRuleEString() throws RecognitionException {
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:145:1: ( ruleEString EOF )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:146:1: ruleEString EOF
+            {
+             before(grammarAccess.getEStringRule()); 
+            pushFollow(FOLLOW_ruleEString_in_entryRuleEString241);
+            ruleEString();
+
+            state._fsp--;
+
+             after(grammarAccess.getEStringRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleEString248); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleEString"
+
+
+    // $ANTLR start "ruleEString"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:153:1: ruleEString : ( ( rule__EString__Alternatives ) ) ;
+    public final void ruleEString() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:157:2: ( ( ( rule__EString__Alternatives ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:158:1: ( ( rule__EString__Alternatives ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:158:1: ( ( rule__EString__Alternatives ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:159:1: ( rule__EString__Alternatives )
+            {
+             before(grammarAccess.getEStringAccess().getAlternatives()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:160:1: ( rule__EString__Alternatives )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:160:2: rule__EString__Alternatives
+            {
+            pushFollow(FOLLOW_rule__EString__Alternatives_in_ruleEString274);
+            rule__EString__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getEStringAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleEString"
+
+
+    // $ANTLR start "entryRuleEBoolean"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:172:1: entryRuleEBoolean : ruleEBoolean EOF ;
+    public final void entryRuleEBoolean() throws RecognitionException {
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:173:1: ( ruleEBoolean EOF )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:174:1: ruleEBoolean EOF
+            {
+             before(grammarAccess.getEBooleanRule()); 
+            pushFollow(FOLLOW_ruleEBoolean_in_entryRuleEBoolean301);
+            ruleEBoolean();
+
+            state._fsp--;
+
+             after(grammarAccess.getEBooleanRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleEBoolean308); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleEBoolean"
+
+
+    // $ANTLR start "ruleEBoolean"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:181:1: ruleEBoolean : ( ( rule__EBoolean__Alternatives ) ) ;
+    public final void ruleEBoolean() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:185:2: ( ( ( rule__EBoolean__Alternatives ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:186:1: ( ( rule__EBoolean__Alternatives ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:186:1: ( ( rule__EBoolean__Alternatives ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:187:1: ( rule__EBoolean__Alternatives )
+            {
+             before(grammarAccess.getEBooleanAccess().getAlternatives()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:188:1: ( rule__EBoolean__Alternatives )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:188:2: rule__EBoolean__Alternatives
+            {
+            pushFollow(FOLLOW_rule__EBoolean__Alternatives_in_ruleEBoolean334);
+            rule__EBoolean__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getEBooleanAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleEBoolean"
+
+
+    // $ANTLR start "entryRuleRootExpression"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:200:1: entryRuleRootExpression : ruleRootExpression EOF ;
+    public final void entryRuleRootExpression() throws RecognitionException {
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:201:1: ( ruleRootExpression EOF )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:202:1: ruleRootExpression EOF
+            {
+             before(grammarAccess.getRootExpressionRule()); 
+            pushFollow(FOLLOW_ruleRootExpression_in_entryRuleRootExpression361);
+            ruleRootExpression();
+
+            state._fsp--;
+
+             after(grammarAccess.getRootExpressionRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRootExpression368); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleRootExpression"
+
+
+    // $ANTLR start "ruleRootExpression"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:209:1: ruleRootExpression : ( ruleIfElseExpression ) ;
+    public final void ruleRootExpression() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:213:2: ( ( ruleIfElseExpression ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:214:1: ( ruleIfElseExpression )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:214:1: ( ruleIfElseExpression )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:215:1: ruleIfElseExpression
+            {
+             before(grammarAccess.getRootExpressionAccess().getIfElseExpressionParserRuleCall()); 
+            pushFollow(FOLLOW_ruleIfElseExpression_in_ruleRootExpression394);
+            ruleIfElseExpression();
+
+            state._fsp--;
+
+             after(grammarAccess.getRootExpressionAccess().getIfElseExpressionParserRuleCall()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleRootExpression"
+
+
+    // $ANTLR start "entryRuleIfElseExpression"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:228:1: entryRuleIfElseExpression : ruleIfElseExpression EOF ;
+    public final void entryRuleIfElseExpression() throws RecognitionException {
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:229:1: ( ruleIfElseExpression EOF )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:230:1: ruleIfElseExpression EOF
+            {
+             before(grammarAccess.getIfElseExpressionRule()); 
+            pushFollow(FOLLOW_ruleIfElseExpression_in_entryRuleIfElseExpression420);
+            ruleIfElseExpression();
+
+            state._fsp--;
+
+             after(grammarAccess.getIfElseExpressionRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleIfElseExpression427); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleIfElseExpression"
+
+
+    // $ANTLR start "ruleIfElseExpression"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:237:1: ruleIfElseExpression : ( ( rule__IfElseExpression__Group__0 ) ) ;
+    public final void ruleIfElseExpression() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:241:2: ( ( ( rule__IfElseExpression__Group__0 ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:242:1: ( ( rule__IfElseExpression__Group__0 ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:242:1: ( ( rule__IfElseExpression__Group__0 ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:243:1: ( rule__IfElseExpression__Group__0 )
+            {
+             before(grammarAccess.getIfElseExpressionAccess().getGroup()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:244:1: ( rule__IfElseExpression__Group__0 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:244:2: rule__IfElseExpression__Group__0
+            {
+            pushFollow(FOLLOW_rule__IfElseExpression__Group__0_in_ruleIfElseExpression453);
+            rule__IfElseExpression__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getIfElseExpressionAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleIfElseExpression"
+
+
+    // $ANTLR start "entryRuleBinaryBooleanExpression"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:256:1: entryRuleBinaryBooleanExpression : ruleBinaryBooleanExpression EOF ;
+    public final void entryRuleBinaryBooleanExpression() throws RecognitionException {
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:257:1: ( ruleBinaryBooleanExpression EOF )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:258:1: ruleBinaryBooleanExpression EOF
+            {
+             before(grammarAccess.getBinaryBooleanExpressionRule()); 
+            pushFollow(FOLLOW_ruleBinaryBooleanExpression_in_entryRuleBinaryBooleanExpression480);
+            ruleBinaryBooleanExpression();
+
+            state._fsp--;
+
+             after(grammarAccess.getBinaryBooleanExpressionRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleBinaryBooleanExpression487); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleBinaryBooleanExpression"
+
+
+    // $ANTLR start "ruleBinaryBooleanExpression"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:265:1: ruleBinaryBooleanExpression : ( ( rule__BinaryBooleanExpression__Group__0 ) ) ;
+    public final void ruleBinaryBooleanExpression() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:269:2: ( ( ( rule__BinaryBooleanExpression__Group__0 ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:270:1: ( ( rule__BinaryBooleanExpression__Group__0 ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:270:1: ( ( rule__BinaryBooleanExpression__Group__0 ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:271:1: ( rule__BinaryBooleanExpression__Group__0 )
+            {
+             before(grammarAccess.getBinaryBooleanExpressionAccess().getGroup()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:272:1: ( rule__BinaryBooleanExpression__Group__0 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:272:2: rule__BinaryBooleanExpression__Group__0
+            {
+            pushFollow(FOLLOW_rule__BinaryBooleanExpression__Group__0_in_ruleBinaryBooleanExpression513);
+            rule__BinaryBooleanExpression__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getBinaryBooleanExpressionAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleBinaryBooleanExpression"
+
+
+    // $ANTLR start "entryRuleUnaryBooleanExpression"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:284:1: entryRuleUnaryBooleanExpression : ruleUnaryBooleanExpression EOF ;
+    public final void entryRuleUnaryBooleanExpression() throws RecognitionException {
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:285:1: ( ruleUnaryBooleanExpression EOF )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:286:1: ruleUnaryBooleanExpression EOF
+            {
+             before(grammarAccess.getUnaryBooleanExpressionRule()); 
+            pushFollow(FOLLOW_ruleUnaryBooleanExpression_in_entryRuleUnaryBooleanExpression540);
+            ruleUnaryBooleanExpression();
+
+            state._fsp--;
+
+             after(grammarAccess.getUnaryBooleanExpressionRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleUnaryBooleanExpression547); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleUnaryBooleanExpression"
+
+
+    // $ANTLR start "ruleUnaryBooleanExpression"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:293:1: ruleUnaryBooleanExpression : ( ( rule__UnaryBooleanExpression__Alternatives ) ) ;
+    public final void ruleUnaryBooleanExpression() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:297:2: ( ( ( rule__UnaryBooleanExpression__Alternatives ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:298:1: ( ( rule__UnaryBooleanExpression__Alternatives ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:298:1: ( ( rule__UnaryBooleanExpression__Alternatives ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:299:1: ( rule__UnaryBooleanExpression__Alternatives )
+            {
+             before(grammarAccess.getUnaryBooleanExpressionAccess().getAlternatives()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:300:1: ( rule__UnaryBooleanExpression__Alternatives )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:300:2: rule__UnaryBooleanExpression__Alternatives
+            {
+            pushFollow(FOLLOW_rule__UnaryBooleanExpression__Alternatives_in_ruleUnaryBooleanExpression573);
+            rule__UnaryBooleanExpression__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getUnaryBooleanExpressionAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleUnaryBooleanExpression"
+
+
+    // $ANTLR start "entryRuleComparison"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:312:1: entryRuleComparison : ruleComparison EOF ;
+    public final void entryRuleComparison() throws RecognitionException {
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:313:1: ( ruleComparison EOF )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:314:1: ruleComparison EOF
+            {
+             before(grammarAccess.getComparisonRule()); 
+            pushFollow(FOLLOW_ruleComparison_in_entryRuleComparison600);
+            ruleComparison();
+
+            state._fsp--;
+
+             after(grammarAccess.getComparisonRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleComparison607); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleComparison"
+
+
+    // $ANTLR start "ruleComparison"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:321:1: ruleComparison : ( ( rule__Comparison__Group__0 ) ) ;
+    public final void ruleComparison() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:325:2: ( ( ( rule__Comparison__Group__0 ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:326:1: ( ( rule__Comparison__Group__0 ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:326:1: ( ( rule__Comparison__Group__0 ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:327:1: ( rule__Comparison__Group__0 )
+            {
+             before(grammarAccess.getComparisonAccess().getGroup()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:328:1: ( rule__Comparison__Group__0 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:328:2: rule__Comparison__Group__0
+            {
+            pushFollow(FOLLOW_rule__Comparison__Group__0_in_ruleComparison633);
+            rule__Comparison__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getComparisonAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleComparison"
+
+
+    // $ANTLR start "entryRuleTerm"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:340:1: entryRuleTerm : ruleTerm EOF ;
+    public final void entryRuleTerm() throws RecognitionException {
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:341:1: ( ruleTerm EOF )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:342:1: ruleTerm EOF
+            {
+             before(grammarAccess.getTermRule()); 
+            pushFollow(FOLLOW_ruleTerm_in_entryRuleTerm660);
+            ruleTerm();
+
+            state._fsp--;
+
+             after(grammarAccess.getTermRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleTerm667); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleTerm"
+
+
+    // $ANTLR start "ruleTerm"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:349:1: ruleTerm : ( ( rule__Term__Group__0 ) ) ;
+    public final void ruleTerm() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:353:2: ( ( ( rule__Term__Group__0 ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:354:1: ( ( rule__Term__Group__0 ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:354:1: ( ( rule__Term__Group__0 ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:355:1: ( rule__Term__Group__0 )
+            {
+             before(grammarAccess.getTermAccess().getGroup()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:356:1: ( rule__Term__Group__0 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:356:2: rule__Term__Group__0
+            {
+            pushFollow(FOLLOW_rule__Term__Group__0_in_ruleTerm693);
+            rule__Term__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getTermAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleTerm"
+
+
+    // $ANTLR start "entryRuleProduct"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:368:1: entryRuleProduct : ruleProduct EOF ;
+    public final void entryRuleProduct() throws RecognitionException {
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:369:1: ( ruleProduct EOF )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:370:1: ruleProduct EOF
+            {
+             before(grammarAccess.getProductRule()); 
+            pushFollow(FOLLOW_ruleProduct_in_entryRuleProduct720);
+            ruleProduct();
+
+            state._fsp--;
+
+             after(grammarAccess.getProductRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleProduct727); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleProduct"
+
+
+    // $ANTLR start "ruleProduct"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:377:1: ruleProduct : ( ( rule__Product__Group__0 ) ) ;
+    public final void ruleProduct() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:381:2: ( ( ( rule__Product__Group__0 ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:382:1: ( ( rule__Product__Group__0 ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:382:1: ( ( rule__Product__Group__0 ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:383:1: ( rule__Product__Group__0 )
+            {
+             before(grammarAccess.getProductAccess().getGroup()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:384:1: ( rule__Product__Group__0 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:384:2: rule__Product__Group__0
+            {
+            pushFollow(FOLLOW_rule__Product__Group__0_in_ruleProduct753);
+            rule__Product__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getProductAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleProduct"
+
+
+    // $ANTLR start "entryRulePower"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:396:1: entryRulePower : rulePower EOF ;
+    public final void entryRulePower() throws RecognitionException {
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:397:1: ( rulePower EOF )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:398:1: rulePower EOF
+            {
+             before(grammarAccess.getPowerRule()); 
+            pushFollow(FOLLOW_rulePower_in_entryRulePower780);
+            rulePower();
+
+            state._fsp--;
+
+             after(grammarAccess.getPowerRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulePower787); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRulePower"
+
+
+    // $ANTLR start "rulePower"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:405:1: rulePower : ( ( rule__Power__Group__0 ) ) ;
+    public final void rulePower() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:409:2: ( ( ( rule__Power__Group__0 ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:410:1: ( ( rule__Power__Group__0 ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:410:1: ( ( rule__Power__Group__0 ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:411:1: ( rule__Power__Group__0 )
+            {
+             before(grammarAccess.getPowerAccess().getGroup()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:412:1: ( rule__Power__Group__0 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:412:2: rule__Power__Group__0
+            {
+            pushFollow(FOLLOW_rule__Power__Group__0_in_rulePower813);
+            rule__Power__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getPowerAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rulePower"
+
+
+    // $ANTLR start "entryRuleAtom"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:424:1: entryRuleAtom : ruleAtom EOF ;
+    public final void entryRuleAtom() throws RecognitionException {
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:425:1: ( ruleAtom EOF )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:426:1: ruleAtom EOF
+            {
+             before(grammarAccess.getAtomRule()); 
+            pushFollow(FOLLOW_ruleAtom_in_entryRuleAtom840);
+            ruleAtom();
+
+            state._fsp--;
+
+             after(grammarAccess.getAtomRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleAtom847); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleAtom"
+
+
+    // $ANTLR start "ruleAtom"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:433:1: ruleAtom : ( ( rule__Atom__Alternatives ) ) ;
+    public final void ruleAtom() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:437:2: ( ( ( rule__Atom__Alternatives ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:438:1: ( ( rule__Atom__Alternatives ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:438:1: ( ( rule__Atom__Alternatives ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:439:1: ( rule__Atom__Alternatives )
+            {
+             before(grammarAccess.getAtomAccess().getAlternatives()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:440:1: ( rule__Atom__Alternatives )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:440:2: rule__Atom__Alternatives
+            {
+            pushFollow(FOLLOW_rule__Atom__Alternatives_in_ruleAtom873);
+            rule__Atom__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getAtomAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleAtom"
+
+
+    // $ANTLR start "entryRuleFunction"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:452:1: entryRuleFunction : ruleFunction EOF ;
+    public final void entryRuleFunction() throws RecognitionException {
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:453:1: ( ruleFunction EOF )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:454:1: ruleFunction EOF
+            {
+             before(grammarAccess.getFunctionRule()); 
+            pushFollow(FOLLOW_ruleFunction_in_entryRuleFunction900);
+            ruleFunction();
+
+            state._fsp--;
+
+             after(grammarAccess.getFunctionRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleFunction907); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleFunction"
+
+
+    // $ANTLR start "ruleFunction"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:461:1: ruleFunction : ( ( rule__Function__Group__0 ) ) ;
+    public final void ruleFunction() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:465:2: ( ( ( rule__Function__Group__0 ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:466:1: ( ( rule__Function__Group__0 ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:466:1: ( ( rule__Function__Group__0 ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:467:1: ( rule__Function__Group__0 )
+            {
+             before(grammarAccess.getFunctionAccess().getGroup()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:468:1: ( rule__Function__Group__0 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:468:2: rule__Function__Group__0
+            {
+            pushFollow(FOLLOW_rule__Function__Group__0_in_ruleFunction933);
+            rule__Function__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getFunctionAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleFunction"
+
+
+    // $ANTLR start "entryRuleLiteral"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:480:1: entryRuleLiteral : ruleLiteral EOF ;
+    public final void entryRuleLiteral() throws RecognitionException {
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:481:1: ( ruleLiteral EOF )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:482:1: ruleLiteral EOF
+            {
+             before(grammarAccess.getLiteralRule()); 
+            pushFollow(FOLLOW_ruleLiteral_in_entryRuleLiteral960);
+            ruleLiteral();
+
+            state._fsp--;
+
+             after(grammarAccess.getLiteralRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleLiteral967); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleLiteral"
+
+
+    // $ANTLR start "ruleLiteral"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:489:1: ruleLiteral : ( ( rule__Literal__Alternatives ) ) ;
+    public final void ruleLiteral() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:493:2: ( ( ( rule__Literal__Alternatives ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:494:1: ( ( rule__Literal__Alternatives ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:494:1: ( ( rule__Literal__Alternatives ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:495:1: ( rule__Literal__Alternatives )
+            {
+             before(grammarAccess.getLiteralAccess().getAlternatives()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:496:1: ( rule__Literal__Alternatives )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:496:2: rule__Literal__Alternatives
+            {
+            pushFollow(FOLLOW_rule__Literal__Alternatives_in_ruleLiteral993);
+            rule__Literal__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getLiteralAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleLiteral"
+
+
+    // $ANTLR start "entryRuleFormalParameter"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:508:1: entryRuleFormalParameter : ruleFormalParameter EOF ;
+    public final void entryRuleFormalParameter() throws RecognitionException {
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:509:1: ( ruleFormalParameter EOF )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:510:1: ruleFormalParameter EOF
+            {
+             before(grammarAccess.getFormalParameterRule()); 
+            pushFollow(FOLLOW_ruleFormalParameter_in_entryRuleFormalParameter1020);
+            ruleFormalParameter();
+
+            state._fsp--;
+
+             after(grammarAccess.getFormalParameterRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleFormalParameter1027); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleFormalParameter"
+
+
+    // $ANTLR start "ruleFormalParameter"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:517:1: ruleFormalParameter : ( ( rule__FormalParameter__ValueAssignment ) ) ;
+    public final void ruleFormalParameter() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:521:2: ( ( ( rule__FormalParameter__ValueAssignment ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:522:1: ( ( rule__FormalParameter__ValueAssignment ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:522:1: ( ( rule__FormalParameter__ValueAssignment ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:523:1: ( rule__FormalParameter__ValueAssignment )
+            {
+             before(grammarAccess.getFormalParameterAccess().getValueAssignment()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:524:1: ( rule__FormalParameter__ValueAssignment )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:524:2: rule__FormalParameter__ValueAssignment
+            {
+            pushFollow(FOLLOW_rule__FormalParameter__ValueAssignment_in_ruleFormalParameter1053);
+            rule__FormalParameter__ValueAssignment();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getFormalParameterAccess().getValueAssignment()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleFormalParameter"
+
+
+    // $ANTLR start "entryRuleBooleanLiteral"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:536:1: entryRuleBooleanLiteral : ruleBooleanLiteral EOF ;
+    public final void entryRuleBooleanLiteral() throws RecognitionException {
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:537:1: ( ruleBooleanLiteral EOF )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:538:1: ruleBooleanLiteral EOF
+            {
+             before(grammarAccess.getBooleanLiteralRule()); 
+            pushFollow(FOLLOW_ruleBooleanLiteral_in_entryRuleBooleanLiteral1080);
+            ruleBooleanLiteral();
+
+            state._fsp--;
+
+             after(grammarAccess.getBooleanLiteralRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleBooleanLiteral1087); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleBooleanLiteral"
+
+
+    // $ANTLR start "ruleBooleanLiteral"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:545:1: ruleBooleanLiteral : ( ( rule__BooleanLiteral__ValueAssignment ) ) ;
+    public final void ruleBooleanLiteral() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:549:2: ( ( ( rule__BooleanLiteral__ValueAssignment ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:550:1: ( ( rule__BooleanLiteral__ValueAssignment ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:550:1: ( ( rule__BooleanLiteral__ValueAssignment ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:551:1: ( rule__BooleanLiteral__ValueAssignment )
+            {
+             before(grammarAccess.getBooleanLiteralAccess().getValueAssignment()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:552:1: ( rule__BooleanLiteral__ValueAssignment )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:552:2: rule__BooleanLiteral__ValueAssignment
+            {
+            pushFollow(FOLLOW_rule__BooleanLiteral__ValueAssignment_in_ruleBooleanLiteral1113);
+            rule__BooleanLiteral__ValueAssignment();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getBooleanLiteralAccess().getValueAssignment()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleBooleanLiteral"
+
+
+    // $ANTLR start "entryRuleNumberLiteral"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:564:1: entryRuleNumberLiteral : ruleNumberLiteral EOF ;
+    public final void entryRuleNumberLiteral() throws RecognitionException {
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:565:1: ( ruleNumberLiteral EOF )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:566:1: ruleNumberLiteral EOF
+            {
+             before(grammarAccess.getNumberLiteralRule()); 
+            pushFollow(FOLLOW_ruleNumberLiteral_in_entryRuleNumberLiteral1140);
+            ruleNumberLiteral();
+
+            state._fsp--;
+
+             after(grammarAccess.getNumberLiteralRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleNumberLiteral1147); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleNumberLiteral"
+
+
+    // $ANTLR start "ruleNumberLiteral"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:573:1: ruleNumberLiteral : ( ( rule__NumberLiteral__Alternatives ) ) ;
+    public final void ruleNumberLiteral() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:577:2: ( ( ( rule__NumberLiteral__Alternatives ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:578:1: ( ( rule__NumberLiteral__Alternatives ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:578:1: ( ( rule__NumberLiteral__Alternatives ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:579:1: ( rule__NumberLiteral__Alternatives )
+            {
+             before(grammarAccess.getNumberLiteralAccess().getAlternatives()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:580:1: ( rule__NumberLiteral__Alternatives )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:580:2: rule__NumberLiteral__Alternatives
+            {
+            pushFollow(FOLLOW_rule__NumberLiteral__Alternatives_in_ruleNumberLiteral1173);
+            rule__NumberLiteral__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getNumberLiteralAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleNumberLiteral"
+
+
+    // $ANTLR start "entryRuleIntLiteral"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:592:1: entryRuleIntLiteral : ruleIntLiteral EOF ;
+    public final void entryRuleIntLiteral() throws RecognitionException {
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:593:1: ( ruleIntLiteral EOF )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:594:1: ruleIntLiteral EOF
+            {
+             before(grammarAccess.getIntLiteralRule()); 
+            pushFollow(FOLLOW_ruleIntLiteral_in_entryRuleIntLiteral1200);
+            ruleIntLiteral();
+
+            state._fsp--;
+
+             after(grammarAccess.getIntLiteralRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleIntLiteral1207); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleIntLiteral"
+
+
+    // $ANTLR start "ruleIntLiteral"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:601:1: ruleIntLiteral : ( ( rule__IntLiteral__ValueAssignment ) ) ;
+    public final void ruleIntLiteral() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:605:2: ( ( ( rule__IntLiteral__ValueAssignment ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:606:1: ( ( rule__IntLiteral__ValueAssignment ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:606:1: ( ( rule__IntLiteral__ValueAssignment ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:607:1: ( rule__IntLiteral__ValueAssignment )
+            {
+             before(grammarAccess.getIntLiteralAccess().getValueAssignment()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:608:1: ( rule__IntLiteral__ValueAssignment )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:608:2: rule__IntLiteral__ValueAssignment
+            {
+            pushFollow(FOLLOW_rule__IntLiteral__ValueAssignment_in_ruleIntLiteral1233);
+            rule__IntLiteral__ValueAssignment();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getIntLiteralAccess().getValueAssignment()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleIntLiteral"
+
+
+    // $ANTLR start "entryRuleDoubleLiteral"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:620:1: entryRuleDoubleLiteral : ruleDoubleLiteral EOF ;
+    public final void entryRuleDoubleLiteral() throws RecognitionException {
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:621:1: ( ruleDoubleLiteral EOF )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:622:1: ruleDoubleLiteral EOF
+            {
+             before(grammarAccess.getDoubleLiteralRule()); 
+            pushFollow(FOLLOW_ruleDoubleLiteral_in_entryRuleDoubleLiteral1260);
+            ruleDoubleLiteral();
+
+            state._fsp--;
+
+             after(grammarAccess.getDoubleLiteralRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleDoubleLiteral1267); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleDoubleLiteral"
+
+
+    // $ANTLR start "ruleDoubleLiteral"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:629:1: ruleDoubleLiteral : ( ( rule__DoubleLiteral__ValueAssignment ) ) ;
+    public final void ruleDoubleLiteral() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:633:2: ( ( ( rule__DoubleLiteral__ValueAssignment ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:634:1: ( ( rule__DoubleLiteral__ValueAssignment ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:634:1: ( ( rule__DoubleLiteral__ValueAssignment ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:635:1: ( rule__DoubleLiteral__ValueAssignment )
+            {
+             before(grammarAccess.getDoubleLiteralAccess().getValueAssignment()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:636:1: ( rule__DoubleLiteral__ValueAssignment )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:636:2: rule__DoubleLiteral__ValueAssignment
+            {
+            pushFollow(FOLLOW_rule__DoubleLiteral__ValueAssignment_in_ruleDoubleLiteral1293);
+            rule__DoubleLiteral__ValueAssignment();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getDoubleLiteralAccess().getValueAssignment()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleDoubleLiteral"
+
+
+    // $ANTLR start "ruleProductOperation"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:649:1: ruleProductOperation : ( ( rule__ProductOperation__Alternatives ) ) ;
+    public final void ruleProductOperation() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:653:1: ( ( ( rule__ProductOperation__Alternatives ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:654:1: ( ( rule__ProductOperation__Alternatives ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:654:1: ( ( rule__ProductOperation__Alternatives ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:655:1: ( rule__ProductOperation__Alternatives )
+            {
+             before(grammarAccess.getProductOperationAccess().getAlternatives()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:656:1: ( rule__ProductOperation__Alternatives )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:656:2: rule__ProductOperation__Alternatives
+            {
+            pushFollow(FOLLOW_rule__ProductOperation__Alternatives_in_ruleProductOperation1330);
+            rule__ProductOperation__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getProductOperationAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleProductOperation"
+
+
+    // $ANTLR start "ruleTermOperation"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:668:1: ruleTermOperation : ( ( rule__TermOperation__Alternatives ) ) ;
+    public final void ruleTermOperation() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:672:1: ( ( ( rule__TermOperation__Alternatives ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:673:1: ( ( rule__TermOperation__Alternatives ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:673:1: ( ( rule__TermOperation__Alternatives ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:674:1: ( rule__TermOperation__Alternatives )
+            {
+             before(grammarAccess.getTermOperationAccess().getAlternatives()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:675:1: ( rule__TermOperation__Alternatives )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:675:2: rule__TermOperation__Alternatives
+            {
+            pushFollow(FOLLOW_rule__TermOperation__Alternatives_in_ruleTermOperation1366);
+            rule__TermOperation__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getTermOperationAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleTermOperation"
+
+
+    // $ANTLR start "ruleCompareOperation"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:687:1: ruleCompareOperation : ( ( rule__CompareOperation__Alternatives ) ) ;
+    public final void ruleCompareOperation() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:691:1: ( ( ( rule__CompareOperation__Alternatives ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:692:1: ( ( rule__CompareOperation__Alternatives ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:692:1: ( ( rule__CompareOperation__Alternatives ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:693:1: ( rule__CompareOperation__Alternatives )
+            {
+             before(grammarAccess.getCompareOperationAccess().getAlternatives()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:694:1: ( rule__CompareOperation__Alternatives )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:694:2: rule__CompareOperation__Alternatives
+            {
+            pushFollow(FOLLOW_rule__CompareOperation__Alternatives_in_ruleCompareOperation1402);
+            rule__CompareOperation__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getCompareOperationAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleCompareOperation"
+
+
+    // $ANTLR start "ruleBooleanOperation"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:706:1: ruleBooleanOperation : ( ( rule__BooleanOperation__Alternatives ) ) ;
+    public final void ruleBooleanOperation() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:710:1: ( ( ( rule__BooleanOperation__Alternatives ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:711:1: ( ( rule__BooleanOperation__Alternatives ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:711:1: ( ( rule__BooleanOperation__Alternatives ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:712:1: ( rule__BooleanOperation__Alternatives )
+            {
+             before(grammarAccess.getBooleanOperationAccess().getAlternatives()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:713:1: ( rule__BooleanOperation__Alternatives )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:713:2: rule__BooleanOperation__Alternatives
+            {
+            pushFollow(FOLLOW_rule__BooleanOperation__Alternatives_in_ruleBooleanOperation1438);
+            rule__BooleanOperation__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getBooleanOperationAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleBooleanOperation"
+
+
+    // $ANTLR start "rule__EString__Alternatives"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:724:1: rule__EString__Alternatives : ( ( RULE_STRING ) | ( RULE_ID ) );
+    public final void rule__EString__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:728: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.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:729:1: ( RULE_STRING )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:729:1: ( RULE_STRING )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:730:1: RULE_STRING
+                    {
+                     before(grammarAccess.getEStringAccess().getSTRINGTerminalRuleCall_0()); 
+                    match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rule__EString__Alternatives1473); 
+                     after(grammarAccess.getEStringAccess().getSTRINGTerminalRuleCall_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:735:6: ( RULE_ID )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:735:6: ( RULE_ID )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:736:1: RULE_ID
+                    {
+                     before(grammarAccess.getEStringAccess().getIDTerminalRuleCall_1()); 
+                    match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__EString__Alternatives1490); 
+                     after(grammarAccess.getEStringAccess().getIDTerminalRuleCall_1()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EString__Alternatives"
+
+
+    // $ANTLR start "rule__EBoolean__Alternatives"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:746:1: rule__EBoolean__Alternatives : ( ( 'true' ) | ( 'false' ) );
+    public final void rule__EBoolean__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:750:1: ( ( 'true' ) | ( 'false' ) )
+            int alt2=2;
+            int LA2_0 = input.LA(1);
+
+            if ( (LA2_0==11) ) {
+                alt2=1;
+            }
+            else if ( (LA2_0==12) ) {
+                alt2=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 2, 0, input);
+
+                throw nvae;
+            }
+            switch (alt2) {
+                case 1 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:751:1: ( 'true' )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:751:1: ( 'true' )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:752:1: 'true'
+                    {
+                     before(grammarAccess.getEBooleanAccess().getTrueKeyword_0()); 
+                    match(input,11,FOLLOW_11_in_rule__EBoolean__Alternatives1523); 
+                     after(grammarAccess.getEBooleanAccess().getTrueKeyword_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:759:6: ( 'false' )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:759:6: ( 'false' )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:760:1: 'false'
+                    {
+                     before(grammarAccess.getEBooleanAccess().getFalseKeyword_1()); 
+                    match(input,12,FOLLOW_12_in_rule__EBoolean__Alternatives1543); 
+                     after(grammarAccess.getEBooleanAccess().getFalseKeyword_1()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EBoolean__Alternatives"
+
+
+    // $ANTLR start "rule__UnaryBooleanExpression__Alternatives"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:772:1: rule__UnaryBooleanExpression__Alternatives : ( ( ( rule__UnaryBooleanExpression__Group_0__0 ) ) | ( ruleComparison ) );
+    public final void rule__UnaryBooleanExpression__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:776:1: ( ( ( rule__UnaryBooleanExpression__Group_0__0 ) ) | ( ruleComparison ) )
+            int alt3=2;
+            int LA3_0 = input.LA(1);
+
+            if ( (LA3_0==30) ) {
+                alt3=1;
+            }
+            else if ( ((LA3_0>=RULE_STRING && LA3_0<=RULE_INT)||(LA3_0>=11 && LA3_0<=12)||LA3_0==17||LA3_0==32) ) {
+                alt3=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 3, 0, input);
+
+                throw nvae;
+            }
+            switch (alt3) {
+                case 1 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:777:1: ( ( rule__UnaryBooleanExpression__Group_0__0 ) )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:777:1: ( ( rule__UnaryBooleanExpression__Group_0__0 ) )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:778:1: ( rule__UnaryBooleanExpression__Group_0__0 )
+                    {
+                     before(grammarAccess.getUnaryBooleanExpressionAccess().getGroup_0()); 
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:779:1: ( rule__UnaryBooleanExpression__Group_0__0 )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:779:2: rule__UnaryBooleanExpression__Group_0__0
+                    {
+                    pushFollow(FOLLOW_rule__UnaryBooleanExpression__Group_0__0_in_rule__UnaryBooleanExpression__Alternatives1577);
+                    rule__UnaryBooleanExpression__Group_0__0();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getUnaryBooleanExpressionAccess().getGroup_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:783:6: ( ruleComparison )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:783:6: ( ruleComparison )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:784:1: ruleComparison
+                    {
+                     before(grammarAccess.getUnaryBooleanExpressionAccess().getComparisonParserRuleCall_1()); 
+                    pushFollow(FOLLOW_ruleComparison_in_rule__UnaryBooleanExpression__Alternatives1595);
+                    ruleComparison();
+
+                    state._fsp--;
+
+                     after(grammarAccess.getUnaryBooleanExpressionAccess().getComparisonParserRuleCall_1()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__UnaryBooleanExpression__Alternatives"
+
+
+    // $ANTLR start "rule__Atom__Alternatives"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:794:1: rule__Atom__Alternatives : ( ( ruleLiteral ) | ( ( rule__Atom__Group_1__0 ) ) | ( ruleFunction ) );
+    public final void rule__Atom__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:798:1: ( ( ruleLiteral ) | ( ( rule__Atom__Group_1__0 ) ) | ( ruleFunction ) )
+            int alt4=3;
+            switch ( input.LA(1) ) {
+            case RULE_STRING:
+            case RULE_INT:
+            case 11:
+            case 12:
+            case 17:
+                {
+                alt4=1;
+                }
+                break;
+            case RULE_ID:
+                {
+                int LA4_2 = input.LA(2);
+
+                if ( (LA4_2==32) ) {
+                    alt4=3;
+                }
+                else if ( (LA4_2==EOF||(LA4_2>=13 && LA4_2<=26)||(LA4_2>=28 && LA4_2<=29)||LA4_2==31||(LA4_2>=33 && LA4_2<=34)) ) {
+                    alt4=1;
+                }
+                else {
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 4, 2, input);
+
+                    throw nvae;
+                }
+                }
+                break;
+            case 32:
+                {
+                alt4=2;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 4, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt4) {
+                case 1 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:799:1: ( ruleLiteral )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:799:1: ( ruleLiteral )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:800:1: ruleLiteral
+                    {
+                     before(grammarAccess.getAtomAccess().getLiteralParserRuleCall_0()); 
+                    pushFollow(FOLLOW_ruleLiteral_in_rule__Atom__Alternatives1627);
+                    ruleLiteral();
+
+                    state._fsp--;
+
+                     after(grammarAccess.getAtomAccess().getLiteralParserRuleCall_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:805:6: ( ( rule__Atom__Group_1__0 ) )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:805:6: ( ( rule__Atom__Group_1__0 ) )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:806:1: ( rule__Atom__Group_1__0 )
+                    {
+                     before(grammarAccess.getAtomAccess().getGroup_1()); 
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:807:1: ( rule__Atom__Group_1__0 )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:807:2: rule__Atom__Group_1__0
+                    {
+                    pushFollow(FOLLOW_rule__Atom__Group_1__0_in_rule__Atom__Alternatives1644);
+                    rule__Atom__Group_1__0();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getAtomAccess().getGroup_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:811:6: ( ruleFunction )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:811:6: ( ruleFunction )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:812:1: ruleFunction
+                    {
+                     before(grammarAccess.getAtomAccess().getFunctionParserRuleCall_2()); 
+                    pushFollow(FOLLOW_ruleFunction_in_rule__Atom__Alternatives1662);
+                    ruleFunction();
+
+                    state._fsp--;
+
+                     after(grammarAccess.getAtomAccess().getFunctionParserRuleCall_2()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Atom__Alternatives"
+
+
+    // $ANTLR start "rule__Literal__Alternatives"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:822:1: rule__Literal__Alternatives : ( ( ruleNumberLiteral ) | ( ruleBooleanLiteral ) | ( ruleFormalParameter ) );
+    public final void rule__Literal__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:826:1: ( ( ruleNumberLiteral ) | ( ruleBooleanLiteral ) | ( ruleFormalParameter ) )
+            int alt5=3;
+            switch ( input.LA(1) ) {
+            case RULE_INT:
+            case 17:
+                {
+                alt5=1;
+                }
+                break;
+            case 11:
+            case 12:
+                {
+                alt5=2;
+                }
+                break;
+            case RULE_STRING:
+            case RULE_ID:
+                {
+                alt5=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 5, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt5) {
+                case 1 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:827:1: ( ruleNumberLiteral )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:827:1: ( ruleNumberLiteral )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:828:1: ruleNumberLiteral
+                    {
+                     before(grammarAccess.getLiteralAccess().getNumberLiteralParserRuleCall_0()); 
+                    pushFollow(FOLLOW_ruleNumberLiteral_in_rule__Literal__Alternatives1694);
+                    ruleNumberLiteral();
+
+                    state._fsp--;
+
+                     after(grammarAccess.getLiteralAccess().getNumberLiteralParserRuleCall_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:833:6: ( ruleBooleanLiteral )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:833:6: ( ruleBooleanLiteral )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:834:1: ruleBooleanLiteral
+                    {
+                     before(grammarAccess.getLiteralAccess().getBooleanLiteralParserRuleCall_1()); 
+                    pushFollow(FOLLOW_ruleBooleanLiteral_in_rule__Literal__Alternatives1711);
+                    ruleBooleanLiteral();
+
+                    state._fsp--;
+
+                     after(grammarAccess.getLiteralAccess().getBooleanLiteralParserRuleCall_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:839:6: ( ruleFormalParameter )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:839:6: ( ruleFormalParameter )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:840:1: ruleFormalParameter
+                    {
+                     before(grammarAccess.getLiteralAccess().getFormalParameterParserRuleCall_2()); 
+                    pushFollow(FOLLOW_ruleFormalParameter_in_rule__Literal__Alternatives1728);
+                    ruleFormalParameter();
+
+                    state._fsp--;
+
+                     after(grammarAccess.getLiteralAccess().getFormalParameterParserRuleCall_2()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Literal__Alternatives"
+
+
+    // $ANTLR start "rule__NumberLiteral__Alternatives"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:850:1: rule__NumberLiteral__Alternatives : ( ( ruleIntLiteral ) | ( ruleDoubleLiteral ) );
+    public final void rule__NumberLiteral__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:854:1: ( ( ruleIntLiteral ) | ( ruleDoubleLiteral ) )
+            int alt6=2;
+            int LA6_0 = input.LA(1);
+
+            if ( (LA6_0==17) ) {
+                int LA6_1 = input.LA(2);
+
+                if ( (LA6_1==RULE_INT) ) {
+                    int LA6_2 = input.LA(3);
+
+                    if ( (LA6_2==27) ) {
+                        alt6=2;
+                    }
+                    else if ( (LA6_2==EOF||(LA6_2>=13 && LA6_2<=26)||(LA6_2>=28 && LA6_2<=29)||LA6_2==31||(LA6_2>=33 && LA6_2<=34)) ) {
+                        alt6=1;
+                    }
+                    else {
+                        NoViableAltException nvae =
+                            new NoViableAltException("", 6, 2, input);
+
+                        throw nvae;
+                    }
+                }
+                else {
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 6, 1, input);
+
+                    throw nvae;
+                }
+            }
+            else if ( (LA6_0==RULE_INT) ) {
+                int LA6_2 = input.LA(2);
+
+                if ( (LA6_2==27) ) {
+                    alt6=2;
+                }
+                else if ( (LA6_2==EOF||(LA6_2>=13 && LA6_2<=26)||(LA6_2>=28 && LA6_2<=29)||LA6_2==31||(LA6_2>=33 && LA6_2<=34)) ) {
+                    alt6=1;
+                }
+                else {
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 6, 2, input);
+
+                    throw nvae;
+                }
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 6, 0, input);
+
+                throw nvae;
+            }
+            switch (alt6) {
+                case 1 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:855:1: ( ruleIntLiteral )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:855:1: ( ruleIntLiteral )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:856:1: ruleIntLiteral
+                    {
+                     before(grammarAccess.getNumberLiteralAccess().getIntLiteralParserRuleCall_0()); 
+                    pushFollow(FOLLOW_ruleIntLiteral_in_rule__NumberLiteral__Alternatives1760);
+                    ruleIntLiteral();
+
+                    state._fsp--;
+
+                     after(grammarAccess.getNumberLiteralAccess().getIntLiteralParserRuleCall_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:861:6: ( ruleDoubleLiteral )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:861:6: ( ruleDoubleLiteral )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:862:1: ruleDoubleLiteral
+                    {
+                     before(grammarAccess.getNumberLiteralAccess().getDoubleLiteralParserRuleCall_1()); 
+                    pushFollow(FOLLOW_ruleDoubleLiteral_in_rule__NumberLiteral__Alternatives1777);
+                    ruleDoubleLiteral();
+
+                    state._fsp--;
+
+                     after(grammarAccess.getNumberLiteralAccess().getDoubleLiteralParserRuleCall_1()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NumberLiteral__Alternatives"
+
+
+    // $ANTLR start "rule__ProductOperation__Alternatives"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:872:1: rule__ProductOperation__Alternatives : ( ( ( '*' ) ) | ( ( '/' ) ) | ( ( '%' ) ) );
+    public final void rule__ProductOperation__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:876:1: ( ( ( '*' ) ) | ( ( '/' ) ) | ( ( '%' ) ) )
+            int alt7=3;
+            switch ( input.LA(1) ) {
+            case 13:
+                {
+                alt7=1;
+                }
+                break;
+            case 14:
+                {
+                alt7=2;
+                }
+                break;
+            case 15:
+                {
+                alt7=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 7, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt7) {
+                case 1 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:877:1: ( ( '*' ) )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:877:1: ( ( '*' ) )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:878:1: ( '*' )
+                    {
+                     before(grammarAccess.getProductOperationAccess().getMULTEnumLiteralDeclaration_0()); 
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:879:1: ( '*' )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:879:3: '*'
+                    {
+                    match(input,13,FOLLOW_13_in_rule__ProductOperation__Alternatives1810); 
+
+                    }
+
+                     after(grammarAccess.getProductOperationAccess().getMULTEnumLiteralDeclaration_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:884:6: ( ( '/' ) )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:884:6: ( ( '/' ) )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:885:1: ( '/' )
+                    {
+                     before(grammarAccess.getProductOperationAccess().getDIVEnumLiteralDeclaration_1()); 
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:886:1: ( '/' )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:886:3: '/'
+                    {
+                    match(input,14,FOLLOW_14_in_rule__ProductOperation__Alternatives1831); 
+
+                    }
+
+                     after(grammarAccess.getProductOperationAccess().getDIVEnumLiteralDeclaration_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:891:6: ( ( '%' ) )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:891:6: ( ( '%' ) )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:892:1: ( '%' )
+                    {
+                     before(grammarAccess.getProductOperationAccess().getMODEnumLiteralDeclaration_2()); 
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:893:1: ( '%' )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:893:3: '%'
+                    {
+                    match(input,15,FOLLOW_15_in_rule__ProductOperation__Alternatives1852); 
+
+                    }
+
+                     after(grammarAccess.getProductOperationAccess().getMODEnumLiteralDeclaration_2()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ProductOperation__Alternatives"
+
+
+    // $ANTLR start "rule__TermOperation__Alternatives"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:903:1: rule__TermOperation__Alternatives : ( ( ( '+' ) ) | ( ( '-' ) ) );
+    public final void rule__TermOperation__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:907:1: ( ( ( '+' ) ) | ( ( '-' ) ) )
+            int alt8=2;
+            int LA8_0 = input.LA(1);
+
+            if ( (LA8_0==16) ) {
+                alt8=1;
+            }
+            else if ( (LA8_0==17) ) {
+                alt8=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 8, 0, input);
+
+                throw nvae;
+            }
+            switch (alt8) {
+                case 1 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:908:1: ( ( '+' ) )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:908:1: ( ( '+' ) )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:909:1: ( '+' )
+                    {
+                     before(grammarAccess.getTermOperationAccess().getADDEnumLiteralDeclaration_0()); 
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:910:1: ( '+' )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:910:3: '+'
+                    {
+                    match(input,16,FOLLOW_16_in_rule__TermOperation__Alternatives1888); 
+
+                    }
+
+                     after(grammarAccess.getTermOperationAccess().getADDEnumLiteralDeclaration_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:915:6: ( ( '-' ) )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:915:6: ( ( '-' ) )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:916:1: ( '-' )
+                    {
+                     before(grammarAccess.getTermOperationAccess().getSUBEnumLiteralDeclaration_1()); 
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:917:1: ( '-' )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:917:3: '-'
+                    {
+                    match(input,17,FOLLOW_17_in_rule__TermOperation__Alternatives1909); 
+
+                    }
+
+                     after(grammarAccess.getTermOperationAccess().getSUBEnumLiteralDeclaration_1()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__TermOperation__Alternatives"
+
+
+    // $ANTLR start "rule__CompareOperation__Alternatives"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:927:1: rule__CompareOperation__Alternatives : ( ( ( '>' ) ) | ( ( '<' ) ) | ( ( '=' ) ) | ( ( '!=' ) ) | ( ( '<=' ) ) | ( ( '>=' ) ) );
+    public final void rule__CompareOperation__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:931:1: ( ( ( '>' ) ) | ( ( '<' ) ) | ( ( '=' ) ) | ( ( '!=' ) ) | ( ( '<=' ) ) | ( ( '>=' ) ) )
+            int alt9=6;
+            switch ( input.LA(1) ) {
+            case 18:
+                {
+                alt9=1;
+                }
+                break;
+            case 19:
+                {
+                alt9=2;
+                }
+                break;
+            case 20:
+                {
+                alt9=3;
+                }
+                break;
+            case 21:
+                {
+                alt9=4;
+                }
+                break;
+            case 22:
+                {
+                alt9=5;
+                }
+                break;
+            case 23:
+                {
+                alt9=6;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 9, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt9) {
+                case 1 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:932:1: ( ( '>' ) )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:932:1: ( ( '>' ) )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:933:1: ( '>' )
+                    {
+                     before(grammarAccess.getCompareOperationAccess().getGREATEREnumLiteralDeclaration_0()); 
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:934:1: ( '>' )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:934:3: '>'
+                    {
+                    match(input,18,FOLLOW_18_in_rule__CompareOperation__Alternatives1945); 
+
+                    }
+
+                     after(grammarAccess.getCompareOperationAccess().getGREATEREnumLiteralDeclaration_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:939:6: ( ( '<' ) )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:939:6: ( ( '<' ) )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:940:1: ( '<' )
+                    {
+                     before(grammarAccess.getCompareOperationAccess().getLESSEnumLiteralDeclaration_1()); 
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:941:1: ( '<' )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:941:3: '<'
+                    {
+                    match(input,19,FOLLOW_19_in_rule__CompareOperation__Alternatives1966); 
+
+                    }
+
+                     after(grammarAccess.getCompareOperationAccess().getLESSEnumLiteralDeclaration_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:946:6: ( ( '=' ) )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:946:6: ( ( '=' ) )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:947:1: ( '=' )
+                    {
+                     before(grammarAccess.getCompareOperationAccess().getEQUALSEnumLiteralDeclaration_2()); 
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:948:1: ( '=' )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:948:3: '='
+                    {
+                    match(input,20,FOLLOW_20_in_rule__CompareOperation__Alternatives1987); 
+
+                    }
+
+                     after(grammarAccess.getCompareOperationAccess().getEQUALSEnumLiteralDeclaration_2()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:953:6: ( ( '!=' ) )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:953:6: ( ( '!=' ) )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:954:1: ( '!=' )
+                    {
+                     before(grammarAccess.getCompareOperationAccess().getNOTEQUALEnumLiteralDeclaration_3()); 
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:955:1: ( '!=' )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:955:3: '!='
+                    {
+                    match(input,21,FOLLOW_21_in_rule__CompareOperation__Alternatives2008); 
+
+                    }
+
+                     after(grammarAccess.getCompareOperationAccess().getNOTEQUALEnumLiteralDeclaration_3()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 5 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:960:6: ( ( '<=' ) )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:960:6: ( ( '<=' ) )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:961:1: ( '<=' )
+                    {
+                     before(grammarAccess.getCompareOperationAccess().getLESSEQUALEnumLiteralDeclaration_4()); 
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:962:1: ( '<=' )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:962:3: '<='
+                    {
+                    match(input,22,FOLLOW_22_in_rule__CompareOperation__Alternatives2029); 
+
+                    }
+
+                     after(grammarAccess.getCompareOperationAccess().getLESSEQUALEnumLiteralDeclaration_4()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 6 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:967:6: ( ( '>=' ) )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:967:6: ( ( '>=' ) )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:968:1: ( '>=' )
+                    {
+                     before(grammarAccess.getCompareOperationAccess().getGREATEREQUALEnumLiteralDeclaration_5()); 
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:969:1: ( '>=' )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:969:3: '>='
+                    {
+                    match(input,23,FOLLOW_23_in_rule__CompareOperation__Alternatives2050); 
+
+                    }
+
+                     after(grammarAccess.getCompareOperationAccess().getGREATEREQUALEnumLiteralDeclaration_5()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CompareOperation__Alternatives"
+
+
+    // $ANTLR start "rule__BooleanOperation__Alternatives"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:979:1: rule__BooleanOperation__Alternatives : ( ( ( 'AND' ) ) | ( ( 'OR' ) ) | ( ( 'XOR' ) ) );
+    public final void rule__BooleanOperation__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:983:1: ( ( ( 'AND' ) ) | ( ( 'OR' ) ) | ( ( 'XOR' ) ) )
+            int alt10=3;
+            switch ( input.LA(1) ) {
+            case 24:
+                {
+                alt10=1;
+                }
+                break;
+            case 25:
+                {
+                alt10=2;
+                }
+                break;
+            case 26:
+                {
+                alt10=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 10, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt10) {
+                case 1 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:984:1: ( ( 'AND' ) )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:984:1: ( ( 'AND' ) )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:985:1: ( 'AND' )
+                    {
+                     before(grammarAccess.getBooleanOperationAccess().getANDEnumLiteralDeclaration_0()); 
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:986:1: ( 'AND' )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:986:3: 'AND'
+                    {
+                    match(input,24,FOLLOW_24_in_rule__BooleanOperation__Alternatives2086); 
+
+                    }
+
+                     after(grammarAccess.getBooleanOperationAccess().getANDEnumLiteralDeclaration_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:991:6: ( ( 'OR' ) )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:991:6: ( ( 'OR' ) )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:992:1: ( 'OR' )
+                    {
+                     before(grammarAccess.getBooleanOperationAccess().getOREnumLiteralDeclaration_1()); 
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:993:1: ( 'OR' )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:993:3: 'OR'
+                    {
+                    match(input,25,FOLLOW_25_in_rule__BooleanOperation__Alternatives2107); 
+
+                    }
+
+                     after(grammarAccess.getBooleanOperationAccess().getOREnumLiteralDeclaration_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:998:6: ( ( 'XOR' ) )
+                    {
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:998:6: ( ( 'XOR' ) )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:999:1: ( 'XOR' )
+                    {
+                     before(grammarAccess.getBooleanOperationAccess().getXOREnumLiteralDeclaration_2()); 
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1000:1: ( 'XOR' )
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1000:3: 'XOR'
+                    {
+                    match(input,26,FOLLOW_26_in_rule__BooleanOperation__Alternatives2128); 
+
+                    }
+
+                     after(grammarAccess.getBooleanOperationAccess().getXOREnumLiteralDeclaration_2()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__BooleanOperation__Alternatives"
+
+
+    // $ANTLR start "rule__Double__Group__0"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1012:1: rule__Double__Group__0 : rule__Double__Group__0__Impl rule__Double__Group__1 ;
+    public final void rule__Double__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1016:1: ( rule__Double__Group__0__Impl rule__Double__Group__1 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1017:2: rule__Double__Group__0__Impl rule__Double__Group__1
+            {
+            pushFollow(FOLLOW_rule__Double__Group__0__Impl_in_rule__Double__Group__02161);
+            rule__Double__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Double__Group__1_in_rule__Double__Group__02164);
+            rule__Double__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Double__Group__0"
+
+
+    // $ANTLR start "rule__Double__Group__0__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1024:1: rule__Double__Group__0__Impl : ( ( '-' )? ) ;
+    public final void rule__Double__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1028:1: ( ( ( '-' )? ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1029:1: ( ( '-' )? )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1029:1: ( ( '-' )? )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1030:1: ( '-' )?
+            {
+             before(grammarAccess.getDoubleAccess().getHyphenMinusKeyword_0()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1031:1: ( '-' )?
+            int alt11=2;
+            int LA11_0 = input.LA(1);
+
+            if ( (LA11_0==17) ) {
+                alt11=1;
+            }
+            switch (alt11) {
+                case 1 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1032:2: '-'
+                    {
+                    match(input,17,FOLLOW_17_in_rule__Double__Group__0__Impl2193); 
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getDoubleAccess().getHyphenMinusKeyword_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Double__Group__0__Impl"
+
+
+    // $ANTLR start "rule__Double__Group__1"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1043:1: rule__Double__Group__1 : rule__Double__Group__1__Impl rule__Double__Group__2 ;
+    public final void rule__Double__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1047:1: ( rule__Double__Group__1__Impl rule__Double__Group__2 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1048:2: rule__Double__Group__1__Impl rule__Double__Group__2
+            {
+            pushFollow(FOLLOW_rule__Double__Group__1__Impl_in_rule__Double__Group__12226);
+            rule__Double__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Double__Group__2_in_rule__Double__Group__12229);
+            rule__Double__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Double__Group__1"
+
+
+    // $ANTLR start "rule__Double__Group__1__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1055:1: rule__Double__Group__1__Impl : ( RULE_INT ) ;
+    public final void rule__Double__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1059:1: ( ( RULE_INT ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1060:1: ( RULE_INT )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1060:1: ( RULE_INT )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1061:1: RULE_INT
+            {
+             before(grammarAccess.getDoubleAccess().getINTTerminalRuleCall_1()); 
+            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__Double__Group__1__Impl2256); 
+             after(grammarAccess.getDoubleAccess().getINTTerminalRuleCall_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Double__Group__1__Impl"
+
+
+    // $ANTLR start "rule__Double__Group__2"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1072:1: rule__Double__Group__2 : rule__Double__Group__2__Impl rule__Double__Group__3 ;
+    public final void rule__Double__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1076:1: ( rule__Double__Group__2__Impl rule__Double__Group__3 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1077:2: rule__Double__Group__2__Impl rule__Double__Group__3
+            {
+            pushFollow(FOLLOW_rule__Double__Group__2__Impl_in_rule__Double__Group__22285);
+            rule__Double__Group__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Double__Group__3_in_rule__Double__Group__22288);
+            rule__Double__Group__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Double__Group__2"
+
+
+    // $ANTLR start "rule__Double__Group__2__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1084:1: rule__Double__Group__2__Impl : ( '.' ) ;
+    public final void rule__Double__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1088:1: ( ( '.' ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1089:1: ( '.' )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1089:1: ( '.' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1090:1: '.'
+            {
+             before(grammarAccess.getDoubleAccess().getFullStopKeyword_2()); 
+            match(input,27,FOLLOW_27_in_rule__Double__Group__2__Impl2316); 
+             after(grammarAccess.getDoubleAccess().getFullStopKeyword_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Double__Group__2__Impl"
+
+
+    // $ANTLR start "rule__Double__Group__3"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1103:1: rule__Double__Group__3 : rule__Double__Group__3__Impl ;
+    public final void rule__Double__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1107:1: ( rule__Double__Group__3__Impl )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1108:2: rule__Double__Group__3__Impl
+            {
+            pushFollow(FOLLOW_rule__Double__Group__3__Impl_in_rule__Double__Group__32347);
+            rule__Double__Group__3__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Double__Group__3"
+
+
+    // $ANTLR start "rule__Double__Group__3__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1114:1: rule__Double__Group__3__Impl : ( RULE_INT ) ;
+    public final void rule__Double__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1118:1: ( ( RULE_INT ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1119:1: ( RULE_INT )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1119:1: ( RULE_INT )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1120:1: RULE_INT
+            {
+             before(grammarAccess.getDoubleAccess().getINTTerminalRuleCall_3()); 
+            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__Double__Group__3__Impl2374); 
+             after(grammarAccess.getDoubleAccess().getINTTerminalRuleCall_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Double__Group__3__Impl"
+
+
+    // $ANTLR start "rule__Integer__Group__0"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1139:1: rule__Integer__Group__0 : rule__Integer__Group__0__Impl rule__Integer__Group__1 ;
+    public final void rule__Integer__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1143:1: ( rule__Integer__Group__0__Impl rule__Integer__Group__1 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1144:2: rule__Integer__Group__0__Impl rule__Integer__Group__1
+            {
+            pushFollow(FOLLOW_rule__Integer__Group__0__Impl_in_rule__Integer__Group__02411);
+            rule__Integer__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Integer__Group__1_in_rule__Integer__Group__02414);
+            rule__Integer__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Integer__Group__0"
+
+
+    // $ANTLR start "rule__Integer__Group__0__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1151:1: rule__Integer__Group__0__Impl : ( ( '-' )? ) ;
+    public final void rule__Integer__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1155:1: ( ( ( '-' )? ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1156:1: ( ( '-' )? )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1156:1: ( ( '-' )? )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1157:1: ( '-' )?
+            {
+             before(grammarAccess.getIntegerAccess().getHyphenMinusKeyword_0()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1158:1: ( '-' )?
+            int alt12=2;
+            int LA12_0 = input.LA(1);
+
+            if ( (LA12_0==17) ) {
+                alt12=1;
+            }
+            switch (alt12) {
+                case 1 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1159:2: '-'
+                    {
+                    match(input,17,FOLLOW_17_in_rule__Integer__Group__0__Impl2443); 
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getIntegerAccess().getHyphenMinusKeyword_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Integer__Group__0__Impl"
+
+
+    // $ANTLR start "rule__Integer__Group__1"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1170:1: rule__Integer__Group__1 : rule__Integer__Group__1__Impl ;
+    public final void rule__Integer__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1174:1: ( rule__Integer__Group__1__Impl )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1175:2: rule__Integer__Group__1__Impl
+            {
+            pushFollow(FOLLOW_rule__Integer__Group__1__Impl_in_rule__Integer__Group__12476);
+            rule__Integer__Group__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Integer__Group__1"
+
+
+    // $ANTLR start "rule__Integer__Group__1__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1181:1: rule__Integer__Group__1__Impl : ( RULE_INT ) ;
+    public final void rule__Integer__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1185:1: ( ( RULE_INT ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1186:1: ( RULE_INT )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1186:1: ( RULE_INT )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1187:1: RULE_INT
+            {
+             before(grammarAccess.getIntegerAccess().getINTTerminalRuleCall_1()); 
+            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__Integer__Group__1__Impl2503); 
+             after(grammarAccess.getIntegerAccess().getINTTerminalRuleCall_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Integer__Group__1__Impl"
+
+
+    // $ANTLR start "rule__IfElseExpression__Group__0"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1202:1: rule__IfElseExpression__Group__0 : rule__IfElseExpression__Group__0__Impl rule__IfElseExpression__Group__1 ;
+    public final void rule__IfElseExpression__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1206:1: ( rule__IfElseExpression__Group__0__Impl rule__IfElseExpression__Group__1 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1207:2: rule__IfElseExpression__Group__0__Impl rule__IfElseExpression__Group__1
+            {
+            pushFollow(FOLLOW_rule__IfElseExpression__Group__0__Impl_in_rule__IfElseExpression__Group__02536);
+            rule__IfElseExpression__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__IfElseExpression__Group__1_in_rule__IfElseExpression__Group__02539);
+            rule__IfElseExpression__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IfElseExpression__Group__0"
+
+
+    // $ANTLR start "rule__IfElseExpression__Group__0__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1214:1: rule__IfElseExpression__Group__0__Impl : ( ruleBinaryBooleanExpression ) ;
+    public final void rule__IfElseExpression__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1218:1: ( ( ruleBinaryBooleanExpression ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1219:1: ( ruleBinaryBooleanExpression )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1219:1: ( ruleBinaryBooleanExpression )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1220:1: ruleBinaryBooleanExpression
+            {
+             before(grammarAccess.getIfElseExpressionAccess().getBinaryBooleanExpressionParserRuleCall_0()); 
+            pushFollow(FOLLOW_ruleBinaryBooleanExpression_in_rule__IfElseExpression__Group__0__Impl2566);
+            ruleBinaryBooleanExpression();
+
+            state._fsp--;
+
+             after(grammarAccess.getIfElseExpressionAccess().getBinaryBooleanExpressionParserRuleCall_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IfElseExpression__Group__0__Impl"
+
+
+    // $ANTLR start "rule__IfElseExpression__Group__1"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1231:1: rule__IfElseExpression__Group__1 : rule__IfElseExpression__Group__1__Impl ;
+    public final void rule__IfElseExpression__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1235:1: ( rule__IfElseExpression__Group__1__Impl )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1236:2: rule__IfElseExpression__Group__1__Impl
+            {
+            pushFollow(FOLLOW_rule__IfElseExpression__Group__1__Impl_in_rule__IfElseExpression__Group__12595);
+            rule__IfElseExpression__Group__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IfElseExpression__Group__1"
+
+
+    // $ANTLR start "rule__IfElseExpression__Group__1__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1242:1: rule__IfElseExpression__Group__1__Impl : ( ( rule__IfElseExpression__Group_1__0 )? ) ;
+    public final void rule__IfElseExpression__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1246:1: ( ( ( rule__IfElseExpression__Group_1__0 )? ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1247:1: ( ( rule__IfElseExpression__Group_1__0 )? )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1247:1: ( ( rule__IfElseExpression__Group_1__0 )? )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1248:1: ( rule__IfElseExpression__Group_1__0 )?
+            {
+             before(grammarAccess.getIfElseExpressionAccess().getGroup_1()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1249:1: ( rule__IfElseExpression__Group_1__0 )?
+            int alt13=2;
+            int LA13_0 = input.LA(1);
+
+            if ( (LA13_0==28) ) {
+                alt13=1;
+            }
+            switch (alt13) {
+                case 1 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1249:2: rule__IfElseExpression__Group_1__0
+                    {
+                    pushFollow(FOLLOW_rule__IfElseExpression__Group_1__0_in_rule__IfElseExpression__Group__1__Impl2622);
+                    rule__IfElseExpression__Group_1__0();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getIfElseExpressionAccess().getGroup_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IfElseExpression__Group__1__Impl"
+
+
+    // $ANTLR start "rule__IfElseExpression__Group_1__0"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1263:1: rule__IfElseExpression__Group_1__0 : rule__IfElseExpression__Group_1__0__Impl rule__IfElseExpression__Group_1__1 ;
+    public final void rule__IfElseExpression__Group_1__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1267:1: ( rule__IfElseExpression__Group_1__0__Impl rule__IfElseExpression__Group_1__1 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1268:2: rule__IfElseExpression__Group_1__0__Impl rule__IfElseExpression__Group_1__1
+            {
+            pushFollow(FOLLOW_rule__IfElseExpression__Group_1__0__Impl_in_rule__IfElseExpression__Group_1__02657);
+            rule__IfElseExpression__Group_1__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__IfElseExpression__Group_1__1_in_rule__IfElseExpression__Group_1__02660);
+            rule__IfElseExpression__Group_1__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IfElseExpression__Group_1__0"
+
+
+    // $ANTLR start "rule__IfElseExpression__Group_1__0__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1275:1: rule__IfElseExpression__Group_1__0__Impl : ( () ) ;
+    public final void rule__IfElseExpression__Group_1__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1279:1: ( ( () ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1280:1: ( () )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1280:1: ( () )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1281:1: ()
+            {
+             before(grammarAccess.getIfElseExpressionAccess().getIfElseExpressionConditionAction_1_0()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1282:1: ()
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1284:1: 
+            {
+            }
+
+             after(grammarAccess.getIfElseExpressionAccess().getIfElseExpressionConditionAction_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IfElseExpression__Group_1__0__Impl"
+
+
+    // $ANTLR start "rule__IfElseExpression__Group_1__1"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1294:1: rule__IfElseExpression__Group_1__1 : rule__IfElseExpression__Group_1__1__Impl rule__IfElseExpression__Group_1__2 ;
+    public final void rule__IfElseExpression__Group_1__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1298:1: ( rule__IfElseExpression__Group_1__1__Impl rule__IfElseExpression__Group_1__2 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1299:2: rule__IfElseExpression__Group_1__1__Impl rule__IfElseExpression__Group_1__2
+            {
+            pushFollow(FOLLOW_rule__IfElseExpression__Group_1__1__Impl_in_rule__IfElseExpression__Group_1__12718);
+            rule__IfElseExpression__Group_1__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__IfElseExpression__Group_1__2_in_rule__IfElseExpression__Group_1__12721);
+            rule__IfElseExpression__Group_1__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IfElseExpression__Group_1__1"
+
+
+    // $ANTLR start "rule__IfElseExpression__Group_1__1__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1306:1: rule__IfElseExpression__Group_1__1__Impl : ( '?' ) ;
+    public final void rule__IfElseExpression__Group_1__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1310:1: ( ( '?' ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1311:1: ( '?' )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1311:1: ( '?' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1312:1: '?'
+            {
+             before(grammarAccess.getIfElseExpressionAccess().getQuestionMarkKeyword_1_1()); 
+            match(input,28,FOLLOW_28_in_rule__IfElseExpression__Group_1__1__Impl2749); 
+             after(grammarAccess.getIfElseExpressionAccess().getQuestionMarkKeyword_1_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IfElseExpression__Group_1__1__Impl"
+
+
+    // $ANTLR start "rule__IfElseExpression__Group_1__2"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1325:1: rule__IfElseExpression__Group_1__2 : rule__IfElseExpression__Group_1__2__Impl rule__IfElseExpression__Group_1__3 ;
+    public final void rule__IfElseExpression__Group_1__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1329:1: ( rule__IfElseExpression__Group_1__2__Impl rule__IfElseExpression__Group_1__3 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1330:2: rule__IfElseExpression__Group_1__2__Impl rule__IfElseExpression__Group_1__3
+            {
+            pushFollow(FOLLOW_rule__IfElseExpression__Group_1__2__Impl_in_rule__IfElseExpression__Group_1__22780);
+            rule__IfElseExpression__Group_1__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__IfElseExpression__Group_1__3_in_rule__IfElseExpression__Group_1__22783);
+            rule__IfElseExpression__Group_1__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IfElseExpression__Group_1__2"
+
+
+    // $ANTLR start "rule__IfElseExpression__Group_1__2__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1337:1: rule__IfElseExpression__Group_1__2__Impl : ( ( rule__IfElseExpression__TrueExpAssignment_1_2 ) ) ;
+    public final void rule__IfElseExpression__Group_1__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1341:1: ( ( ( rule__IfElseExpression__TrueExpAssignment_1_2 ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1342:1: ( ( rule__IfElseExpression__TrueExpAssignment_1_2 ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1342:1: ( ( rule__IfElseExpression__TrueExpAssignment_1_2 ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1343:1: ( rule__IfElseExpression__TrueExpAssignment_1_2 )
+            {
+             before(grammarAccess.getIfElseExpressionAccess().getTrueExpAssignment_1_2()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1344:1: ( rule__IfElseExpression__TrueExpAssignment_1_2 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1344:2: rule__IfElseExpression__TrueExpAssignment_1_2
+            {
+            pushFollow(FOLLOW_rule__IfElseExpression__TrueExpAssignment_1_2_in_rule__IfElseExpression__Group_1__2__Impl2810);
+            rule__IfElseExpression__TrueExpAssignment_1_2();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getIfElseExpressionAccess().getTrueExpAssignment_1_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IfElseExpression__Group_1__2__Impl"
+
+
+    // $ANTLR start "rule__IfElseExpression__Group_1__3"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1354:1: rule__IfElseExpression__Group_1__3 : rule__IfElseExpression__Group_1__3__Impl rule__IfElseExpression__Group_1__4 ;
+    public final void rule__IfElseExpression__Group_1__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1358:1: ( rule__IfElseExpression__Group_1__3__Impl rule__IfElseExpression__Group_1__4 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1359:2: rule__IfElseExpression__Group_1__3__Impl rule__IfElseExpression__Group_1__4
+            {
+            pushFollow(FOLLOW_rule__IfElseExpression__Group_1__3__Impl_in_rule__IfElseExpression__Group_1__32840);
+            rule__IfElseExpression__Group_1__3__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__IfElseExpression__Group_1__4_in_rule__IfElseExpression__Group_1__32843);
+            rule__IfElseExpression__Group_1__4();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IfElseExpression__Group_1__3"
+
+
+    // $ANTLR start "rule__IfElseExpression__Group_1__3__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1366:1: rule__IfElseExpression__Group_1__3__Impl : ( ':' ) ;
+    public final void rule__IfElseExpression__Group_1__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1370:1: ( ( ':' ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1371:1: ( ':' )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1371:1: ( ':' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1372:1: ':'
+            {
+             before(grammarAccess.getIfElseExpressionAccess().getColonKeyword_1_3()); 
+            match(input,29,FOLLOW_29_in_rule__IfElseExpression__Group_1__3__Impl2871); 
+             after(grammarAccess.getIfElseExpressionAccess().getColonKeyword_1_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IfElseExpression__Group_1__3__Impl"
+
+
+    // $ANTLR start "rule__IfElseExpression__Group_1__4"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1385:1: rule__IfElseExpression__Group_1__4 : rule__IfElseExpression__Group_1__4__Impl ;
+    public final void rule__IfElseExpression__Group_1__4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1389:1: ( rule__IfElseExpression__Group_1__4__Impl )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1390:2: rule__IfElseExpression__Group_1__4__Impl
+            {
+            pushFollow(FOLLOW_rule__IfElseExpression__Group_1__4__Impl_in_rule__IfElseExpression__Group_1__42902);
+            rule__IfElseExpression__Group_1__4__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IfElseExpression__Group_1__4"
+
+
+    // $ANTLR start "rule__IfElseExpression__Group_1__4__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1396:1: rule__IfElseExpression__Group_1__4__Impl : ( ( rule__IfElseExpression__FalseExpAssignment_1_4 ) ) ;
+    public final void rule__IfElseExpression__Group_1__4__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1400:1: ( ( ( rule__IfElseExpression__FalseExpAssignment_1_4 ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1401:1: ( ( rule__IfElseExpression__FalseExpAssignment_1_4 ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1401:1: ( ( rule__IfElseExpression__FalseExpAssignment_1_4 ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1402:1: ( rule__IfElseExpression__FalseExpAssignment_1_4 )
+            {
+             before(grammarAccess.getIfElseExpressionAccess().getFalseExpAssignment_1_4()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1403:1: ( rule__IfElseExpression__FalseExpAssignment_1_4 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1403:2: rule__IfElseExpression__FalseExpAssignment_1_4
+            {
+            pushFollow(FOLLOW_rule__IfElseExpression__FalseExpAssignment_1_4_in_rule__IfElseExpression__Group_1__4__Impl2929);
+            rule__IfElseExpression__FalseExpAssignment_1_4();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getIfElseExpressionAccess().getFalseExpAssignment_1_4()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IfElseExpression__Group_1__4__Impl"
+
+
+    // $ANTLR start "rule__BinaryBooleanExpression__Group__0"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1423:1: rule__BinaryBooleanExpression__Group__0 : rule__BinaryBooleanExpression__Group__0__Impl rule__BinaryBooleanExpression__Group__1 ;
+    public final void rule__BinaryBooleanExpression__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1427:1: ( rule__BinaryBooleanExpression__Group__0__Impl rule__BinaryBooleanExpression__Group__1 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1428:2: rule__BinaryBooleanExpression__Group__0__Impl rule__BinaryBooleanExpression__Group__1
+            {
+            pushFollow(FOLLOW_rule__BinaryBooleanExpression__Group__0__Impl_in_rule__BinaryBooleanExpression__Group__02969);
+            rule__BinaryBooleanExpression__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__BinaryBooleanExpression__Group__1_in_rule__BinaryBooleanExpression__Group__02972);
+            rule__BinaryBooleanExpression__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__BinaryBooleanExpression__Group__0"
+
+
+    // $ANTLR start "rule__BinaryBooleanExpression__Group__0__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1435:1: rule__BinaryBooleanExpression__Group__0__Impl : ( ruleUnaryBooleanExpression ) ;
+    public final void rule__BinaryBooleanExpression__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1439:1: ( ( ruleUnaryBooleanExpression ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1440:1: ( ruleUnaryBooleanExpression )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1440:1: ( ruleUnaryBooleanExpression )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1441:1: ruleUnaryBooleanExpression
+            {
+             before(grammarAccess.getBinaryBooleanExpressionAccess().getUnaryBooleanExpressionParserRuleCall_0()); 
+            pushFollow(FOLLOW_ruleUnaryBooleanExpression_in_rule__BinaryBooleanExpression__Group__0__Impl2999);
+            ruleUnaryBooleanExpression();
+
+            state._fsp--;
+
+             after(grammarAccess.getBinaryBooleanExpressionAccess().getUnaryBooleanExpressionParserRuleCall_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__BinaryBooleanExpression__Group__0__Impl"
+
+
+    // $ANTLR start "rule__BinaryBooleanExpression__Group__1"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1452:1: rule__BinaryBooleanExpression__Group__1 : rule__BinaryBooleanExpression__Group__1__Impl ;
+    public final void rule__BinaryBooleanExpression__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1456:1: ( rule__BinaryBooleanExpression__Group__1__Impl )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1457:2: rule__BinaryBooleanExpression__Group__1__Impl
+            {
+            pushFollow(FOLLOW_rule__BinaryBooleanExpression__Group__1__Impl_in_rule__BinaryBooleanExpression__Group__13028);
+            rule__BinaryBooleanExpression__Group__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__BinaryBooleanExpression__Group__1"
+
+
+    // $ANTLR start "rule__BinaryBooleanExpression__Group__1__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1463:1: rule__BinaryBooleanExpression__Group__1__Impl : ( ( rule__BinaryBooleanExpression__Group_1__0 )* ) ;
+    public final void rule__BinaryBooleanExpression__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1467:1: ( ( ( rule__BinaryBooleanExpression__Group_1__0 )* ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1468:1: ( ( rule__BinaryBooleanExpression__Group_1__0 )* )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1468:1: ( ( rule__BinaryBooleanExpression__Group_1__0 )* )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1469:1: ( rule__BinaryBooleanExpression__Group_1__0 )*
+            {
+             before(grammarAccess.getBinaryBooleanExpressionAccess().getGroup_1()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1470:1: ( rule__BinaryBooleanExpression__Group_1__0 )*
+            loop14:
+            do {
+                int alt14=2;
+                int LA14_0 = input.LA(1);
+
+                if ( ((LA14_0>=24 && LA14_0<=26)) ) {
+                    alt14=1;
+                }
+
+
+                switch (alt14) {
+            	case 1 :
+            	    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1470:2: rule__BinaryBooleanExpression__Group_1__0
+            	    {
+            	    pushFollow(FOLLOW_rule__BinaryBooleanExpression__Group_1__0_in_rule__BinaryBooleanExpression__Group__1__Impl3055);
+            	    rule__BinaryBooleanExpression__Group_1__0();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop14;
+                }
+            } while (true);
+
+             after(grammarAccess.getBinaryBooleanExpressionAccess().getGroup_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__BinaryBooleanExpression__Group__1__Impl"
+
+
+    // $ANTLR start "rule__BinaryBooleanExpression__Group_1__0"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1484:1: rule__BinaryBooleanExpression__Group_1__0 : rule__BinaryBooleanExpression__Group_1__0__Impl rule__BinaryBooleanExpression__Group_1__1 ;
+    public final void rule__BinaryBooleanExpression__Group_1__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1488:1: ( rule__BinaryBooleanExpression__Group_1__0__Impl rule__BinaryBooleanExpression__Group_1__1 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1489:2: rule__BinaryBooleanExpression__Group_1__0__Impl rule__BinaryBooleanExpression__Group_1__1
+            {
+            pushFollow(FOLLOW_rule__BinaryBooleanExpression__Group_1__0__Impl_in_rule__BinaryBooleanExpression__Group_1__03090);
+            rule__BinaryBooleanExpression__Group_1__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__BinaryBooleanExpression__Group_1__1_in_rule__BinaryBooleanExpression__Group_1__03093);
+            rule__BinaryBooleanExpression__Group_1__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__BinaryBooleanExpression__Group_1__0"
+
+
+    // $ANTLR start "rule__BinaryBooleanExpression__Group_1__0__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1496:1: rule__BinaryBooleanExpression__Group_1__0__Impl : ( () ) ;
+    public final void rule__BinaryBooleanExpression__Group_1__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1500:1: ( ( () ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1501:1: ( () )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1501:1: ( () )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1502:1: ()
+            {
+             before(grammarAccess.getBinaryBooleanExpressionAccess().getBinaryBooleanExpressionLeftAction_1_0()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1503:1: ()
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1505:1: 
+            {
+            }
+
+             after(grammarAccess.getBinaryBooleanExpressionAccess().getBinaryBooleanExpressionLeftAction_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__BinaryBooleanExpression__Group_1__0__Impl"
+
+
+    // $ANTLR start "rule__BinaryBooleanExpression__Group_1__1"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1515:1: rule__BinaryBooleanExpression__Group_1__1 : rule__BinaryBooleanExpression__Group_1__1__Impl rule__BinaryBooleanExpression__Group_1__2 ;
+    public final void rule__BinaryBooleanExpression__Group_1__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1519:1: ( rule__BinaryBooleanExpression__Group_1__1__Impl rule__BinaryBooleanExpression__Group_1__2 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1520:2: rule__BinaryBooleanExpression__Group_1__1__Impl rule__BinaryBooleanExpression__Group_1__2
+            {
+            pushFollow(FOLLOW_rule__BinaryBooleanExpression__Group_1__1__Impl_in_rule__BinaryBooleanExpression__Group_1__13151);
+            rule__BinaryBooleanExpression__Group_1__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__BinaryBooleanExpression__Group_1__2_in_rule__BinaryBooleanExpression__Group_1__13154);
+            rule__BinaryBooleanExpression__Group_1__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__BinaryBooleanExpression__Group_1__1"
+
+
+    // $ANTLR start "rule__BinaryBooleanExpression__Group_1__1__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1527:1: rule__BinaryBooleanExpression__Group_1__1__Impl : ( ( rule__BinaryBooleanExpression__OperationAssignment_1_1 ) ) ;
+    public final void rule__BinaryBooleanExpression__Group_1__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1531:1: ( ( ( rule__BinaryBooleanExpression__OperationAssignment_1_1 ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1532:1: ( ( rule__BinaryBooleanExpression__OperationAssignment_1_1 ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1532:1: ( ( rule__BinaryBooleanExpression__OperationAssignment_1_1 ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1533:1: ( rule__BinaryBooleanExpression__OperationAssignment_1_1 )
+            {
+             before(grammarAccess.getBinaryBooleanExpressionAccess().getOperationAssignment_1_1()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1534:1: ( rule__BinaryBooleanExpression__OperationAssignment_1_1 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1534:2: rule__BinaryBooleanExpression__OperationAssignment_1_1
+            {
+            pushFollow(FOLLOW_rule__BinaryBooleanExpression__OperationAssignment_1_1_in_rule__BinaryBooleanExpression__Group_1__1__Impl3181);
+            rule__BinaryBooleanExpression__OperationAssignment_1_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getBinaryBooleanExpressionAccess().getOperationAssignment_1_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__BinaryBooleanExpression__Group_1__1__Impl"
+
+
+    // $ANTLR start "rule__BinaryBooleanExpression__Group_1__2"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1544:1: rule__BinaryBooleanExpression__Group_1__2 : rule__BinaryBooleanExpression__Group_1__2__Impl ;
+    public final void rule__BinaryBooleanExpression__Group_1__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1548:1: ( rule__BinaryBooleanExpression__Group_1__2__Impl )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1549:2: rule__BinaryBooleanExpression__Group_1__2__Impl
+            {
+            pushFollow(FOLLOW_rule__BinaryBooleanExpression__Group_1__2__Impl_in_rule__BinaryBooleanExpression__Group_1__23211);
+            rule__BinaryBooleanExpression__Group_1__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__BinaryBooleanExpression__Group_1__2"
+
+
+    // $ANTLR start "rule__BinaryBooleanExpression__Group_1__2__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1555:1: rule__BinaryBooleanExpression__Group_1__2__Impl : ( ( rule__BinaryBooleanExpression__RightAssignment_1_2 ) ) ;
+    public final void rule__BinaryBooleanExpression__Group_1__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1559:1: ( ( ( rule__BinaryBooleanExpression__RightAssignment_1_2 ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1560:1: ( ( rule__BinaryBooleanExpression__RightAssignment_1_2 ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1560:1: ( ( rule__BinaryBooleanExpression__RightAssignment_1_2 ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1561:1: ( rule__BinaryBooleanExpression__RightAssignment_1_2 )
+            {
+             before(grammarAccess.getBinaryBooleanExpressionAccess().getRightAssignment_1_2()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1562:1: ( rule__BinaryBooleanExpression__RightAssignment_1_2 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1562:2: rule__BinaryBooleanExpression__RightAssignment_1_2
+            {
+            pushFollow(FOLLOW_rule__BinaryBooleanExpression__RightAssignment_1_2_in_rule__BinaryBooleanExpression__Group_1__2__Impl3238);
+            rule__BinaryBooleanExpression__RightAssignment_1_2();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getBinaryBooleanExpressionAccess().getRightAssignment_1_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__BinaryBooleanExpression__Group_1__2__Impl"
+
+
+    // $ANTLR start "rule__UnaryBooleanExpression__Group_0__0"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1578:1: rule__UnaryBooleanExpression__Group_0__0 : rule__UnaryBooleanExpression__Group_0__0__Impl rule__UnaryBooleanExpression__Group_0__1 ;
+    public final void rule__UnaryBooleanExpression__Group_0__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1582:1: ( rule__UnaryBooleanExpression__Group_0__0__Impl rule__UnaryBooleanExpression__Group_0__1 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1583:2: rule__UnaryBooleanExpression__Group_0__0__Impl rule__UnaryBooleanExpression__Group_0__1
+            {
+            pushFollow(FOLLOW_rule__UnaryBooleanExpression__Group_0__0__Impl_in_rule__UnaryBooleanExpression__Group_0__03274);
+            rule__UnaryBooleanExpression__Group_0__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__UnaryBooleanExpression__Group_0__1_in_rule__UnaryBooleanExpression__Group_0__03277);
+            rule__UnaryBooleanExpression__Group_0__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__UnaryBooleanExpression__Group_0__0"
+
+
+    // $ANTLR start "rule__UnaryBooleanExpression__Group_0__0__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1590:1: rule__UnaryBooleanExpression__Group_0__0__Impl : ( 'NOT' ) ;
+    public final void rule__UnaryBooleanExpression__Group_0__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1594:1: ( ( 'NOT' ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1595:1: ( 'NOT' )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1595:1: ( 'NOT' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1596:1: 'NOT'
+            {
+             before(grammarAccess.getUnaryBooleanExpressionAccess().getNOTKeyword_0_0()); 
+            match(input,30,FOLLOW_30_in_rule__UnaryBooleanExpression__Group_0__0__Impl3305); 
+             after(grammarAccess.getUnaryBooleanExpressionAccess().getNOTKeyword_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__UnaryBooleanExpression__Group_0__0__Impl"
+
+
+    // $ANTLR start "rule__UnaryBooleanExpression__Group_0__1"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1609:1: rule__UnaryBooleanExpression__Group_0__1 : rule__UnaryBooleanExpression__Group_0__1__Impl rule__UnaryBooleanExpression__Group_0__2 ;
+    public final void rule__UnaryBooleanExpression__Group_0__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1613:1: ( rule__UnaryBooleanExpression__Group_0__1__Impl rule__UnaryBooleanExpression__Group_0__2 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1614:2: rule__UnaryBooleanExpression__Group_0__1__Impl rule__UnaryBooleanExpression__Group_0__2
+            {
+            pushFollow(FOLLOW_rule__UnaryBooleanExpression__Group_0__1__Impl_in_rule__UnaryBooleanExpression__Group_0__13336);
+            rule__UnaryBooleanExpression__Group_0__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__UnaryBooleanExpression__Group_0__2_in_rule__UnaryBooleanExpression__Group_0__13339);
+            rule__UnaryBooleanExpression__Group_0__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__UnaryBooleanExpression__Group_0__1"
+
+
+    // $ANTLR start "rule__UnaryBooleanExpression__Group_0__1__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1621:1: rule__UnaryBooleanExpression__Group_0__1__Impl : ( ruleComparison ) ;
+    public final void rule__UnaryBooleanExpression__Group_0__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1625:1: ( ( ruleComparison ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1626:1: ( ruleComparison )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1626:1: ( ruleComparison )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1627:1: ruleComparison
+            {
+             before(grammarAccess.getUnaryBooleanExpressionAccess().getComparisonParserRuleCall_0_1()); 
+            pushFollow(FOLLOW_ruleComparison_in_rule__UnaryBooleanExpression__Group_0__1__Impl3366);
+            ruleComparison();
+
+            state._fsp--;
+
+             after(grammarAccess.getUnaryBooleanExpressionAccess().getComparisonParserRuleCall_0_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__UnaryBooleanExpression__Group_0__1__Impl"
+
+
+    // $ANTLR start "rule__UnaryBooleanExpression__Group_0__2"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1638:1: rule__UnaryBooleanExpression__Group_0__2 : rule__UnaryBooleanExpression__Group_0__2__Impl ;
+    public final void rule__UnaryBooleanExpression__Group_0__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1642:1: ( rule__UnaryBooleanExpression__Group_0__2__Impl )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1643:2: rule__UnaryBooleanExpression__Group_0__2__Impl
+            {
+            pushFollow(FOLLOW_rule__UnaryBooleanExpression__Group_0__2__Impl_in_rule__UnaryBooleanExpression__Group_0__23395);
+            rule__UnaryBooleanExpression__Group_0__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__UnaryBooleanExpression__Group_0__2"
+
+
+    // $ANTLR start "rule__UnaryBooleanExpression__Group_0__2__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1649:1: rule__UnaryBooleanExpression__Group_0__2__Impl : ( () ) ;
+    public final void rule__UnaryBooleanExpression__Group_0__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1653:1: ( ( () ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1654:1: ( () )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1654:1: ( () )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1655:1: ()
+            {
+             before(grammarAccess.getUnaryBooleanExpressionAccess().getUnaryBooleanExpressionInnerAction_0_2()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1656:1: ()
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1658:1: 
+            {
+            }
+
+             after(grammarAccess.getUnaryBooleanExpressionAccess().getUnaryBooleanExpressionInnerAction_0_2()); 
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__UnaryBooleanExpression__Group_0__2__Impl"
+
+
+    // $ANTLR start "rule__Comparison__Group__0"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1674:1: rule__Comparison__Group__0 : rule__Comparison__Group__0__Impl rule__Comparison__Group__1 ;
+    public final void rule__Comparison__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1678:1: ( rule__Comparison__Group__0__Impl rule__Comparison__Group__1 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1679:2: rule__Comparison__Group__0__Impl rule__Comparison__Group__1
+            {
+            pushFollow(FOLLOW_rule__Comparison__Group__0__Impl_in_rule__Comparison__Group__03459);
+            rule__Comparison__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Comparison__Group__1_in_rule__Comparison__Group__03462);
+            rule__Comparison__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Comparison__Group__0"
+
+
+    // $ANTLR start "rule__Comparison__Group__0__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1686:1: rule__Comparison__Group__0__Impl : ( ruleTerm ) ;
+    public final void rule__Comparison__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1690:1: ( ( ruleTerm ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1691:1: ( ruleTerm )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1691:1: ( ruleTerm )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1692:1: ruleTerm
+            {
+             before(grammarAccess.getComparisonAccess().getTermParserRuleCall_0()); 
+            pushFollow(FOLLOW_ruleTerm_in_rule__Comparison__Group__0__Impl3489);
+            ruleTerm();
+
+            state._fsp--;
+
+             after(grammarAccess.getComparisonAccess().getTermParserRuleCall_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Comparison__Group__0__Impl"
+
+
+    // $ANTLR start "rule__Comparison__Group__1"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1703:1: rule__Comparison__Group__1 : rule__Comparison__Group__1__Impl ;
+    public final void rule__Comparison__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1707:1: ( rule__Comparison__Group__1__Impl )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1708:2: rule__Comparison__Group__1__Impl
+            {
+            pushFollow(FOLLOW_rule__Comparison__Group__1__Impl_in_rule__Comparison__Group__13518);
+            rule__Comparison__Group__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Comparison__Group__1"
+
+
+    // $ANTLR start "rule__Comparison__Group__1__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1714:1: rule__Comparison__Group__1__Impl : ( ( rule__Comparison__Group_1__0 )* ) ;
+    public final void rule__Comparison__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1718:1: ( ( ( rule__Comparison__Group_1__0 )* ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1719:1: ( ( rule__Comparison__Group_1__0 )* )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1719:1: ( ( rule__Comparison__Group_1__0 )* )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1720:1: ( rule__Comparison__Group_1__0 )*
+            {
+             before(grammarAccess.getComparisonAccess().getGroup_1()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1721:1: ( rule__Comparison__Group_1__0 )*
+            loop15:
+            do {
+                int alt15=2;
+                int LA15_0 = input.LA(1);
+
+                if ( ((LA15_0>=18 && LA15_0<=23)) ) {
+                    alt15=1;
+                }
+
+
+                switch (alt15) {
+            	case 1 :
+            	    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1721:2: rule__Comparison__Group_1__0
+            	    {
+            	    pushFollow(FOLLOW_rule__Comparison__Group_1__0_in_rule__Comparison__Group__1__Impl3545);
+            	    rule__Comparison__Group_1__0();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop15;
+                }
+            } while (true);
+
+             after(grammarAccess.getComparisonAccess().getGroup_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Comparison__Group__1__Impl"
+
+
+    // $ANTLR start "rule__Comparison__Group_1__0"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1735:1: rule__Comparison__Group_1__0 : rule__Comparison__Group_1__0__Impl rule__Comparison__Group_1__1 ;
+    public final void rule__Comparison__Group_1__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1739:1: ( rule__Comparison__Group_1__0__Impl rule__Comparison__Group_1__1 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1740:2: rule__Comparison__Group_1__0__Impl rule__Comparison__Group_1__1
+            {
+            pushFollow(FOLLOW_rule__Comparison__Group_1__0__Impl_in_rule__Comparison__Group_1__03580);
+            rule__Comparison__Group_1__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Comparison__Group_1__1_in_rule__Comparison__Group_1__03583);
+            rule__Comparison__Group_1__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Comparison__Group_1__0"
+
+
+    // $ANTLR start "rule__Comparison__Group_1__0__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1747:1: rule__Comparison__Group_1__0__Impl : ( () ) ;
+    public final void rule__Comparison__Group_1__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1751:1: ( ( () ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1752:1: ( () )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1752:1: ( () )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1753:1: ()
+            {
+             before(grammarAccess.getComparisonAccess().getComparisonLeftAction_1_0()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1754:1: ()
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1756:1: 
+            {
+            }
+
+             after(grammarAccess.getComparisonAccess().getComparisonLeftAction_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Comparison__Group_1__0__Impl"
+
+
+    // $ANTLR start "rule__Comparison__Group_1__1"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1766:1: rule__Comparison__Group_1__1 : rule__Comparison__Group_1__1__Impl rule__Comparison__Group_1__2 ;
+    public final void rule__Comparison__Group_1__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1770:1: ( rule__Comparison__Group_1__1__Impl rule__Comparison__Group_1__2 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1771:2: rule__Comparison__Group_1__1__Impl rule__Comparison__Group_1__2
+            {
+            pushFollow(FOLLOW_rule__Comparison__Group_1__1__Impl_in_rule__Comparison__Group_1__13641);
+            rule__Comparison__Group_1__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Comparison__Group_1__2_in_rule__Comparison__Group_1__13644);
+            rule__Comparison__Group_1__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Comparison__Group_1__1"
+
+
+    // $ANTLR start "rule__Comparison__Group_1__1__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1778:1: rule__Comparison__Group_1__1__Impl : ( ( rule__Comparison__OperationAssignment_1_1 ) ) ;
+    public final void rule__Comparison__Group_1__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1782:1: ( ( ( rule__Comparison__OperationAssignment_1_1 ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1783:1: ( ( rule__Comparison__OperationAssignment_1_1 ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1783:1: ( ( rule__Comparison__OperationAssignment_1_1 ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1784:1: ( rule__Comparison__OperationAssignment_1_1 )
+            {
+             before(grammarAccess.getComparisonAccess().getOperationAssignment_1_1()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1785:1: ( rule__Comparison__OperationAssignment_1_1 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1785:2: rule__Comparison__OperationAssignment_1_1
+            {
+            pushFollow(FOLLOW_rule__Comparison__OperationAssignment_1_1_in_rule__Comparison__Group_1__1__Impl3671);
+            rule__Comparison__OperationAssignment_1_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getComparisonAccess().getOperationAssignment_1_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Comparison__Group_1__1__Impl"
+
+
+    // $ANTLR start "rule__Comparison__Group_1__2"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1795:1: rule__Comparison__Group_1__2 : rule__Comparison__Group_1__2__Impl ;
+    public final void rule__Comparison__Group_1__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1799:1: ( rule__Comparison__Group_1__2__Impl )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1800:2: rule__Comparison__Group_1__2__Impl
+            {
+            pushFollow(FOLLOW_rule__Comparison__Group_1__2__Impl_in_rule__Comparison__Group_1__23701);
+            rule__Comparison__Group_1__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Comparison__Group_1__2"
+
+
+    // $ANTLR start "rule__Comparison__Group_1__2__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1806:1: rule__Comparison__Group_1__2__Impl : ( ( rule__Comparison__RightAssignment_1_2 ) ) ;
+    public final void rule__Comparison__Group_1__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1810:1: ( ( ( rule__Comparison__RightAssignment_1_2 ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1811:1: ( ( rule__Comparison__RightAssignment_1_2 ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1811:1: ( ( rule__Comparison__RightAssignment_1_2 ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1812:1: ( rule__Comparison__RightAssignment_1_2 )
+            {
+             before(grammarAccess.getComparisonAccess().getRightAssignment_1_2()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1813:1: ( rule__Comparison__RightAssignment_1_2 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1813:2: rule__Comparison__RightAssignment_1_2
+            {
+            pushFollow(FOLLOW_rule__Comparison__RightAssignment_1_2_in_rule__Comparison__Group_1__2__Impl3728);
+            rule__Comparison__RightAssignment_1_2();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getComparisonAccess().getRightAssignment_1_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Comparison__Group_1__2__Impl"
+
+
+    // $ANTLR start "rule__Term__Group__0"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1829:1: rule__Term__Group__0 : rule__Term__Group__0__Impl rule__Term__Group__1 ;
+    public final void rule__Term__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1833:1: ( rule__Term__Group__0__Impl rule__Term__Group__1 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1834:2: rule__Term__Group__0__Impl rule__Term__Group__1
+            {
+            pushFollow(FOLLOW_rule__Term__Group__0__Impl_in_rule__Term__Group__03764);
+            rule__Term__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Term__Group__1_in_rule__Term__Group__03767);
+            rule__Term__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Term__Group__0"
+
+
+    // $ANTLR start "rule__Term__Group__0__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1841:1: rule__Term__Group__0__Impl : ( ruleProduct ) ;
+    public final void rule__Term__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1845:1: ( ( ruleProduct ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1846:1: ( ruleProduct )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1846:1: ( ruleProduct )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1847:1: ruleProduct
+            {
+             before(grammarAccess.getTermAccess().getProductParserRuleCall_0()); 
+            pushFollow(FOLLOW_ruleProduct_in_rule__Term__Group__0__Impl3794);
+            ruleProduct();
+
+            state._fsp--;
+
+             after(grammarAccess.getTermAccess().getProductParserRuleCall_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Term__Group__0__Impl"
+
+
+    // $ANTLR start "rule__Term__Group__1"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1858:1: rule__Term__Group__1 : rule__Term__Group__1__Impl ;
+    public final void rule__Term__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1862:1: ( rule__Term__Group__1__Impl )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1863:2: rule__Term__Group__1__Impl
+            {
+            pushFollow(FOLLOW_rule__Term__Group__1__Impl_in_rule__Term__Group__13823);
+            rule__Term__Group__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Term__Group__1"
+
+
+    // $ANTLR start "rule__Term__Group__1__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1869:1: rule__Term__Group__1__Impl : ( ( rule__Term__Group_1__0 )* ) ;
+    public final void rule__Term__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1873:1: ( ( ( rule__Term__Group_1__0 )* ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1874:1: ( ( rule__Term__Group_1__0 )* )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1874:1: ( ( rule__Term__Group_1__0 )* )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1875:1: ( rule__Term__Group_1__0 )*
+            {
+             before(grammarAccess.getTermAccess().getGroup_1()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1876:1: ( rule__Term__Group_1__0 )*
+            loop16:
+            do {
+                int alt16=2;
+                int LA16_0 = input.LA(1);
+
+                if ( ((LA16_0>=16 && LA16_0<=17)) ) {
+                    alt16=1;
+                }
+
+
+                switch (alt16) {
+            	case 1 :
+            	    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1876:2: rule__Term__Group_1__0
+            	    {
+            	    pushFollow(FOLLOW_rule__Term__Group_1__0_in_rule__Term__Group__1__Impl3850);
+            	    rule__Term__Group_1__0();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop16;
+                }
+            } while (true);
+
+             after(grammarAccess.getTermAccess().getGroup_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Term__Group__1__Impl"
+
+
+    // $ANTLR start "rule__Term__Group_1__0"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1890:1: rule__Term__Group_1__0 : rule__Term__Group_1__0__Impl rule__Term__Group_1__1 ;
+    public final void rule__Term__Group_1__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1894:1: ( rule__Term__Group_1__0__Impl rule__Term__Group_1__1 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1895:2: rule__Term__Group_1__0__Impl rule__Term__Group_1__1
+            {
+            pushFollow(FOLLOW_rule__Term__Group_1__0__Impl_in_rule__Term__Group_1__03885);
+            rule__Term__Group_1__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Term__Group_1__1_in_rule__Term__Group_1__03888);
+            rule__Term__Group_1__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Term__Group_1__0"
+
+
+    // $ANTLR start "rule__Term__Group_1__0__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1902:1: rule__Term__Group_1__0__Impl : ( () ) ;
+    public final void rule__Term__Group_1__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1906:1: ( ( () ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1907:1: ( () )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1907:1: ( () )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1908:1: ()
+            {
+             before(grammarAccess.getTermAccess().getTermLeftAction_1_0()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1909:1: ()
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1911:1: 
+            {
+            }
+
+             after(grammarAccess.getTermAccess().getTermLeftAction_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Term__Group_1__0__Impl"
+
+
+    // $ANTLR start "rule__Term__Group_1__1"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1921:1: rule__Term__Group_1__1 : rule__Term__Group_1__1__Impl rule__Term__Group_1__2 ;
+    public final void rule__Term__Group_1__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1925:1: ( rule__Term__Group_1__1__Impl rule__Term__Group_1__2 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1926:2: rule__Term__Group_1__1__Impl rule__Term__Group_1__2
+            {
+            pushFollow(FOLLOW_rule__Term__Group_1__1__Impl_in_rule__Term__Group_1__13946);
+            rule__Term__Group_1__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Term__Group_1__2_in_rule__Term__Group_1__13949);
+            rule__Term__Group_1__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Term__Group_1__1"
+
+
+    // $ANTLR start "rule__Term__Group_1__1__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1933:1: rule__Term__Group_1__1__Impl : ( ( rule__Term__OperationAssignment_1_1 ) ) ;
+    public final void rule__Term__Group_1__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1937:1: ( ( ( rule__Term__OperationAssignment_1_1 ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1938:1: ( ( rule__Term__OperationAssignment_1_1 ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1938:1: ( ( rule__Term__OperationAssignment_1_1 ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1939:1: ( rule__Term__OperationAssignment_1_1 )
+            {
+             before(grammarAccess.getTermAccess().getOperationAssignment_1_1()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1940:1: ( rule__Term__OperationAssignment_1_1 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1940:2: rule__Term__OperationAssignment_1_1
+            {
+            pushFollow(FOLLOW_rule__Term__OperationAssignment_1_1_in_rule__Term__Group_1__1__Impl3976);
+            rule__Term__OperationAssignment_1_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getTermAccess().getOperationAssignment_1_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Term__Group_1__1__Impl"
+
+
+    // $ANTLR start "rule__Term__Group_1__2"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1950:1: rule__Term__Group_1__2 : rule__Term__Group_1__2__Impl ;
+    public final void rule__Term__Group_1__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1954:1: ( rule__Term__Group_1__2__Impl )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1955:2: rule__Term__Group_1__2__Impl
+            {
+            pushFollow(FOLLOW_rule__Term__Group_1__2__Impl_in_rule__Term__Group_1__24006);
+            rule__Term__Group_1__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Term__Group_1__2"
+
+
+    // $ANTLR start "rule__Term__Group_1__2__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1961:1: rule__Term__Group_1__2__Impl : ( ( rule__Term__RightAssignment_1_2 ) ) ;
+    public final void rule__Term__Group_1__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1965:1: ( ( ( rule__Term__RightAssignment_1_2 ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1966:1: ( ( rule__Term__RightAssignment_1_2 ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1966:1: ( ( rule__Term__RightAssignment_1_2 ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1967:1: ( rule__Term__RightAssignment_1_2 )
+            {
+             before(grammarAccess.getTermAccess().getRightAssignment_1_2()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1968:1: ( rule__Term__RightAssignment_1_2 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1968:2: rule__Term__RightAssignment_1_2
+            {
+            pushFollow(FOLLOW_rule__Term__RightAssignment_1_2_in_rule__Term__Group_1__2__Impl4033);
+            rule__Term__RightAssignment_1_2();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getTermAccess().getRightAssignment_1_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Term__Group_1__2__Impl"
+
+
+    // $ANTLR start "rule__Product__Group__0"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1984:1: rule__Product__Group__0 : rule__Product__Group__0__Impl rule__Product__Group__1 ;
+    public final void rule__Product__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1988:1: ( rule__Product__Group__0__Impl rule__Product__Group__1 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1989:2: rule__Product__Group__0__Impl rule__Product__Group__1
+            {
+            pushFollow(FOLLOW_rule__Product__Group__0__Impl_in_rule__Product__Group__04069);
+            rule__Product__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Product__Group__1_in_rule__Product__Group__04072);
+            rule__Product__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Product__Group__0"
+
+
+    // $ANTLR start "rule__Product__Group__0__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:1996:1: rule__Product__Group__0__Impl : ( rulePower ) ;
+    public final void rule__Product__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2000:1: ( ( rulePower ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2001:1: ( rulePower )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2001:1: ( rulePower )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2002:1: rulePower
+            {
+             before(grammarAccess.getProductAccess().getPowerParserRuleCall_0()); 
+            pushFollow(FOLLOW_rulePower_in_rule__Product__Group__0__Impl4099);
+            rulePower();
+
+            state._fsp--;
+
+             after(grammarAccess.getProductAccess().getPowerParserRuleCall_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Product__Group__0__Impl"
+
+
+    // $ANTLR start "rule__Product__Group__1"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2013:1: rule__Product__Group__1 : rule__Product__Group__1__Impl ;
+    public final void rule__Product__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2017:1: ( rule__Product__Group__1__Impl )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2018:2: rule__Product__Group__1__Impl
+            {
+            pushFollow(FOLLOW_rule__Product__Group__1__Impl_in_rule__Product__Group__14128);
+            rule__Product__Group__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Product__Group__1"
+
+
+    // $ANTLR start "rule__Product__Group__1__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2024:1: rule__Product__Group__1__Impl : ( ( rule__Product__Group_1__0 )* ) ;
+    public final void rule__Product__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2028:1: ( ( ( rule__Product__Group_1__0 )* ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2029:1: ( ( rule__Product__Group_1__0 )* )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2029:1: ( ( rule__Product__Group_1__0 )* )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2030:1: ( rule__Product__Group_1__0 )*
+            {
+             before(grammarAccess.getProductAccess().getGroup_1()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2031:1: ( rule__Product__Group_1__0 )*
+            loop17:
+            do {
+                int alt17=2;
+                int LA17_0 = input.LA(1);
+
+                if ( ((LA17_0>=13 && LA17_0<=15)) ) {
+                    alt17=1;
+                }
+
+
+                switch (alt17) {
+            	case 1 :
+            	    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2031:2: rule__Product__Group_1__0
+            	    {
+            	    pushFollow(FOLLOW_rule__Product__Group_1__0_in_rule__Product__Group__1__Impl4155);
+            	    rule__Product__Group_1__0();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop17;
+                }
+            } while (true);
+
+             after(grammarAccess.getProductAccess().getGroup_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Product__Group__1__Impl"
+
+
+    // $ANTLR start "rule__Product__Group_1__0"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2045:1: rule__Product__Group_1__0 : rule__Product__Group_1__0__Impl rule__Product__Group_1__1 ;
+    public final void rule__Product__Group_1__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2049:1: ( rule__Product__Group_1__0__Impl rule__Product__Group_1__1 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2050:2: rule__Product__Group_1__0__Impl rule__Product__Group_1__1
+            {
+            pushFollow(FOLLOW_rule__Product__Group_1__0__Impl_in_rule__Product__Group_1__04190);
+            rule__Product__Group_1__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Product__Group_1__1_in_rule__Product__Group_1__04193);
+            rule__Product__Group_1__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Product__Group_1__0"
+
+
+    // $ANTLR start "rule__Product__Group_1__0__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2057:1: rule__Product__Group_1__0__Impl : ( () ) ;
+    public final void rule__Product__Group_1__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2061:1: ( ( () ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2062:1: ( () )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2062:1: ( () )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2063:1: ()
+            {
+             before(grammarAccess.getProductAccess().getProductLeftAction_1_0()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2064:1: ()
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2066:1: 
+            {
+            }
+
+             after(grammarAccess.getProductAccess().getProductLeftAction_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Product__Group_1__0__Impl"
+
+
+    // $ANTLR start "rule__Product__Group_1__1"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2076:1: rule__Product__Group_1__1 : rule__Product__Group_1__1__Impl rule__Product__Group_1__2 ;
+    public final void rule__Product__Group_1__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2080:1: ( rule__Product__Group_1__1__Impl rule__Product__Group_1__2 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2081:2: rule__Product__Group_1__1__Impl rule__Product__Group_1__2
+            {
+            pushFollow(FOLLOW_rule__Product__Group_1__1__Impl_in_rule__Product__Group_1__14251);
+            rule__Product__Group_1__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Product__Group_1__2_in_rule__Product__Group_1__14254);
+            rule__Product__Group_1__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Product__Group_1__1"
+
+
+    // $ANTLR start "rule__Product__Group_1__1__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2088:1: rule__Product__Group_1__1__Impl : ( ( rule__Product__OperationAssignment_1_1 ) ) ;
+    public final void rule__Product__Group_1__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2092:1: ( ( ( rule__Product__OperationAssignment_1_1 ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2093:1: ( ( rule__Product__OperationAssignment_1_1 ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2093:1: ( ( rule__Product__OperationAssignment_1_1 ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2094:1: ( rule__Product__OperationAssignment_1_1 )
+            {
+             before(grammarAccess.getProductAccess().getOperationAssignment_1_1()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2095:1: ( rule__Product__OperationAssignment_1_1 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2095:2: rule__Product__OperationAssignment_1_1
+            {
+            pushFollow(FOLLOW_rule__Product__OperationAssignment_1_1_in_rule__Product__Group_1__1__Impl4281);
+            rule__Product__OperationAssignment_1_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getProductAccess().getOperationAssignment_1_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Product__Group_1__1__Impl"
+
+
+    // $ANTLR start "rule__Product__Group_1__2"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2105:1: rule__Product__Group_1__2 : rule__Product__Group_1__2__Impl ;
+    public final void rule__Product__Group_1__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2109:1: ( rule__Product__Group_1__2__Impl )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2110:2: rule__Product__Group_1__2__Impl
+            {
+            pushFollow(FOLLOW_rule__Product__Group_1__2__Impl_in_rule__Product__Group_1__24311);
+            rule__Product__Group_1__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Product__Group_1__2"
+
+
+    // $ANTLR start "rule__Product__Group_1__2__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2116:1: rule__Product__Group_1__2__Impl : ( ( rule__Product__RightAssignment_1_2 ) ) ;
+    public final void rule__Product__Group_1__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2120:1: ( ( ( rule__Product__RightAssignment_1_2 ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2121:1: ( ( rule__Product__RightAssignment_1_2 ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2121:1: ( ( rule__Product__RightAssignment_1_2 ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2122:1: ( rule__Product__RightAssignment_1_2 )
+            {
+             before(grammarAccess.getProductAccess().getRightAssignment_1_2()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2123:1: ( rule__Product__RightAssignment_1_2 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2123:2: rule__Product__RightAssignment_1_2
+            {
+            pushFollow(FOLLOW_rule__Product__RightAssignment_1_2_in_rule__Product__Group_1__2__Impl4338);
+            rule__Product__RightAssignment_1_2();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getProductAccess().getRightAssignment_1_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Product__Group_1__2__Impl"
+
+
+    // $ANTLR start "rule__Power__Group__0"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2139:1: rule__Power__Group__0 : rule__Power__Group__0__Impl rule__Power__Group__1 ;
+    public final void rule__Power__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2143:1: ( rule__Power__Group__0__Impl rule__Power__Group__1 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2144:2: rule__Power__Group__0__Impl rule__Power__Group__1
+            {
+            pushFollow(FOLLOW_rule__Power__Group__0__Impl_in_rule__Power__Group__04374);
+            rule__Power__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Power__Group__1_in_rule__Power__Group__04377);
+            rule__Power__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Power__Group__0"
+
+
+    // $ANTLR start "rule__Power__Group__0__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2151:1: rule__Power__Group__0__Impl : ( ruleAtom ) ;
+    public final void rule__Power__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2155:1: ( ( ruleAtom ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2156:1: ( ruleAtom )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2156:1: ( ruleAtom )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2157:1: ruleAtom
+            {
+             before(grammarAccess.getPowerAccess().getAtomParserRuleCall_0()); 
+            pushFollow(FOLLOW_ruleAtom_in_rule__Power__Group__0__Impl4404);
+            ruleAtom();
+
+            state._fsp--;
+
+             after(grammarAccess.getPowerAccess().getAtomParserRuleCall_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Power__Group__0__Impl"
+
+
+    // $ANTLR start "rule__Power__Group__1"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2168:1: rule__Power__Group__1 : rule__Power__Group__1__Impl ;
+    public final void rule__Power__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2172:1: ( rule__Power__Group__1__Impl )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2173:2: rule__Power__Group__1__Impl
+            {
+            pushFollow(FOLLOW_rule__Power__Group__1__Impl_in_rule__Power__Group__14433);
+            rule__Power__Group__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Power__Group__1"
+
+
+    // $ANTLR start "rule__Power__Group__1__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2179:1: rule__Power__Group__1__Impl : ( ( rule__Power__Group_1__0 )* ) ;
+    public final void rule__Power__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2183:1: ( ( ( rule__Power__Group_1__0 )* ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2184:1: ( ( rule__Power__Group_1__0 )* )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2184:1: ( ( rule__Power__Group_1__0 )* )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2185:1: ( rule__Power__Group_1__0 )*
+            {
+             before(grammarAccess.getPowerAccess().getGroup_1()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2186:1: ( rule__Power__Group_1__0 )*
+            loop18:
+            do {
+                int alt18=2;
+                int LA18_0 = input.LA(1);
+
+                if ( (LA18_0==31) ) {
+                    alt18=1;
+                }
+
+
+                switch (alt18) {
+            	case 1 :
+            	    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2186:2: rule__Power__Group_1__0
+            	    {
+            	    pushFollow(FOLLOW_rule__Power__Group_1__0_in_rule__Power__Group__1__Impl4460);
+            	    rule__Power__Group_1__0();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop18;
+                }
+            } while (true);
+
+             after(grammarAccess.getPowerAccess().getGroup_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Power__Group__1__Impl"
+
+
+    // $ANTLR start "rule__Power__Group_1__0"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2200:1: rule__Power__Group_1__0 : rule__Power__Group_1__0__Impl rule__Power__Group_1__1 ;
+    public final void rule__Power__Group_1__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2204:1: ( rule__Power__Group_1__0__Impl rule__Power__Group_1__1 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2205:2: rule__Power__Group_1__0__Impl rule__Power__Group_1__1
+            {
+            pushFollow(FOLLOW_rule__Power__Group_1__0__Impl_in_rule__Power__Group_1__04495);
+            rule__Power__Group_1__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Power__Group_1__1_in_rule__Power__Group_1__04498);
+            rule__Power__Group_1__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Power__Group_1__0"
+
+
+    // $ANTLR start "rule__Power__Group_1__0__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2212:1: rule__Power__Group_1__0__Impl : ( () ) ;
+    public final void rule__Power__Group_1__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2216:1: ( ( () ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2217:1: ( () )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2217:1: ( () )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2218:1: ()
+            {
+             before(grammarAccess.getPowerAccess().getPowerBaseAction_1_0()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2219:1: ()
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2221:1: 
+            {
+            }
+
+             after(grammarAccess.getPowerAccess().getPowerBaseAction_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Power__Group_1__0__Impl"
+
+
+    // $ANTLR start "rule__Power__Group_1__1"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2231:1: rule__Power__Group_1__1 : rule__Power__Group_1__1__Impl rule__Power__Group_1__2 ;
+    public final void rule__Power__Group_1__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2235:1: ( rule__Power__Group_1__1__Impl rule__Power__Group_1__2 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2236:2: rule__Power__Group_1__1__Impl rule__Power__Group_1__2
+            {
+            pushFollow(FOLLOW_rule__Power__Group_1__1__Impl_in_rule__Power__Group_1__14556);
+            rule__Power__Group_1__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Power__Group_1__2_in_rule__Power__Group_1__14559);
+            rule__Power__Group_1__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Power__Group_1__1"
+
+
+    // $ANTLR start "rule__Power__Group_1__1__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2243:1: rule__Power__Group_1__1__Impl : ( '^' ) ;
+    public final void rule__Power__Group_1__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2247:1: ( ( '^' ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2248:1: ( '^' )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2248:1: ( '^' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2249:1: '^'
+            {
+             before(grammarAccess.getPowerAccess().getCircumflexAccentKeyword_1_1()); 
+            match(input,31,FOLLOW_31_in_rule__Power__Group_1__1__Impl4587); 
+             after(grammarAccess.getPowerAccess().getCircumflexAccentKeyword_1_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Power__Group_1__1__Impl"
+
+
+    // $ANTLR start "rule__Power__Group_1__2"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2262:1: rule__Power__Group_1__2 : rule__Power__Group_1__2__Impl ;
+    public final void rule__Power__Group_1__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2266:1: ( rule__Power__Group_1__2__Impl )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2267:2: rule__Power__Group_1__2__Impl
+            {
+            pushFollow(FOLLOW_rule__Power__Group_1__2__Impl_in_rule__Power__Group_1__24618);
+            rule__Power__Group_1__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Power__Group_1__2"
+
+
+    // $ANTLR start "rule__Power__Group_1__2__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2273:1: rule__Power__Group_1__2__Impl : ( ( rule__Power__ExponentAssignment_1_2 ) ) ;
+    public final void rule__Power__Group_1__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2277:1: ( ( ( rule__Power__ExponentAssignment_1_2 ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2278:1: ( ( rule__Power__ExponentAssignment_1_2 ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2278:1: ( ( rule__Power__ExponentAssignment_1_2 ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2279:1: ( rule__Power__ExponentAssignment_1_2 )
+            {
+             before(grammarAccess.getPowerAccess().getExponentAssignment_1_2()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2280:1: ( rule__Power__ExponentAssignment_1_2 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2280:2: rule__Power__ExponentAssignment_1_2
+            {
+            pushFollow(FOLLOW_rule__Power__ExponentAssignment_1_2_in_rule__Power__Group_1__2__Impl4645);
+            rule__Power__ExponentAssignment_1_2();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getPowerAccess().getExponentAssignment_1_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Power__Group_1__2__Impl"
+
+
+    // $ANTLR start "rule__Atom__Group_1__0"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2296:1: rule__Atom__Group_1__0 : rule__Atom__Group_1__0__Impl rule__Atom__Group_1__1 ;
+    public final void rule__Atom__Group_1__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2300:1: ( rule__Atom__Group_1__0__Impl rule__Atom__Group_1__1 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2301:2: rule__Atom__Group_1__0__Impl rule__Atom__Group_1__1
+            {
+            pushFollow(FOLLOW_rule__Atom__Group_1__0__Impl_in_rule__Atom__Group_1__04681);
+            rule__Atom__Group_1__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Atom__Group_1__1_in_rule__Atom__Group_1__04684);
+            rule__Atom__Group_1__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Atom__Group_1__0"
+
+
+    // $ANTLR start "rule__Atom__Group_1__0__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2308:1: rule__Atom__Group_1__0__Impl : ( '(' ) ;
+    public final void rule__Atom__Group_1__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2312:1: ( ( '(' ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2313:1: ( '(' )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2313:1: ( '(' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2314:1: '('
+            {
+             before(grammarAccess.getAtomAccess().getLeftParenthesisKeyword_1_0()); 
+            match(input,32,FOLLOW_32_in_rule__Atom__Group_1__0__Impl4712); 
+             after(grammarAccess.getAtomAccess().getLeftParenthesisKeyword_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Atom__Group_1__0__Impl"
+
+
+    // $ANTLR start "rule__Atom__Group_1__1"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2327:1: rule__Atom__Group_1__1 : rule__Atom__Group_1__1__Impl rule__Atom__Group_1__2 ;
+    public final void rule__Atom__Group_1__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2331:1: ( rule__Atom__Group_1__1__Impl rule__Atom__Group_1__2 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2332:2: rule__Atom__Group_1__1__Impl rule__Atom__Group_1__2
+            {
+            pushFollow(FOLLOW_rule__Atom__Group_1__1__Impl_in_rule__Atom__Group_1__14743);
+            rule__Atom__Group_1__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Atom__Group_1__2_in_rule__Atom__Group_1__14746);
+            rule__Atom__Group_1__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Atom__Group_1__1"
+
+
+    // $ANTLR start "rule__Atom__Group_1__1__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2339:1: rule__Atom__Group_1__1__Impl : ( ruleRootExpression ) ;
+    public final void rule__Atom__Group_1__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2343:1: ( ( ruleRootExpression ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2344:1: ( ruleRootExpression )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2344:1: ( ruleRootExpression )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2345:1: ruleRootExpression
+            {
+             before(grammarAccess.getAtomAccess().getRootExpressionParserRuleCall_1_1()); 
+            pushFollow(FOLLOW_ruleRootExpression_in_rule__Atom__Group_1__1__Impl4773);
+            ruleRootExpression();
+
+            state._fsp--;
+
+             after(grammarAccess.getAtomAccess().getRootExpressionParserRuleCall_1_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Atom__Group_1__1__Impl"
+
+
+    // $ANTLR start "rule__Atom__Group_1__2"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2356:1: rule__Atom__Group_1__2 : rule__Atom__Group_1__2__Impl ;
+    public final void rule__Atom__Group_1__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2360:1: ( rule__Atom__Group_1__2__Impl )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2361:2: rule__Atom__Group_1__2__Impl
+            {
+            pushFollow(FOLLOW_rule__Atom__Group_1__2__Impl_in_rule__Atom__Group_1__24802);
+            rule__Atom__Group_1__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Atom__Group_1__2"
+
+
+    // $ANTLR start "rule__Atom__Group_1__2__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2367:1: rule__Atom__Group_1__2__Impl : ( ')' ) ;
+    public final void rule__Atom__Group_1__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2371:1: ( ( ')' ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2372:1: ( ')' )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2372:1: ( ')' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2373:1: ')'
+            {
+             before(grammarAccess.getAtomAccess().getRightParenthesisKeyword_1_2()); 
+            match(input,33,FOLLOW_33_in_rule__Atom__Group_1__2__Impl4830); 
+             after(grammarAccess.getAtomAccess().getRightParenthesisKeyword_1_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Atom__Group_1__2__Impl"
+
+
+    // $ANTLR start "rule__Function__Group__0"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2392:1: rule__Function__Group__0 : rule__Function__Group__0__Impl rule__Function__Group__1 ;
+    public final void rule__Function__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2396:1: ( rule__Function__Group__0__Impl rule__Function__Group__1 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2397:2: rule__Function__Group__0__Impl rule__Function__Group__1
+            {
+            pushFollow(FOLLOW_rule__Function__Group__0__Impl_in_rule__Function__Group__04867);
+            rule__Function__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Function__Group__1_in_rule__Function__Group__04870);
+            rule__Function__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Function__Group__0"
+
+
+    // $ANTLR start "rule__Function__Group__0__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2404:1: rule__Function__Group__0__Impl : ( ( rule__Function__NameAssignment_0 ) ) ;
+    public final void rule__Function__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2408:1: ( ( ( rule__Function__NameAssignment_0 ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2409:1: ( ( rule__Function__NameAssignment_0 ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2409:1: ( ( rule__Function__NameAssignment_0 ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2410:1: ( rule__Function__NameAssignment_0 )
+            {
+             before(grammarAccess.getFunctionAccess().getNameAssignment_0()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2411:1: ( rule__Function__NameAssignment_0 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2411:2: rule__Function__NameAssignment_0
+            {
+            pushFollow(FOLLOW_rule__Function__NameAssignment_0_in_rule__Function__Group__0__Impl4897);
+            rule__Function__NameAssignment_0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getFunctionAccess().getNameAssignment_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Function__Group__0__Impl"
+
+
+    // $ANTLR start "rule__Function__Group__1"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2421:1: rule__Function__Group__1 : rule__Function__Group__1__Impl rule__Function__Group__2 ;
+    public final void rule__Function__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2425:1: ( rule__Function__Group__1__Impl rule__Function__Group__2 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2426:2: rule__Function__Group__1__Impl rule__Function__Group__2
+            {
+            pushFollow(FOLLOW_rule__Function__Group__1__Impl_in_rule__Function__Group__14927);
+            rule__Function__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Function__Group__2_in_rule__Function__Group__14930);
+            rule__Function__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Function__Group__1"
+
+
+    // $ANTLR start "rule__Function__Group__1__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2433:1: rule__Function__Group__1__Impl : ( '(' ) ;
+    public final void rule__Function__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2437:1: ( ( '(' ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2438:1: ( '(' )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2438:1: ( '(' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2439:1: '('
+            {
+             before(grammarAccess.getFunctionAccess().getLeftParenthesisKeyword_1()); 
+            match(input,32,FOLLOW_32_in_rule__Function__Group__1__Impl4958); 
+             after(grammarAccess.getFunctionAccess().getLeftParenthesisKeyword_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Function__Group__1__Impl"
+
+
+    // $ANTLR start "rule__Function__Group__2"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2452:1: rule__Function__Group__2 : rule__Function__Group__2__Impl rule__Function__Group__3 ;
+    public final void rule__Function__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2456:1: ( rule__Function__Group__2__Impl rule__Function__Group__3 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2457:2: rule__Function__Group__2__Impl rule__Function__Group__3
+            {
+            pushFollow(FOLLOW_rule__Function__Group__2__Impl_in_rule__Function__Group__24989);
+            rule__Function__Group__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Function__Group__3_in_rule__Function__Group__24992);
+            rule__Function__Group__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Function__Group__2"
+
+
+    // $ANTLR start "rule__Function__Group__2__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2464:1: rule__Function__Group__2__Impl : ( ( rule__Function__Group_2__0 )? ) ;
+    public final void rule__Function__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2468:1: ( ( ( rule__Function__Group_2__0 )? ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2469:1: ( ( rule__Function__Group_2__0 )? )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2469:1: ( ( rule__Function__Group_2__0 )? )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2470:1: ( rule__Function__Group_2__0 )?
+            {
+             before(grammarAccess.getFunctionAccess().getGroup_2()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2471:1: ( rule__Function__Group_2__0 )?
+            int alt19=2;
+            int LA19_0 = input.LA(1);
+
+            if ( ((LA19_0>=RULE_STRING && LA19_0<=RULE_INT)||(LA19_0>=11 && LA19_0<=12)||LA19_0==17||LA19_0==30||LA19_0==32) ) {
+                alt19=1;
+            }
+            switch (alt19) {
+                case 1 :
+                    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2471:2: rule__Function__Group_2__0
+                    {
+                    pushFollow(FOLLOW_rule__Function__Group_2__0_in_rule__Function__Group__2__Impl5019);
+                    rule__Function__Group_2__0();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getFunctionAccess().getGroup_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Function__Group__2__Impl"
+
+
+    // $ANTLR start "rule__Function__Group__3"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2481:1: rule__Function__Group__3 : rule__Function__Group__3__Impl ;
+    public final void rule__Function__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2485:1: ( rule__Function__Group__3__Impl )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2486:2: rule__Function__Group__3__Impl
+            {
+            pushFollow(FOLLOW_rule__Function__Group__3__Impl_in_rule__Function__Group__35050);
+            rule__Function__Group__3__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Function__Group__3"
+
+
+    // $ANTLR start "rule__Function__Group__3__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2492:1: rule__Function__Group__3__Impl : ( ')' ) ;
+    public final void rule__Function__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2496:1: ( ( ')' ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2497:1: ( ')' )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2497:1: ( ')' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2498:1: ')'
+            {
+             before(grammarAccess.getFunctionAccess().getRightParenthesisKeyword_3()); 
+            match(input,33,FOLLOW_33_in_rule__Function__Group__3__Impl5078); 
+             after(grammarAccess.getFunctionAccess().getRightParenthesisKeyword_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Function__Group__3__Impl"
+
+
+    // $ANTLR start "rule__Function__Group_2__0"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2519:1: rule__Function__Group_2__0 : rule__Function__Group_2__0__Impl rule__Function__Group_2__1 ;
+    public final void rule__Function__Group_2__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2523:1: ( rule__Function__Group_2__0__Impl rule__Function__Group_2__1 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2524:2: rule__Function__Group_2__0__Impl rule__Function__Group_2__1
+            {
+            pushFollow(FOLLOW_rule__Function__Group_2__0__Impl_in_rule__Function__Group_2__05117);
+            rule__Function__Group_2__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Function__Group_2__1_in_rule__Function__Group_2__05120);
+            rule__Function__Group_2__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Function__Group_2__0"
+
+
+    // $ANTLR start "rule__Function__Group_2__0__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2531:1: rule__Function__Group_2__0__Impl : ( ( rule__Function__ParametersAssignment_2_0 ) ) ;
+    public final void rule__Function__Group_2__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2535:1: ( ( ( rule__Function__ParametersAssignment_2_0 ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2536:1: ( ( rule__Function__ParametersAssignment_2_0 ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2536:1: ( ( rule__Function__ParametersAssignment_2_0 ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2537:1: ( rule__Function__ParametersAssignment_2_0 )
+            {
+             before(grammarAccess.getFunctionAccess().getParametersAssignment_2_0()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2538:1: ( rule__Function__ParametersAssignment_2_0 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2538:2: rule__Function__ParametersAssignment_2_0
+            {
+            pushFollow(FOLLOW_rule__Function__ParametersAssignment_2_0_in_rule__Function__Group_2__0__Impl5147);
+            rule__Function__ParametersAssignment_2_0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getFunctionAccess().getParametersAssignment_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Function__Group_2__0__Impl"
+
+
+    // $ANTLR start "rule__Function__Group_2__1"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2548:1: rule__Function__Group_2__1 : rule__Function__Group_2__1__Impl ;
+    public final void rule__Function__Group_2__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2552:1: ( rule__Function__Group_2__1__Impl )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2553:2: rule__Function__Group_2__1__Impl
+            {
+            pushFollow(FOLLOW_rule__Function__Group_2__1__Impl_in_rule__Function__Group_2__15177);
+            rule__Function__Group_2__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Function__Group_2__1"
+
+
+    // $ANTLR start "rule__Function__Group_2__1__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2559:1: rule__Function__Group_2__1__Impl : ( ( rule__Function__Group_2_1__0 )* ) ;
+    public final void rule__Function__Group_2__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2563:1: ( ( ( rule__Function__Group_2_1__0 )* ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2564:1: ( ( rule__Function__Group_2_1__0 )* )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2564:1: ( ( rule__Function__Group_2_1__0 )* )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2565:1: ( rule__Function__Group_2_1__0 )*
+            {
+             before(grammarAccess.getFunctionAccess().getGroup_2_1()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2566:1: ( rule__Function__Group_2_1__0 )*
+            loop20:
+            do {
+                int alt20=2;
+                int LA20_0 = input.LA(1);
+
+                if ( (LA20_0==34) ) {
+                    alt20=1;
+                }
+
+
+                switch (alt20) {
+            	case 1 :
+            	    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2566:2: rule__Function__Group_2_1__0
+            	    {
+            	    pushFollow(FOLLOW_rule__Function__Group_2_1__0_in_rule__Function__Group_2__1__Impl5204);
+            	    rule__Function__Group_2_1__0();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop20;
+                }
+            } while (true);
+
+             after(grammarAccess.getFunctionAccess().getGroup_2_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Function__Group_2__1__Impl"
+
+
+    // $ANTLR start "rule__Function__Group_2_1__0"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2580:1: rule__Function__Group_2_1__0 : rule__Function__Group_2_1__0__Impl rule__Function__Group_2_1__1 ;
+    public final void rule__Function__Group_2_1__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2584:1: ( rule__Function__Group_2_1__0__Impl rule__Function__Group_2_1__1 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2585:2: rule__Function__Group_2_1__0__Impl rule__Function__Group_2_1__1
+            {
+            pushFollow(FOLLOW_rule__Function__Group_2_1__0__Impl_in_rule__Function__Group_2_1__05239);
+            rule__Function__Group_2_1__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Function__Group_2_1__1_in_rule__Function__Group_2_1__05242);
+            rule__Function__Group_2_1__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Function__Group_2_1__0"
+
+
+    // $ANTLR start "rule__Function__Group_2_1__0__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2592:1: rule__Function__Group_2_1__0__Impl : ( ',' ) ;
+    public final void rule__Function__Group_2_1__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2596:1: ( ( ',' ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2597:1: ( ',' )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2597:1: ( ',' )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2598:1: ','
+            {
+             before(grammarAccess.getFunctionAccess().getCommaKeyword_2_1_0()); 
+            match(input,34,FOLLOW_34_in_rule__Function__Group_2_1__0__Impl5270); 
+             after(grammarAccess.getFunctionAccess().getCommaKeyword_2_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Function__Group_2_1__0__Impl"
+
+
+    // $ANTLR start "rule__Function__Group_2_1__1"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2611:1: rule__Function__Group_2_1__1 : rule__Function__Group_2_1__1__Impl ;
+    public final void rule__Function__Group_2_1__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2615:1: ( rule__Function__Group_2_1__1__Impl )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2616:2: rule__Function__Group_2_1__1__Impl
+            {
+            pushFollow(FOLLOW_rule__Function__Group_2_1__1__Impl_in_rule__Function__Group_2_1__15301);
+            rule__Function__Group_2_1__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Function__Group_2_1__1"
+
+
+    // $ANTLR start "rule__Function__Group_2_1__1__Impl"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2622:1: rule__Function__Group_2_1__1__Impl : ( ( rule__Function__ParametersAssignment_2_1_1 ) ) ;
+    public final void rule__Function__Group_2_1__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2626:1: ( ( ( rule__Function__ParametersAssignment_2_1_1 ) ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2627:1: ( ( rule__Function__ParametersAssignment_2_1_1 ) )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2627:1: ( ( rule__Function__ParametersAssignment_2_1_1 ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2628:1: ( rule__Function__ParametersAssignment_2_1_1 )
+            {
+             before(grammarAccess.getFunctionAccess().getParametersAssignment_2_1_1()); 
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2629:1: ( rule__Function__ParametersAssignment_2_1_1 )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2629:2: rule__Function__ParametersAssignment_2_1_1
+            {
+            pushFollow(FOLLOW_rule__Function__ParametersAssignment_2_1_1_in_rule__Function__Group_2_1__1__Impl5328);
+            rule__Function__ParametersAssignment_2_1_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getFunctionAccess().getParametersAssignment_2_1_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Function__Group_2_1__1__Impl"
+
+
+    // $ANTLR start "rule__Model__TermsAssignment"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2644:1: rule__Model__TermsAssignment : ( ruleIfElseExpression ) ;
+    public final void rule__Model__TermsAssignment() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2648:1: ( ( ruleIfElseExpression ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2649:1: ( ruleIfElseExpression )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2649:1: ( ruleIfElseExpression )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2650:1: ruleIfElseExpression
+            {
+             before(grammarAccess.getModelAccess().getTermsIfElseExpressionParserRuleCall_0()); 
+            pushFollow(FOLLOW_ruleIfElseExpression_in_rule__Model__TermsAssignment5367);
+            ruleIfElseExpression();
+
+            state._fsp--;
+
+             after(grammarAccess.getModelAccess().getTermsIfElseExpressionParserRuleCall_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Model__TermsAssignment"
+
+
+    // $ANTLR start "rule__IfElseExpression__TrueExpAssignment_1_2"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2659:1: rule__IfElseExpression__TrueExpAssignment_1_2 : ( ruleIfElseExpression ) ;
+    public final void rule__IfElseExpression__TrueExpAssignment_1_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2663:1: ( ( ruleIfElseExpression ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2664:1: ( ruleIfElseExpression )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2664:1: ( ruleIfElseExpression )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2665:1: ruleIfElseExpression
+            {
+             before(grammarAccess.getIfElseExpressionAccess().getTrueExpIfElseExpressionParserRuleCall_1_2_0()); 
+            pushFollow(FOLLOW_ruleIfElseExpression_in_rule__IfElseExpression__TrueExpAssignment_1_25398);
+            ruleIfElseExpression();
+
+            state._fsp--;
+
+             after(grammarAccess.getIfElseExpressionAccess().getTrueExpIfElseExpressionParserRuleCall_1_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IfElseExpression__TrueExpAssignment_1_2"
+
+
+    // $ANTLR start "rule__IfElseExpression__FalseExpAssignment_1_4"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2674:1: rule__IfElseExpression__FalseExpAssignment_1_4 : ( ruleIfElseExpression ) ;
+    public final void rule__IfElseExpression__FalseExpAssignment_1_4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2678:1: ( ( ruleIfElseExpression ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2679:1: ( ruleIfElseExpression )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2679:1: ( ruleIfElseExpression )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2680:1: ruleIfElseExpression
+            {
+             before(grammarAccess.getIfElseExpressionAccess().getFalseExpIfElseExpressionParserRuleCall_1_4_0()); 
+            pushFollow(FOLLOW_ruleIfElseExpression_in_rule__IfElseExpression__FalseExpAssignment_1_45429);
+            ruleIfElseExpression();
+
+            state._fsp--;
+
+             after(grammarAccess.getIfElseExpressionAccess().getFalseExpIfElseExpressionParserRuleCall_1_4_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IfElseExpression__FalseExpAssignment_1_4"
+
+
+    // $ANTLR start "rule__BinaryBooleanExpression__OperationAssignment_1_1"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2689:1: rule__BinaryBooleanExpression__OperationAssignment_1_1 : ( ruleBooleanOperation ) ;
+    public final void rule__BinaryBooleanExpression__OperationAssignment_1_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2693:1: ( ( ruleBooleanOperation ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2694:1: ( ruleBooleanOperation )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2694:1: ( ruleBooleanOperation )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2695:1: ruleBooleanOperation
+            {
+             before(grammarAccess.getBinaryBooleanExpressionAccess().getOperationBooleanOperationEnumRuleCall_1_1_0()); 
+            pushFollow(FOLLOW_ruleBooleanOperation_in_rule__BinaryBooleanExpression__OperationAssignment_1_15460);
+            ruleBooleanOperation();
+
+            state._fsp--;
+
+             after(grammarAccess.getBinaryBooleanExpressionAccess().getOperationBooleanOperationEnumRuleCall_1_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__BinaryBooleanExpression__OperationAssignment_1_1"
+
+
+    // $ANTLR start "rule__BinaryBooleanExpression__RightAssignment_1_2"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2704:1: rule__BinaryBooleanExpression__RightAssignment_1_2 : ( ruleUnaryBooleanExpression ) ;
+    public final void rule__BinaryBooleanExpression__RightAssignment_1_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2708:1: ( ( ruleUnaryBooleanExpression ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2709:1: ( ruleUnaryBooleanExpression )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2709:1: ( ruleUnaryBooleanExpression )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2710:1: ruleUnaryBooleanExpression
+            {
+             before(grammarAccess.getBinaryBooleanExpressionAccess().getRightUnaryBooleanExpressionParserRuleCall_1_2_0()); 
+            pushFollow(FOLLOW_ruleUnaryBooleanExpression_in_rule__BinaryBooleanExpression__RightAssignment_1_25491);
+            ruleUnaryBooleanExpression();
+
+            state._fsp--;
+
+             after(grammarAccess.getBinaryBooleanExpressionAccess().getRightUnaryBooleanExpressionParserRuleCall_1_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__BinaryBooleanExpression__RightAssignment_1_2"
+
+
+    // $ANTLR start "rule__Comparison__OperationAssignment_1_1"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2719:1: rule__Comparison__OperationAssignment_1_1 : ( ruleCompareOperation ) ;
+    public final void rule__Comparison__OperationAssignment_1_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2723:1: ( ( ruleCompareOperation ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2724:1: ( ruleCompareOperation )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2724:1: ( ruleCompareOperation )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2725:1: ruleCompareOperation
+            {
+             before(grammarAccess.getComparisonAccess().getOperationCompareOperationEnumRuleCall_1_1_0()); 
+            pushFollow(FOLLOW_ruleCompareOperation_in_rule__Comparison__OperationAssignment_1_15522);
+            ruleCompareOperation();
+
+            state._fsp--;
+
+             after(grammarAccess.getComparisonAccess().getOperationCompareOperationEnumRuleCall_1_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Comparison__OperationAssignment_1_1"
+
+
+    // $ANTLR start "rule__Comparison__RightAssignment_1_2"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2734:1: rule__Comparison__RightAssignment_1_2 : ( ruleTerm ) ;
+    public final void rule__Comparison__RightAssignment_1_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2738:1: ( ( ruleTerm ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2739:1: ( ruleTerm )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2739:1: ( ruleTerm )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2740:1: ruleTerm
+            {
+             before(grammarAccess.getComparisonAccess().getRightTermParserRuleCall_1_2_0()); 
+            pushFollow(FOLLOW_ruleTerm_in_rule__Comparison__RightAssignment_1_25553);
+            ruleTerm();
+
+            state._fsp--;
+
+             after(grammarAccess.getComparisonAccess().getRightTermParserRuleCall_1_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Comparison__RightAssignment_1_2"
+
+
+    // $ANTLR start "rule__Term__OperationAssignment_1_1"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2749:1: rule__Term__OperationAssignment_1_1 : ( ruleTermOperation ) ;
+    public final void rule__Term__OperationAssignment_1_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2753:1: ( ( ruleTermOperation ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2754:1: ( ruleTermOperation )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2754:1: ( ruleTermOperation )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2755:1: ruleTermOperation
+            {
+             before(grammarAccess.getTermAccess().getOperationTermOperationEnumRuleCall_1_1_0()); 
+            pushFollow(FOLLOW_ruleTermOperation_in_rule__Term__OperationAssignment_1_15584);
+            ruleTermOperation();
+
+            state._fsp--;
+
+             after(grammarAccess.getTermAccess().getOperationTermOperationEnumRuleCall_1_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Term__OperationAssignment_1_1"
+
+
+    // $ANTLR start "rule__Term__RightAssignment_1_2"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2764:1: rule__Term__RightAssignment_1_2 : ( ruleProduct ) ;
+    public final void rule__Term__RightAssignment_1_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2768:1: ( ( ruleProduct ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2769:1: ( ruleProduct )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2769:1: ( ruleProduct )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2770:1: ruleProduct
+            {
+             before(grammarAccess.getTermAccess().getRightProductParserRuleCall_1_2_0()); 
+            pushFollow(FOLLOW_ruleProduct_in_rule__Term__RightAssignment_1_25615);
+            ruleProduct();
+
+            state._fsp--;
+
+             after(grammarAccess.getTermAccess().getRightProductParserRuleCall_1_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Term__RightAssignment_1_2"
+
+
+    // $ANTLR start "rule__Product__OperationAssignment_1_1"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2779:1: rule__Product__OperationAssignment_1_1 : ( ruleProductOperation ) ;
+    public final void rule__Product__OperationAssignment_1_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2783:1: ( ( ruleProductOperation ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2784:1: ( ruleProductOperation )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2784:1: ( ruleProductOperation )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2785:1: ruleProductOperation
+            {
+             before(grammarAccess.getProductAccess().getOperationProductOperationEnumRuleCall_1_1_0()); 
+            pushFollow(FOLLOW_ruleProductOperation_in_rule__Product__OperationAssignment_1_15646);
+            ruleProductOperation();
+
+            state._fsp--;
+
+             after(grammarAccess.getProductAccess().getOperationProductOperationEnumRuleCall_1_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Product__OperationAssignment_1_1"
+
+
+    // $ANTLR start "rule__Product__RightAssignment_1_2"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2794:1: rule__Product__RightAssignment_1_2 : ( rulePower ) ;
+    public final void rule__Product__RightAssignment_1_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2798:1: ( ( rulePower ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2799:1: ( rulePower )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2799:1: ( rulePower )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2800:1: rulePower
+            {
+             before(grammarAccess.getProductAccess().getRightPowerParserRuleCall_1_2_0()); 
+            pushFollow(FOLLOW_rulePower_in_rule__Product__RightAssignment_1_25677);
+            rulePower();
+
+            state._fsp--;
+
+             after(grammarAccess.getProductAccess().getRightPowerParserRuleCall_1_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Product__RightAssignment_1_2"
+
+
+    // $ANTLR start "rule__Power__ExponentAssignment_1_2"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2809:1: rule__Power__ExponentAssignment_1_2 : ( ruleAtom ) ;
+    public final void rule__Power__ExponentAssignment_1_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2813:1: ( ( ruleAtom ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2814:1: ( ruleAtom )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2814:1: ( ruleAtom )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2815:1: ruleAtom
+            {
+             before(grammarAccess.getPowerAccess().getExponentAtomParserRuleCall_1_2_0()); 
+            pushFollow(FOLLOW_ruleAtom_in_rule__Power__ExponentAssignment_1_25708);
+            ruleAtom();
+
+            state._fsp--;
+
+             after(grammarAccess.getPowerAccess().getExponentAtomParserRuleCall_1_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Power__ExponentAssignment_1_2"
+
+
+    // $ANTLR start "rule__Function__NameAssignment_0"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2824:1: rule__Function__NameAssignment_0 : ( RULE_ID ) ;
+    public final void rule__Function__NameAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2828:1: ( ( RULE_ID ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2829:1: ( RULE_ID )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2829:1: ( RULE_ID )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2830:1: RULE_ID
+            {
+             before(grammarAccess.getFunctionAccess().getNameIDTerminalRuleCall_0_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__Function__NameAssignment_05739); 
+             after(grammarAccess.getFunctionAccess().getNameIDTerminalRuleCall_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Function__NameAssignment_0"
+
+
+    // $ANTLR start "rule__Function__ParametersAssignment_2_0"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2839:1: rule__Function__ParametersAssignment_2_0 : ( ruleRootExpression ) ;
+    public final void rule__Function__ParametersAssignment_2_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2843:1: ( ( ruleRootExpression ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2844:1: ( ruleRootExpression )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2844:1: ( ruleRootExpression )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2845:1: ruleRootExpression
+            {
+             before(grammarAccess.getFunctionAccess().getParametersRootExpressionParserRuleCall_2_0_0()); 
+            pushFollow(FOLLOW_ruleRootExpression_in_rule__Function__ParametersAssignment_2_05770);
+            ruleRootExpression();
+
+            state._fsp--;
+
+             after(grammarAccess.getFunctionAccess().getParametersRootExpressionParserRuleCall_2_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Function__ParametersAssignment_2_0"
+
+
+    // $ANTLR start "rule__Function__ParametersAssignment_2_1_1"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2854:1: rule__Function__ParametersAssignment_2_1_1 : ( ruleRootExpression ) ;
+    public final void rule__Function__ParametersAssignment_2_1_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2858:1: ( ( ruleRootExpression ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2859:1: ( ruleRootExpression )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2859:1: ( ruleRootExpression )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2860:1: ruleRootExpression
+            {
+             before(grammarAccess.getFunctionAccess().getParametersRootExpressionParserRuleCall_2_1_1_0()); 
+            pushFollow(FOLLOW_ruleRootExpression_in_rule__Function__ParametersAssignment_2_1_15801);
+            ruleRootExpression();
+
+            state._fsp--;
+
+             after(grammarAccess.getFunctionAccess().getParametersRootExpressionParserRuleCall_2_1_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Function__ParametersAssignment_2_1_1"
+
+
+    // $ANTLR start "rule__FormalParameter__ValueAssignment"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2869:1: rule__FormalParameter__ValueAssignment : ( ruleEString ) ;
+    public final void rule__FormalParameter__ValueAssignment() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2873:1: ( ( ruleEString ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2874:1: ( ruleEString )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2874:1: ( ruleEString )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2875:1: ruleEString
+            {
+             before(grammarAccess.getFormalParameterAccess().getValueEStringParserRuleCall_0()); 
+            pushFollow(FOLLOW_ruleEString_in_rule__FormalParameter__ValueAssignment5832);
+            ruleEString();
+
+            state._fsp--;
+
+             after(grammarAccess.getFormalParameterAccess().getValueEStringParserRuleCall_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__FormalParameter__ValueAssignment"
+
+
+    // $ANTLR start "rule__BooleanLiteral__ValueAssignment"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2884:1: rule__BooleanLiteral__ValueAssignment : ( ruleEBoolean ) ;
+    public final void rule__BooleanLiteral__ValueAssignment() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2888:1: ( ( ruleEBoolean ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2889:1: ( ruleEBoolean )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2889:1: ( ruleEBoolean )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2890:1: ruleEBoolean
+            {
+             before(grammarAccess.getBooleanLiteralAccess().getValueEBooleanParserRuleCall_0()); 
+            pushFollow(FOLLOW_ruleEBoolean_in_rule__BooleanLiteral__ValueAssignment5863);
+            ruleEBoolean();
+
+            state._fsp--;
+
+             after(grammarAccess.getBooleanLiteralAccess().getValueEBooleanParserRuleCall_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__BooleanLiteral__ValueAssignment"
+
+
+    // $ANTLR start "rule__IntLiteral__ValueAssignment"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2899:1: rule__IntLiteral__ValueAssignment : ( ruleInteger ) ;
+    public final void rule__IntLiteral__ValueAssignment() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2903:1: ( ( ruleInteger ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2904:1: ( ruleInteger )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2904:1: ( ruleInteger )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2905:1: ruleInteger
+            {
+             before(grammarAccess.getIntLiteralAccess().getValueIntegerParserRuleCall_0()); 
+            pushFollow(FOLLOW_ruleInteger_in_rule__IntLiteral__ValueAssignment5894);
+            ruleInteger();
+
+            state._fsp--;
+
+             after(grammarAccess.getIntLiteralAccess().getValueIntegerParserRuleCall_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IntLiteral__ValueAssignment"
+
+
+    // $ANTLR start "rule__DoubleLiteral__ValueAssignment"
+    // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2914:1: rule__DoubleLiteral__ValueAssignment : ( ruleDouble ) ;
+    public final void rule__DoubleLiteral__ValueAssignment() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2918:1: ( ( ruleDouble ) )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2919:1: ( ruleDouble )
+            {
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2919:1: ( ruleDouble )
+            // ../org.xtext.example.mydsl.ui/src-gen/org/xtext/example/mydsl/ui/contentassist/antlr/internal/InternalMyDsl.g:2920:1: ruleDouble
+            {
+             before(grammarAccess.getDoubleLiteralAccess().getValueDoubleParserRuleCall_0()); 
+            pushFollow(FOLLOW_ruleDouble_in_rule__DoubleLiteral__ValueAssignment5925);
+            ruleDouble();
+
+            state._fsp--;
+
+             after(grammarAccess.getDoubleLiteralAccess().getValueDoubleParserRuleCall_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DoubleLiteral__ValueAssignment"
+
+    // Delegated rules
+
+
+ 
+
+    public static final BitSet FOLLOW_ruleModel_in_entryRuleModel61 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleModel68 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Model__TermsAssignment_in_ruleModel94 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDouble_in_entryRuleDouble121 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleDouble128 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Double__Group__0_in_ruleDouble154 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleInteger_in_entryRuleInteger181 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleInteger188 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Integer__Group__0_in_ruleInteger214 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleEString_in_entryRuleEString241 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleEString248 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EString__Alternatives_in_ruleEString274 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleEBoolean_in_entryRuleEBoolean301 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleEBoolean308 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EBoolean__Alternatives_in_ruleEBoolean334 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRootExpression_in_entryRuleRootExpression361 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRootExpression368 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleIfElseExpression_in_ruleRootExpression394 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleIfElseExpression_in_entryRuleIfElseExpression420 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleIfElseExpression427 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__IfElseExpression__Group__0_in_ruleIfElseExpression453 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleBinaryBooleanExpression_in_entryRuleBinaryBooleanExpression480 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleBinaryBooleanExpression487 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__BinaryBooleanExpression__Group__0_in_ruleBinaryBooleanExpression513 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleUnaryBooleanExpression_in_entryRuleUnaryBooleanExpression540 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleUnaryBooleanExpression547 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__UnaryBooleanExpression__Alternatives_in_ruleUnaryBooleanExpression573 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleComparison_in_entryRuleComparison600 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleComparison607 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Comparison__Group__0_in_ruleComparison633 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleTerm_in_entryRuleTerm660 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleTerm667 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Term__Group__0_in_ruleTerm693 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleProduct_in_entryRuleProduct720 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleProduct727 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Product__Group__0_in_ruleProduct753 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulePower_in_entryRulePower780 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulePower787 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Power__Group__0_in_rulePower813 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleAtom_in_entryRuleAtom840 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleAtom847 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Atom__Alternatives_in_ruleAtom873 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleFunction_in_entryRuleFunction900 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleFunction907 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Function__Group__0_in_ruleFunction933 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleLiteral_in_entryRuleLiteral960 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleLiteral967 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Literal__Alternatives_in_ruleLiteral993 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleFormalParameter_in_entryRuleFormalParameter1020 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleFormalParameter1027 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__FormalParameter__ValueAssignment_in_ruleFormalParameter1053 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleBooleanLiteral_in_entryRuleBooleanLiteral1080 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleBooleanLiteral1087 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__BooleanLiteral__ValueAssignment_in_ruleBooleanLiteral1113 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleNumberLiteral_in_entryRuleNumberLiteral1140 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleNumberLiteral1147 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__NumberLiteral__Alternatives_in_ruleNumberLiteral1173 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleIntLiteral_in_entryRuleIntLiteral1200 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleIntLiteral1207 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__IntLiteral__ValueAssignment_in_ruleIntLiteral1233 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDoubleLiteral_in_entryRuleDoubleLiteral1260 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleDoubleLiteral1267 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DoubleLiteral__ValueAssignment_in_ruleDoubleLiteral1293 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ProductOperation__Alternatives_in_ruleProductOperation1330 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__TermOperation__Alternatives_in_ruleTermOperation1366 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__CompareOperation__Alternatives_in_ruleCompareOperation1402 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__BooleanOperation__Alternatives_in_ruleBooleanOperation1438 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_STRING_in_rule__EString__Alternatives1473 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__EString__Alternatives1490 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_11_in_rule__EBoolean__Alternatives1523 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_12_in_rule__EBoolean__Alternatives1543 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__UnaryBooleanExpression__Group_0__0_in_rule__UnaryBooleanExpression__Alternatives1577 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleComparison_in_rule__UnaryBooleanExpression__Alternatives1595 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleLiteral_in_rule__Atom__Alternatives1627 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Atom__Group_1__0_in_rule__Atom__Alternatives1644 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleFunction_in_rule__Atom__Alternatives1662 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleNumberLiteral_in_rule__Literal__Alternatives1694 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleBooleanLiteral_in_rule__Literal__Alternatives1711 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleFormalParameter_in_rule__Literal__Alternatives1728 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleIntLiteral_in_rule__NumberLiteral__Alternatives1760 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDoubleLiteral_in_rule__NumberLiteral__Alternatives1777 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__ProductOperation__Alternatives1810 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_14_in_rule__ProductOperation__Alternatives1831 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_15_in_rule__ProductOperation__Alternatives1852 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_16_in_rule__TermOperation__Alternatives1888 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__TermOperation__Alternatives1909 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_18_in_rule__CompareOperation__Alternatives1945 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_19_in_rule__CompareOperation__Alternatives1966 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_20_in_rule__CompareOperation__Alternatives1987 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_21_in_rule__CompareOperation__Alternatives2008 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_22_in_rule__CompareOperation__Alternatives2029 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__CompareOperation__Alternatives2050 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_24_in_rule__BooleanOperation__Alternatives2086 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_25_in_rule__BooleanOperation__Alternatives2107 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_26_in_rule__BooleanOperation__Alternatives2128 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Double__Group__0__Impl_in_rule__Double__Group__02161 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_rule__Double__Group__1_in_rule__Double__Group__02164 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__Double__Group__0__Impl2193 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Double__Group__1__Impl_in_rule__Double__Group__12226 = new BitSet(new long[]{0x0000000008000000L});
+    public static final BitSet FOLLOW_rule__Double__Group__2_in_rule__Double__Group__12229 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_rule__Double__Group__1__Impl2256 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Double__Group__2__Impl_in_rule__Double__Group__22285 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_rule__Double__Group__3_in_rule__Double__Group__22288 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_27_in_rule__Double__Group__2__Impl2316 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Double__Group__3__Impl_in_rule__Double__Group__32347 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_rule__Double__Group__3__Impl2374 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Integer__Group__0__Impl_in_rule__Integer__Group__02411 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_rule__Integer__Group__1_in_rule__Integer__Group__02414 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__Integer__Group__0__Impl2443 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Integer__Group__1__Impl_in_rule__Integer__Group__12476 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_rule__Integer__Group__1__Impl2503 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__IfElseExpression__Group__0__Impl_in_rule__IfElseExpression__Group__02536 = new BitSet(new long[]{0x0000000010000000L});
+    public static final BitSet FOLLOW_rule__IfElseExpression__Group__1_in_rule__IfElseExpression__Group__02539 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleBinaryBooleanExpression_in_rule__IfElseExpression__Group__0__Impl2566 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__IfElseExpression__Group__1__Impl_in_rule__IfElseExpression__Group__12595 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__IfElseExpression__Group_1__0_in_rule__IfElseExpression__Group__1__Impl2622 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__IfElseExpression__Group_1__0__Impl_in_rule__IfElseExpression__Group_1__02657 = new BitSet(new long[]{0x0000000010000000L});
+    public static final BitSet FOLLOW_rule__IfElseExpression__Group_1__1_in_rule__IfElseExpression__Group_1__02660 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__IfElseExpression__Group_1__1__Impl_in_rule__IfElseExpression__Group_1__12718 = new BitSet(new long[]{0x0000000140021870L});
+    public static final BitSet FOLLOW_rule__IfElseExpression__Group_1__2_in_rule__IfElseExpression__Group_1__12721 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_rule__IfElseExpression__Group_1__1__Impl2749 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__IfElseExpression__Group_1__2__Impl_in_rule__IfElseExpression__Group_1__22780 = new BitSet(new long[]{0x0000000020000000L});
+    public static final BitSet FOLLOW_rule__IfElseExpression__Group_1__3_in_rule__IfElseExpression__Group_1__22783 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__IfElseExpression__TrueExpAssignment_1_2_in_rule__IfElseExpression__Group_1__2__Impl2810 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__IfElseExpression__Group_1__3__Impl_in_rule__IfElseExpression__Group_1__32840 = new BitSet(new long[]{0x0000000140021870L});
+    public static final BitSet FOLLOW_rule__IfElseExpression__Group_1__4_in_rule__IfElseExpression__Group_1__32843 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_29_in_rule__IfElseExpression__Group_1__3__Impl2871 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__IfElseExpression__Group_1__4__Impl_in_rule__IfElseExpression__Group_1__42902 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__IfElseExpression__FalseExpAssignment_1_4_in_rule__IfElseExpression__Group_1__4__Impl2929 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__BinaryBooleanExpression__Group__0__Impl_in_rule__BinaryBooleanExpression__Group__02969 = new BitSet(new long[]{0x0000000007000000L});
+    public static final BitSet FOLLOW_rule__BinaryBooleanExpression__Group__1_in_rule__BinaryBooleanExpression__Group__02972 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleUnaryBooleanExpression_in_rule__BinaryBooleanExpression__Group__0__Impl2999 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__BinaryBooleanExpression__Group__1__Impl_in_rule__BinaryBooleanExpression__Group__13028 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__BinaryBooleanExpression__Group_1__0_in_rule__BinaryBooleanExpression__Group__1__Impl3055 = new BitSet(new long[]{0x0000000007000002L});
+    public static final BitSet FOLLOW_rule__BinaryBooleanExpression__Group_1__0__Impl_in_rule__BinaryBooleanExpression__Group_1__03090 = new BitSet(new long[]{0x0000000007000000L});
+    public static final BitSet FOLLOW_rule__BinaryBooleanExpression__Group_1__1_in_rule__BinaryBooleanExpression__Group_1__03093 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__BinaryBooleanExpression__Group_1__1__Impl_in_rule__BinaryBooleanExpression__Group_1__13151 = new BitSet(new long[]{0x0000000140021870L});
+    public static final BitSet FOLLOW_rule__BinaryBooleanExpression__Group_1__2_in_rule__BinaryBooleanExpression__Group_1__13154 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__BinaryBooleanExpression__OperationAssignment_1_1_in_rule__BinaryBooleanExpression__Group_1__1__Impl3181 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__BinaryBooleanExpression__Group_1__2__Impl_in_rule__BinaryBooleanExpression__Group_1__23211 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__BinaryBooleanExpression__RightAssignment_1_2_in_rule__BinaryBooleanExpression__Group_1__2__Impl3238 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__UnaryBooleanExpression__Group_0__0__Impl_in_rule__UnaryBooleanExpression__Group_0__03274 = new BitSet(new long[]{0x0000000140021870L});
+    public static final BitSet FOLLOW_rule__UnaryBooleanExpression__Group_0__1_in_rule__UnaryBooleanExpression__Group_0__03277 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_30_in_rule__UnaryBooleanExpression__Group_0__0__Impl3305 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__UnaryBooleanExpression__Group_0__1__Impl_in_rule__UnaryBooleanExpression__Group_0__13336 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_rule__UnaryBooleanExpression__Group_0__2_in_rule__UnaryBooleanExpression__Group_0__13339 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleComparison_in_rule__UnaryBooleanExpression__Group_0__1__Impl3366 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__UnaryBooleanExpression__Group_0__2__Impl_in_rule__UnaryBooleanExpression__Group_0__23395 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Comparison__Group__0__Impl_in_rule__Comparison__Group__03459 = new BitSet(new long[]{0x0000000000FC0000L});
+    public static final BitSet FOLLOW_rule__Comparison__Group__1_in_rule__Comparison__Group__03462 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleTerm_in_rule__Comparison__Group__0__Impl3489 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Comparison__Group__1__Impl_in_rule__Comparison__Group__13518 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Comparison__Group_1__0_in_rule__Comparison__Group__1__Impl3545 = new BitSet(new long[]{0x0000000000FC0002L});
+    public static final BitSet FOLLOW_rule__Comparison__Group_1__0__Impl_in_rule__Comparison__Group_1__03580 = new BitSet(new long[]{0x0000000000FC0000L});
+    public static final BitSet FOLLOW_rule__Comparison__Group_1__1_in_rule__Comparison__Group_1__03583 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Comparison__Group_1__1__Impl_in_rule__Comparison__Group_1__13641 = new BitSet(new long[]{0x0000000140021870L});
+    public static final BitSet FOLLOW_rule__Comparison__Group_1__2_in_rule__Comparison__Group_1__13644 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Comparison__OperationAssignment_1_1_in_rule__Comparison__Group_1__1__Impl3671 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Comparison__Group_1__2__Impl_in_rule__Comparison__Group_1__23701 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Comparison__RightAssignment_1_2_in_rule__Comparison__Group_1__2__Impl3728 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Term__Group__0__Impl_in_rule__Term__Group__03764 = new BitSet(new long[]{0x0000000000030000L});
+    public static final BitSet FOLLOW_rule__Term__Group__1_in_rule__Term__Group__03767 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleProduct_in_rule__Term__Group__0__Impl3794 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Term__Group__1__Impl_in_rule__Term__Group__13823 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Term__Group_1__0_in_rule__Term__Group__1__Impl3850 = new BitSet(new long[]{0x0000000000030002L});
+    public static final BitSet FOLLOW_rule__Term__Group_1__0__Impl_in_rule__Term__Group_1__03885 = new BitSet(new long[]{0x0000000000030000L});
+    public static final BitSet FOLLOW_rule__Term__Group_1__1_in_rule__Term__Group_1__03888 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Term__Group_1__1__Impl_in_rule__Term__Group_1__13946 = new BitSet(new long[]{0x0000000140021870L});
+    public static final BitSet FOLLOW_rule__Term__Group_1__2_in_rule__Term__Group_1__13949 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Term__OperationAssignment_1_1_in_rule__Term__Group_1__1__Impl3976 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Term__Group_1__2__Impl_in_rule__Term__Group_1__24006 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Term__RightAssignment_1_2_in_rule__Term__Group_1__2__Impl4033 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Product__Group__0__Impl_in_rule__Product__Group__04069 = new BitSet(new long[]{0x000000000000E000L});
+    public static final BitSet FOLLOW_rule__Product__Group__1_in_rule__Product__Group__04072 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulePower_in_rule__Product__Group__0__Impl4099 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Product__Group__1__Impl_in_rule__Product__Group__14128 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Product__Group_1__0_in_rule__Product__Group__1__Impl4155 = new BitSet(new long[]{0x000000000000E002L});
+    public static final BitSet FOLLOW_rule__Product__Group_1__0__Impl_in_rule__Product__Group_1__04190 = new BitSet(new long[]{0x000000000000E000L});
+    public static final BitSet FOLLOW_rule__Product__Group_1__1_in_rule__Product__Group_1__04193 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Product__Group_1__1__Impl_in_rule__Product__Group_1__14251 = new BitSet(new long[]{0x0000000140021870L});
+    public static final BitSet FOLLOW_rule__Product__Group_1__2_in_rule__Product__Group_1__14254 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Product__OperationAssignment_1_1_in_rule__Product__Group_1__1__Impl4281 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Product__Group_1__2__Impl_in_rule__Product__Group_1__24311 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Product__RightAssignment_1_2_in_rule__Product__Group_1__2__Impl4338 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Power__Group__0__Impl_in_rule__Power__Group__04374 = new BitSet(new long[]{0x0000000080000000L});
+    public static final BitSet FOLLOW_rule__Power__Group__1_in_rule__Power__Group__04377 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleAtom_in_rule__Power__Group__0__Impl4404 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Power__Group__1__Impl_in_rule__Power__Group__14433 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Power__Group_1__0_in_rule__Power__Group__1__Impl4460 = new BitSet(new long[]{0x0000000080000002L});
+    public static final BitSet FOLLOW_rule__Power__Group_1__0__Impl_in_rule__Power__Group_1__04495 = new BitSet(new long[]{0x0000000080000000L});
+    public static final BitSet FOLLOW_rule__Power__Group_1__1_in_rule__Power__Group_1__04498 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Power__Group_1__1__Impl_in_rule__Power__Group_1__14556 = new BitSet(new long[]{0x0000000140021870L});
+    public static final BitSet FOLLOW_rule__Power__Group_1__2_in_rule__Power__Group_1__14559 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_31_in_rule__Power__Group_1__1__Impl4587 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Power__Group_1__2__Impl_in_rule__Power__Group_1__24618 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Power__ExponentAssignment_1_2_in_rule__Power__Group_1__2__Impl4645 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Atom__Group_1__0__Impl_in_rule__Atom__Group_1__04681 = new BitSet(new long[]{0x0000000140021870L});
+    public static final BitSet FOLLOW_rule__Atom__Group_1__1_in_rule__Atom__Group_1__04684 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_32_in_rule__Atom__Group_1__0__Impl4712 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Atom__Group_1__1__Impl_in_rule__Atom__Group_1__14743 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_rule__Atom__Group_1__2_in_rule__Atom__Group_1__14746 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRootExpression_in_rule__Atom__Group_1__1__Impl4773 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Atom__Group_1__2__Impl_in_rule__Atom__Group_1__24802 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_33_in_rule__Atom__Group_1__2__Impl4830 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Function__Group__0__Impl_in_rule__Function__Group__04867 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_rule__Function__Group__1_in_rule__Function__Group__04870 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Function__NameAssignment_0_in_rule__Function__Group__0__Impl4897 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Function__Group__1__Impl_in_rule__Function__Group__14927 = new BitSet(new long[]{0x0000000340021870L});
+    public static final BitSet FOLLOW_rule__Function__Group__2_in_rule__Function__Group__14930 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_32_in_rule__Function__Group__1__Impl4958 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Function__Group__2__Impl_in_rule__Function__Group__24989 = new BitSet(new long[]{0x0000000340021870L});
+    public static final BitSet FOLLOW_rule__Function__Group__3_in_rule__Function__Group__24992 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Function__Group_2__0_in_rule__Function__Group__2__Impl5019 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Function__Group__3__Impl_in_rule__Function__Group__35050 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_33_in_rule__Function__Group__3__Impl5078 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Function__Group_2__0__Impl_in_rule__Function__Group_2__05117 = new BitSet(new long[]{0x0000000400000000L});
+    public static final BitSet FOLLOW_rule__Function__Group_2__1_in_rule__Function__Group_2__05120 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Function__ParametersAssignment_2_0_in_rule__Function__Group_2__0__Impl5147 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Function__Group_2__1__Impl_in_rule__Function__Group_2__15177 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Function__Group_2_1__0_in_rule__Function__Group_2__1__Impl5204 = new BitSet(new long[]{0x0000000400000002L});
+    public static final BitSet FOLLOW_rule__Function__Group_2_1__0__Impl_in_rule__Function__Group_2_1__05239 = new BitSet(new long[]{0x0000000140021870L});
+    public static final BitSet FOLLOW_rule__Function__Group_2_1__1_in_rule__Function__Group_2_1__05242 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_34_in_rule__Function__Group_2_1__0__Impl5270 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Function__Group_2_1__1__Impl_in_rule__Function__Group_2_1__15301 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Function__ParametersAssignment_2_1_1_in_rule__Function__Group_2_1__1__Impl5328 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleIfElseExpression_in_rule__Model__TermsAssignment5367 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleIfElseExpression_in_rule__IfElseExpression__TrueExpAssignment_1_25398 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleIfElseExpression_in_rule__IfElseExpression__FalseExpAssignment_1_45429 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleBooleanOperation_in_rule__BinaryBooleanExpression__OperationAssignment_1_15460 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleUnaryBooleanExpression_in_rule__BinaryBooleanExpression__RightAssignment_1_25491 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleCompareOperation_in_rule__Comparison__OperationAssignment_1_15522 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleTerm_in_rule__Comparison__RightAssignment_1_25553 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleTermOperation_in_rule__Term__OperationAssignment_1_15584 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleProduct_in_rule__Term__RightAssignment_1_25615 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleProductOperation_in_rule__Product__OperationAssignment_1_15646 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulePower_in_rule__Product__RightAssignment_1_25677 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleAtom_in_rule__Power__ExponentAssignment_1_25708 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__Function__NameAssignment_05739 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRootExpression_in_rule__Function__ParametersAssignment_2_05770 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRootExpression_in_rule__Function__ParametersAssignment_2_1_15801 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleEString_in_rule__FormalParameter__ValueAssignment5832 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleEBoolean_in_rule__BooleanLiteral__ValueAssignment5863 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleInteger_in_rule__IntLiteral__ValueAssignment5894 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDouble_in_rule__DoubleLiteral__ValueAssignment5925 = new BitSet(new long[]{0x0000000000000002L});
+
 }
\ No newline at end of file
diff --git a/org.xtext.example.mydsl/.antlr-generator-3.2.0.jar b/org.xtext.example.mydsl/.antlr-generator-3.2.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..42434924055b70ff9df664593fe7242968e772c8
Binary files /dev/null and b/org.xtext.example.mydsl/.antlr-generator-3.2.0.jar differ
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/MyDsl.ecore b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/MyDsl.ecore
index 14189b96f155eb8691664dab024e4ae3ccac8082..243bab2e91456c18ef36c2f13b2316805608ec04 100644
--- a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/MyDsl.ecore
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/MyDsl.ecore
@@ -1,35 +1,94 @@
-<?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="myDsl" nsURI="http://www.xtext.org/example/mydsl/MyDsl" nsPrefix="myDsl">
-  <eClassifiers xsi:type="ecore:EClass" name="Model">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="terms" upperBound="-1"
-        eType="#//Expression" containment="true"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Expression">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="termOperations" eType="#//OperationsType"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EEnum" name="OperationsType">
-    <eLiterals name="ADD" literal="+"/>
-    <eLiterals name="SUB" value="1" literal="-"/>
-    <eLiterals name="MULT" value="2" literal="*"/>
-    <eLiterals name="DIV" value="3" literal="/"/>
-    <eLiterals name="MOD" value="4" literal="%"/>
-    <eLiterals name="GREATER" value="5" literal=">"/>
-    <eLiterals name="LESS" value="6" literal="&lt;"/>
-    <eLiterals name="EQUALS" value="7" literal="="/>
-    <eLiterals name="NOTEQUAL" value="8" literal="!="/>
-    <eLiterals name="LESSEQUAL" value="9" literal="&lt;="/>
-    <eLiterals name="GREATEREQUAL" value="10" literal=">="/>
-    <eLiterals name="AND" value="11" literal="AND"/>
-    <eLiterals name="OR" value="12" literal="OR"/>
-    <eLiterals name="XOR" value="13" literal="XOR"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Term" eSuperTypes="#//Expression">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Expression"
-        containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="Operations" eType="#//Expression"
-        containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Expression"
-        containment="true"/>
-  </eClassifiers>
-</ecore:EPackage>
+<?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="myDsl" nsURI="http://www.xtext.org/example/mydsl/MyDsl" nsPrefix="myDsl">
+  <eClassifiers xsi:type="ecore:EClass" name="Model">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="terms" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="ProductOperation">
+    <eLiterals name="MULT" literal="*"/>
+    <eLiterals name="DIV" value="1" literal="/"/>
+    <eLiterals name="MOD" value="2" literal="%"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="TermOperation">
+    <eLiterals name="ADD" literal="+"/>
+    <eLiterals name="SUB" value="1" literal="-"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="CompareOperation">
+    <eLiterals name="GREATER" literal=">"/>
+    <eLiterals name="LESS" value="1" literal="&lt;"/>
+    <eLiterals name="EQUALS" value="2" literal="="/>
+    <eLiterals name="NOTEQUAL" value="3" literal="!="/>
+    <eLiterals name="LESSEQUAL" value="4" literal="&lt;="/>
+    <eLiterals name="GREATEREQUAL" value="5" literal=">="/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="BooleanOperation">
+    <eLiterals name="AND" literal="AND"/>
+    <eLiterals name="OR" value="1" literal="OR"/>
+    <eLiterals name="XOR" value="2" literal="XOR"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Expression"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Function" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="parameters" upperBound="-1"
+        eType="#//Expression" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FormalParameter" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="BooleanLiteral" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="IntLiteral" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DoubleLiteral" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigDecimal"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="IfElseExpression" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="condition" eType="#//Expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="trueExp" eType="#//Expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="falseExp" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="BinaryBooleanExpression" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="operation" eType="#//BooleanOperation"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="UnaryBooleanExpression" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="inner" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Comparison" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="operation" eType="#//CompareOperation"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Term" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="operation" eType="#//TermOperation"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Product" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="operation" eType="#//ProductOperation"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Power" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="base" eType="#//Expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="exponent" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/MyDsl.genmodel b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/MyDsl.genmodel
index f7f6bc4c0388c1ee1b95808a9041a8d2eefa7d8b..7951d8d5bc346afdc1706df9e367ca2bb1167d8c 100644
--- a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/MyDsl.genmodel
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/MyDsl.genmodel
@@ -1,38 +1,85 @@
-<?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.xtext.example.mydsl/src-gen" editDirectory="/org.xtext.example.mydsl.edit/src"
-    editorDirectory="/org.xtext.example.mydsl.editor/src" modelPluginID="org.xtext.example.mydsl"
-    forceOverwrite="true" modelName="MyDsl" updateClasspath="false" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
-    complianceLevel="5.0" copyrightFields="false" editPluginID="org.xtext.example.mydsl.edit"
-    editorPluginID="org.xtext.example.mydsl.editor" runtimeVersion="2.8">
-  <genPackages prefix="MyDsl" basePackage="org.xtext.example.mydsl" disposableProviderFactory="true"
-      ecorePackage="MyDsl.ecore#/">
-    <genEnums typeSafeEnumCompatible="false" ecoreEnum="MyDsl.ecore#//OperationsType">
-      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//OperationsType/ADD"/>
-      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//OperationsType/SUB"/>
-      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//OperationsType/MULT"/>
-      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//OperationsType/DIV"/>
-      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//OperationsType/MOD"/>
-      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//OperationsType/GREATER"/>
-      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//OperationsType/LESS"/>
-      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//OperationsType/EQUALS"/>
-      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//OperationsType/NOTEQUAL"/>
-      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//OperationsType/LESSEQUAL"/>
-      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//OperationsType/GREATEREQUAL"/>
-      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//OperationsType/AND"/>
-      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//OperationsType/OR"/>
-      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//OperationsType/XOR"/>
-    </genEnums>
-    <genClasses ecoreClass="MyDsl.ecore#//Model">
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MyDsl.ecore#//Model/terms"/>
-    </genClasses>
-    <genClasses ecoreClass="MyDsl.ecore#//Expression">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MyDsl.ecore#//Expression/termOperations"/>
-    </genClasses>
-    <genClasses ecoreClass="MyDsl.ecore#//Term">
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MyDsl.ecore#//Term/left"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MyDsl.ecore#//Term/Operations"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MyDsl.ecore#//Term/right"/>
-    </genClasses>
-  </genPackages>
-</genmodel:GenModel>
+<?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.xtext.example.mydsl/src-gen" editDirectory="/org.xtext.example.mydsl.edit/src"
+    editorDirectory="/org.xtext.example.mydsl.editor/src" modelPluginID="org.xtext.example.mydsl"
+    forceOverwrite="true" modelName="MyDsl" updateClasspath="false" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
+    complianceLevel="5.0" copyrightFields="false" editPluginID="org.xtext.example.mydsl.edit"
+    editorPluginID="org.xtext.example.mydsl.editor" runtimeVersion="2.8">
+  <genPackages prefix="MyDsl" basePackage="org.xtext.example.mydsl" disposableProviderFactory="true"
+      ecorePackage="MyDsl.ecore#/">
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="MyDsl.ecore#//ProductOperation">
+      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//ProductOperation/MULT"/>
+      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//ProductOperation/DIV"/>
+      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//ProductOperation/MOD"/>
+    </genEnums>
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="MyDsl.ecore#//TermOperation">
+      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//TermOperation/ADD"/>
+      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//TermOperation/SUB"/>
+    </genEnums>
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="MyDsl.ecore#//CompareOperation">
+      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//CompareOperation/GREATER"/>
+      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//CompareOperation/LESS"/>
+      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//CompareOperation/EQUALS"/>
+      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//CompareOperation/NOTEQUAL"/>
+      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//CompareOperation/LESSEQUAL"/>
+      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//CompareOperation/GREATEREQUAL"/>
+    </genEnums>
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="MyDsl.ecore#//BooleanOperation">
+      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//BooleanOperation/AND"/>
+      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//BooleanOperation/OR"/>
+      <genEnumLiterals ecoreEnumLiteral="MyDsl.ecore#//BooleanOperation/XOR"/>
+    </genEnums>
+    <genClasses ecoreClass="MyDsl.ecore#//Model">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MyDsl.ecore#//Model/terms"/>
+    </genClasses>
+    <genClasses ecoreClass="MyDsl.ecore#//Expression"/>
+    <genClasses ecoreClass="MyDsl.ecore#//Function">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MyDsl.ecore#//Function/name"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MyDsl.ecore#//Function/parameters"/>
+    </genClasses>
+    <genClasses ecoreClass="MyDsl.ecore#//FormalParameter">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MyDsl.ecore#//FormalParameter/value"/>
+    </genClasses>
+    <genClasses ecoreClass="MyDsl.ecore#//BooleanLiteral">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MyDsl.ecore#//BooleanLiteral/value"/>
+    </genClasses>
+    <genClasses ecoreClass="MyDsl.ecore#//IntLiteral">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MyDsl.ecore#//IntLiteral/value"/>
+    </genClasses>
+    <genClasses ecoreClass="MyDsl.ecore#//DoubleLiteral">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MyDsl.ecore#//DoubleLiteral/value"/>
+    </genClasses>
+    <genClasses ecoreClass="MyDsl.ecore#//IfElseExpression">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MyDsl.ecore#//IfElseExpression/condition"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MyDsl.ecore#//IfElseExpression/trueExp"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MyDsl.ecore#//IfElseExpression/falseExp"/>
+    </genClasses>
+    <genClasses ecoreClass="MyDsl.ecore#//BinaryBooleanExpression">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MyDsl.ecore#//BinaryBooleanExpression/left"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MyDsl.ecore#//BinaryBooleanExpression/operation"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MyDsl.ecore#//BinaryBooleanExpression/right"/>
+    </genClasses>
+    <genClasses ecoreClass="MyDsl.ecore#//UnaryBooleanExpression">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MyDsl.ecore#//UnaryBooleanExpression/inner"/>
+    </genClasses>
+    <genClasses ecoreClass="MyDsl.ecore#//Comparison">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MyDsl.ecore#//Comparison/left"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MyDsl.ecore#//Comparison/operation"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MyDsl.ecore#//Comparison/right"/>
+    </genClasses>
+    <genClasses ecoreClass="MyDsl.ecore#//Term">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MyDsl.ecore#//Term/left"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MyDsl.ecore#//Term/operation"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MyDsl.ecore#//Term/right"/>
+    </genClasses>
+    <genClasses ecoreClass="MyDsl.ecore#//Product">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MyDsl.ecore#//Product/left"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MyDsl.ecore#//Product/operation"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MyDsl.ecore#//Product/right"/>
+    </genClasses>
+    <genClasses ecoreClass="MyDsl.ecore#//Power">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MyDsl.ecore#//Power/base"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MyDsl.ecore#//Power/exponent"/>
+    </genClasses>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/MyDsl.xmi b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/MyDsl.xmi
index d9710a7ca467c6dcb9181651986ca5da3acf0667..260fef6fa54234347b3812d40edcaaedc3f93f23 100644
--- a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/MyDsl.xmi
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/MyDsl.xmi
@@ -1,326 +1,531 @@
-<?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.xtext.example.mydsl.MyDsl" usedGrammars="/1">
-    <metamodelDeclarations xsi:type="xtext:ReferencedMetamodel" alias="ecore">
-      <ePackage href="http://www.eclipse.org/emf/2002/Ecore#/"/>
-    </metamodelDeclarations>
-    <metamodelDeclarations xsi:type="xtext:GeneratedMetamodel" name="myDsl">
-      <ePackage href="http://www.xtext.org/example/mydsl/MyDsl#/"/>
-    </metamodelDeclarations>
-    <rules xsi:type="xtext:ParserRule" name="Model">
-      <type metamodel="/0/@metamodelDeclarations.1">
-        <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Model"/>
-      </type>
-      <alternatives xsi:type="xtext:Assignment" feature="terms" operator="+=">
-        <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.1"/>
-      </alternatives>
-    </rules>
-    <rules xsi:type="xtext:ParserRule" name="Term">
-      <type metamodel="/0/@metamodelDeclarations.1">
-        <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Expression"/>
-      </type>
-      <alternatives xsi:type="xtext:Group">
-        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
-        <elements xsi:type="xtext:Group" cardinality="*">
-          <elements xsi:type="xtext:Action" feature="left" operator="=">
-            <type metamodel="/0/@metamodelDeclarations.1">
-              <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Term"/>
-            </type>
-          </elements>
-          <elements xsi:type="xtext:Assignment" feature="Operations" operator="=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.7"/>
-          </elements>
-          <elements xsi:type="xtext:Assignment" feature="right" operator="=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
-          </elements>
-        </elements>
-      </alternatives>
-    </rules>
-    <rules xsi:type="xtext:ParserRule" name="Types">
-      <type metamodel="/0/@metamodelDeclarations.1">
-        <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Expression"/>
-      </type>
-      <alternatives xsi:type="xtext:Alternatives">
-        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
-        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.4"/>
-        <elements xsi:type="xtext:Group">
-          <elements xsi:type="xtext:Keyword" value="("/>
-          <elements xsi:type="xtext:RuleCall" rule="/0/@rules.1"/>
-          <elements xsi:type="xtext:Keyword" value=")"/>
-        </elements>
-      </alternatives>
-    </rules>
-    <rules xsi:type="xtext:ParserRule" name="Arithmetics">
-      <type metamodel="/0/@metamodelDeclarations.1">
-        <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Expression"/>
-      </type>
-      <alternatives xsi:type="xtext:Group">
-        <elements xsi:type="xtext:Action">
-          <type metamodel="/0/@metamodelDeclarations.1">
-            <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Expression"/>
-          </type>
-        </elements>
-        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
-      </alternatives>
-    </rules>
-    <rules xsi:type="xtext:ParserRule" name="Strings">
-      <type metamodel="/0/@metamodelDeclarations.1">
-        <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Expression"/>
-      </type>
-      <alternatives xsi:type="xtext:Group">
-        <elements xsi:type="xtext:Action">
-          <type metamodel="/0/@metamodelDeclarations.1">
-            <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Expression"/>
-          </type>
-        </elements>
-        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.6"/>
-      </alternatives>
-    </rules>
-    <rules xsi:type="xtext:ParserRule" name="DECIMAL">
-      <type metamodel="/0/@metamodelDeclarations.0">
-        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBigDecimal"/>
-      </type>
-      <alternatives xsi:type="xtext:Group">
-        <elements xsi:type="xtext:Keyword" cardinality="?" value="-"/>
-        <elements xsi:type="xtext:RuleCall" rule="/1/@rules.1"/>
-        <elements xsi:type="xtext:Group" cardinality="?">
-          <elements xsi:type="xtext:Keyword" value="."/>
-          <elements xsi:type="xtext:RuleCall" rule="/1/@rules.1"/>
-        </elements>
-      </alternatives>
-    </rules>
-    <rules xsi:type="xtext:ParserRule" name="E_STRING">
-      <type metamodel="/0/@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:RuleCall" rule="/1/@rules.2"/>
-        <elements xsi:type="xtext:RuleCall" rule="/1/@rules.0"/>
-      </alternatives>
-    </rules>
-    <rules xsi:type="xtext:ParserRule" name="Operations">
-      <type metamodel="/0/@metamodelDeclarations.1">
-        <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Expression"/>
-      </type>
-      <alternatives xsi:type="xtext:Assignment" feature="termOperations" operator="=">
-        <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
-      </alternatives>
-    </rules>
-    <rules xsi:type="xtext:EnumRule" name="OperationsType">
-      <type metamodel="/0/@metamodelDeclarations.1">
-        <classifier xsi:type="ecore:EEnum" href="http://www.xtext.org/example/mydsl/MyDsl#//OperationsType"/>
-      </type>
-      <alternatives xsi:type="xtext:Alternatives">
-        <elements xsi:type="xtext:EnumLiteralDeclaration">
-          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//OperationsType/ADD"/>
-          <literal value="+"/>
-        </elements>
-        <elements xsi:type="xtext:EnumLiteralDeclaration">
-          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//OperationsType/SUB"/>
-          <literal value="-"/>
-        </elements>
-        <elements xsi:type="xtext:EnumLiteralDeclaration">
-          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//OperationsType/MULT"/>
-          <literal value="*"/>
-        </elements>
-        <elements xsi:type="xtext:EnumLiteralDeclaration">
-          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//OperationsType/DIV"/>
-          <literal value="/"/>
-        </elements>
-        <elements xsi:type="xtext:EnumLiteralDeclaration">
-          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//OperationsType/MOD"/>
-          <literal value="%"/>
-        </elements>
-        <elements xsi:type="xtext:EnumLiteralDeclaration">
-          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//OperationsType/GREATER"/>
-          <literal value=">"/>
-        </elements>
-        <elements xsi:type="xtext:EnumLiteralDeclaration">
-          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//OperationsType/LESS"/>
-          <literal value="&lt;"/>
-        </elements>
-        <elements xsi:type="xtext:EnumLiteralDeclaration">
-          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//OperationsType/EQUALS"/>
-          <literal value="="/>
-        </elements>
-        <elements xsi:type="xtext:EnumLiteralDeclaration">
-          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//OperationsType/NOTEQUAL"/>
-          <literal value="!="/>
-        </elements>
-        <elements xsi:type="xtext:EnumLiteralDeclaration">
-          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//OperationsType/LESSEQUAL"/>
-          <literal value="&lt;="/>
-        </elements>
-        <elements xsi:type="xtext:EnumLiteralDeclaration">
-          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//OperationsType/GREATEREQUAL"/>
-          <literal value=">="/>
-        </elements>
-        <elements xsi:type="xtext:EnumLiteralDeclaration">
-          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//OperationsType/AND"/>
-          <literal value="AND"/>
-        </elements>
-        <elements xsi:type="xtext:EnumLiteralDeclaration">
-          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//OperationsType/OR"/>
-          <literal value="OR"/>
-        </elements>
-        <elements xsi:type="xtext:EnumLiteralDeclaration">
-          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//OperationsType/XOR"/>
-          <literal value="XOR"/>
-        </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>
+<?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.xtext.example.mydsl.MyDsl" usedGrammars="/1">
+    <metamodelDeclarations xsi:type="xtext:ReferencedMetamodel" alias="ecore">
+      <ePackage href="http://www.eclipse.org/emf/2002/Ecore#/"/>
+    </metamodelDeclarations>
+    <metamodelDeclarations xsi:type="xtext:GeneratedMetamodel" name="myDsl">
+      <ePackage href="http://www.xtext.org/example/mydsl/MyDsl#/"/>
+    </metamodelDeclarations>
+    <rules xsi:type="xtext:ParserRule" name="Model">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Model"/>
+      </type>
+      <alternatives xsi:type="xtext:Assignment" feature="terms" operator="=">
+        <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.10"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="Double">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBigDecimal"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" cardinality="?" value="-"/>
+        <elements xsi:type="xtext:RuleCall" rule="/1/@rules.1"/>
+        <elements xsi:type="xtext:Keyword" value="."/>
+        <elements xsi:type="xtext:RuleCall" rule="/1/@rules.1"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="Integer">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" cardinality="?" value="-"/>
+        <elements xsi:type="xtext:RuleCall" rule="/1/@rules.1"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="EString">
+      <type metamodel="/0/@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:RuleCall" rule="/1/@rules.2"/>
+        <elements xsi:type="xtext:RuleCall" rule="/1/@rules.0"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="EBoolean">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <elements xsi:type="xtext:Keyword" value="true"/>
+        <elements xsi:type="xtext:Keyword" value="false"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:EnumRule" name="ProductOperation">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EEnum" href="http://www.xtext.org/example/mydsl/MyDsl#//ProductOperation"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <elements xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//ProductOperation/MULT"/>
+          <literal value="*"/>
+        </elements>
+        <elements xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//ProductOperation/DIV"/>
+          <literal value="/"/>
+        </elements>
+        <elements xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//ProductOperation/MOD"/>
+          <literal value="%"/>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:EnumRule" name="TermOperation">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EEnum" href="http://www.xtext.org/example/mydsl/MyDsl#//TermOperation"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <elements xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//TermOperation/ADD"/>
+          <literal value="+"/>
+        </elements>
+        <elements xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//TermOperation/SUB"/>
+          <literal value="-"/>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:EnumRule" name="CompareOperation">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EEnum" href="http://www.xtext.org/example/mydsl/MyDsl#//CompareOperation"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <elements xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//CompareOperation/GREATER"/>
+          <literal value=">"/>
+        </elements>
+        <elements xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//CompareOperation/LESS"/>
+          <literal value="&lt;"/>
+        </elements>
+        <elements xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//CompareOperation/EQUALS"/>
+          <literal value="="/>
+        </elements>
+        <elements xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//CompareOperation/NOTEQUAL"/>
+          <literal value="!="/>
+        </elements>
+        <elements xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//CompareOperation/LESSEQUAL"/>
+          <literal value="&lt;="/>
+        </elements>
+        <elements xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//CompareOperation/GREATEREQUAL"/>
+          <literal value=">="/>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:EnumRule" name="BooleanOperation">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EEnum" href="http://www.xtext.org/example/mydsl/MyDsl#//BooleanOperation"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <elements xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//BooleanOperation/AND"/>
+          <literal value="AND"/>
+        </elements>
+        <elements xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//BooleanOperation/OR"/>
+          <literal value="OR"/>
+        </elements>
+        <elements xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.xtext.org/example/mydsl/MyDsl#//BooleanOperation/XOR"/>
+          <literal value="XOR"/>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="RootExpression">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Expression"/>
+      </type>
+      <alternatives xsi:type="xtext:RuleCall" rule="/0/@rules.10"/>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="IfElseExpression">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Expression"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.11"/>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Action" feature="condition" operator="=">
+            <type metamodel="/0/@metamodelDeclarations.1">
+              <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//IfElseExpression"/>
+            </type>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="?"/>
+          <elements xsi:type="xtext:Assignment" feature="trueExp" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.10"/>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value=":"/>
+          <elements xsi:type="xtext:Assignment" feature="falseExp" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.10"/>
+          </elements>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="BinaryBooleanExpression">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Expression"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.12"/>
+        <elements xsi:type="xtext:Group" cardinality="*">
+          <elements xsi:type="xtext:Action" feature="left" operator="=">
+            <type metamodel="/0/@metamodelDeclarations.1">
+              <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//BinaryBooleanExpression"/>
+            </type>
+          </elements>
+          <elements xsi:type="xtext:Assignment" feature="operation" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
+          </elements>
+          <elements xsi:type="xtext:Assignment" feature="right" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.12"/>
+          </elements>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="UnaryBooleanExpression">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Expression"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <elements xsi:type="xtext:Group">
+          <elements xsi:type="xtext:Keyword" value="NOT"/>
+          <elements xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+          <elements xsi:type="xtext:Action" feature="inner" operator="=">
+            <type metamodel="/0/@metamodelDeclarations.1">
+              <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//UnaryBooleanExpression"/>
+            </type>
+          </elements>
+        </elements>
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="Comparison">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Expression"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
+        <elements xsi:type="xtext:Group" cardinality="*">
+          <elements xsi:type="xtext:Action" feature="left" operator="=">
+            <type metamodel="/0/@metamodelDeclarations.1">
+              <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Comparison"/>
+            </type>
+          </elements>
+          <elements xsi:type="xtext:Assignment" feature="operation" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.7"/>
+          </elements>
+          <elements xsi:type="xtext:Assignment" feature="right" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
+          </elements>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="Term">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Expression"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.15"/>
+        <elements xsi:type="xtext:Group" cardinality="*">
+          <elements xsi:type="xtext:Action" feature="left" operator="=">
+            <type metamodel="/0/@metamodelDeclarations.1">
+              <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Term"/>
+            </type>
+          </elements>
+          <elements xsi:type="xtext:Assignment" feature="operation" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.6"/>
+          </elements>
+          <elements xsi:type="xtext:Assignment" feature="right" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.15"/>
+          </elements>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="Product">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Expression"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.16"/>
+        <elements xsi:type="xtext:Group" cardinality="*">
+          <elements xsi:type="xtext:Action" feature="left" operator="=">
+            <type metamodel="/0/@metamodelDeclarations.1">
+              <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Product"/>
+            </type>
+          </elements>
+          <elements xsi:type="xtext:Assignment" feature="operation" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
+          </elements>
+          <elements xsi:type="xtext:Assignment" feature="right" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.16"/>
+          </elements>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="Power">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Expression"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.17"/>
+        <elements xsi:type="xtext:Group" cardinality="*">
+          <elements xsi:type="xtext:Action" feature="base" operator="=">
+            <type metamodel="/0/@metamodelDeclarations.1">
+              <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Power"/>
+            </type>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="^"/>
+          <elements xsi:type="xtext:Assignment" feature="exponent" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.17"/>
+          </elements>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="Atom">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Expression"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.19"/>
+        <elements xsi:type="xtext:Group">
+          <elements xsi:type="xtext:Keyword" value="("/>
+          <elements xsi:type="xtext:RuleCall" rule="/0/@rules.9"/>
+          <elements xsi:type="xtext:Keyword" value=")"/>
+        </elements>
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="Function">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Function"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.0"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="("/>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Assignment" feature="parameters" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.9"/>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="parameters" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.9"/>
+            </elements>
+          </elements>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value=")"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="Literal">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Expression"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.22"/>
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.21"/>
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.20"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="FormalParameter">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//FormalParameter"/>
+      </type>
+      <alternatives xsi:type="xtext:Assignment" feature="value" operator="=">
+        <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="BooleanLiteral">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//BooleanLiteral"/>
+      </type>
+      <alternatives xsi:type="xtext:Assignment" feature="value" operator="=">
+        <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.4"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="NumberLiteral">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//Expression"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.23"/>
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.24"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="IntLiteral">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//IntLiteral"/>
+      </type>
+      <alternatives xsi:type="xtext:Assignment" feature="value" operator="=">
+        <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="DoubleLiteral">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.xtext.org/example/mydsl/MyDsl#//DoubleLiteral"/>
+      </type>
+      <alternatives xsi:type="xtext:Assignment" feature="value" operator="=">
+        <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.1"/>
+      </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/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/BinaryBooleanExpression.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/BinaryBooleanExpression.java
new file mode 100644
index 0000000000000000000000000000000000000000..d680a7992dec6ce05ff0bb05c71b7feeb17fa5fc
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/BinaryBooleanExpression.java
@@ -0,0 +1,107 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Binary Boolean Expression</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.BinaryBooleanExpression#getLeft <em>Left</em>}</li>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.BinaryBooleanExpression#getOperation <em>Operation</em>}</li>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.BinaryBooleanExpression#getRight <em>Right</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getBinaryBooleanExpression()
+ * @model
+ * @generated
+ */
+public interface BinaryBooleanExpression extends Expression
+{
+  /**
+   * Returns the value of the '<em><b>Left</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Left</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Left</em>' containment reference.
+   * @see #setLeft(Expression)
+   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getBinaryBooleanExpression_Left()
+   * @model containment="true"
+   * @generated
+   */
+  Expression getLeft();
+
+  /**
+   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.BinaryBooleanExpression#getLeft <em>Left</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Left</em>' containment reference.
+   * @see #getLeft()
+   * @generated
+   */
+  void setLeft(Expression value);
+
+  /**
+   * Returns the value of the '<em><b>Operation</b></em>' attribute.
+   * The literals are from the enumeration {@link org.xtext.example.mydsl.myDsl.BooleanOperation}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Operation</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Operation</em>' attribute.
+   * @see org.xtext.example.mydsl.myDsl.BooleanOperation
+   * @see #setOperation(BooleanOperation)
+   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getBinaryBooleanExpression_Operation()
+   * @model
+   * @generated
+   */
+  BooleanOperation getOperation();
+
+  /**
+   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.BinaryBooleanExpression#getOperation <em>Operation</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Operation</em>' attribute.
+   * @see org.xtext.example.mydsl.myDsl.BooleanOperation
+   * @see #getOperation()
+   * @generated
+   */
+  void setOperation(BooleanOperation value);
+
+  /**
+   * Returns the value of the '<em><b>Right</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Right</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Right</em>' containment reference.
+   * @see #setRight(Expression)
+   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getBinaryBooleanExpression_Right()
+   * @model containment="true"
+   * @generated
+   */
+  Expression getRight();
+
+  /**
+   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.BinaryBooleanExpression#getRight <em>Right</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Right</em>' containment reference.
+   * @see #getRight()
+   * @generated
+   */
+  void setRight(Expression value);
+
+} // BinaryBooleanExpression
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/BooleanLiteral.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/BooleanLiteral.java
new file mode 100644
index 0000000000000000000000000000000000000000..5d6016cb077b8b29d37b175a7410ec4f7fd155bb
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/BooleanLiteral.java
@@ -0,0 +1,50 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Boolean Literal</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.BooleanLiteral#isValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getBooleanLiteral()
+ * @model
+ * @generated
+ */
+public interface BooleanLiteral extends Expression
+{
+  /**
+   * 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(boolean)
+   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getBooleanLiteral_Value()
+   * @model
+   * @generated
+   */
+  boolean isValue();
+
+  /**
+   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.BooleanLiteral#isValue <em>Value</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Value</em>' attribute.
+   * @see #isValue()
+   * @generated
+   */
+  void setValue(boolean value);
+
+} // BooleanLiteral
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/BooleanOperation.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/BooleanOperation.java
new file mode 100644
index 0000000000000000000000000000000000000000..58ce0cef6933b8e3fd841ca917c04bb6d813edb9
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/BooleanOperation.java
@@ -0,0 +1,250 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Boolean Operation</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getBooleanOperation()
+ * @model
+ * @generated
+ */
+public enum BooleanOperation implements Enumerator
+{
+  /**
+   * The '<em><b>AND</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #AND_VALUE
+   * @generated
+   * @ordered
+   */
+  AND(0, "AND", "AND"),
+
+  /**
+   * The '<em><b>OR</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #OR_VALUE
+   * @generated
+   * @ordered
+   */
+  OR(1, "OR", "OR"),
+
+  /**
+   * The '<em><b>XOR</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #XOR_VALUE
+   * @generated
+   * @ordered
+   */
+  XOR(2, "XOR", "XOR");
+
+  /**
+   * The '<em><b>AND</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>AND</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #AND
+   * @model
+   * @generated
+   * @ordered
+   */
+  public static final int AND_VALUE = 0;
+
+  /**
+   * The '<em><b>OR</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>OR</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #OR
+   * @model
+   * @generated
+   * @ordered
+   */
+  public static final int OR_VALUE = 1;
+
+  /**
+   * The '<em><b>XOR</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>XOR</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #XOR
+   * @model
+   * @generated
+   * @ordered
+   */
+  public static final int XOR_VALUE = 2;
+
+  /**
+   * An array of all the '<em><b>Boolean Operation</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private static final BooleanOperation[] VALUES_ARRAY =
+    new BooleanOperation[]
+    {
+      AND,
+      OR,
+      XOR,
+    };
+
+  /**
+   * A public read-only list of all the '<em><b>Boolean Operation</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static final List<BooleanOperation> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+  /**
+   * Returns the '<em><b>Boolean Operation</b></em>' literal with the specified literal value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static BooleanOperation get(String literal)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      BooleanOperation result = VALUES_ARRAY[i];
+      if (result.toString().equals(literal))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Boolean Operation</b></em>' literal with the specified name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static BooleanOperation getByName(String name)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      BooleanOperation result = VALUES_ARRAY[i];
+      if (result.getName().equals(name))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Boolean Operation</b></em>' literal with the specified integer value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static BooleanOperation get(int value)
+  {
+    switch (value)
+    {
+      case AND_VALUE: return AND;
+      case OR_VALUE: return OR;
+      case XOR_VALUE: return XOR;
+    }
+    return null;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final int value;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String name;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String literal;
+
+  /**
+   * Only this class can construct instances.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private BooleanOperation(int value, String name, String literal)
+  {
+    this.value = value;
+    this.name = name;
+    this.literal = literal;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public int getValue()
+  {
+    return value;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getLiteral()
+  {
+    return literal;
+  }
+
+  /**
+   * Returns the literal value of the enumerator, which is its string representation.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    return literal;
+  }
+  
+} //BooleanOperation
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/CompareOperation.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/CompareOperation.java
new file mode 100644
index 0000000000000000000000000000000000000000..1a3dac0c7c0155d9a5237e383370afb6c835a26c
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/CompareOperation.java
@@ -0,0 +1,331 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Compare Operation</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getCompareOperation()
+ * @model
+ * @generated
+ */
+public enum CompareOperation implements Enumerator
+{
+  /**
+   * The '<em><b>GREATER</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #GREATER_VALUE
+   * @generated
+   * @ordered
+   */
+  GREATER(0, "GREATER", ">"),
+
+  /**
+   * The '<em><b>LESS</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #LESS_VALUE
+   * @generated
+   * @ordered
+   */
+  LESS(1, "LESS", "<"),
+
+  /**
+   * The '<em><b>EQUALS</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #EQUALS_VALUE
+   * @generated
+   * @ordered
+   */
+  EQUALS(2, "EQUALS", "="),
+
+  /**
+   * The '<em><b>NOTEQUAL</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #NOTEQUAL_VALUE
+   * @generated
+   * @ordered
+   */
+  NOTEQUAL(3, "NOTEQUAL", "!="),
+
+  /**
+   * The '<em><b>LESSEQUAL</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #LESSEQUAL_VALUE
+   * @generated
+   * @ordered
+   */
+  LESSEQUAL(4, "LESSEQUAL", "<="),
+
+  /**
+   * The '<em><b>GREATEREQUAL</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #GREATEREQUAL_VALUE
+   * @generated
+   * @ordered
+   */
+  GREATEREQUAL(5, "GREATEREQUAL", ">=");
+
+  /**
+   * The '<em><b>GREATER</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>GREATER</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #GREATER
+   * @model literal=">"
+   * @generated
+   * @ordered
+   */
+  public static final int GREATER_VALUE = 0;
+
+  /**
+   * The '<em><b>LESS</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>LESS</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #LESS
+   * @model literal="<"
+   * @generated
+   * @ordered
+   */
+  public static final int LESS_VALUE = 1;
+
+  /**
+   * The '<em><b>EQUALS</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>EQUALS</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #EQUALS
+   * @model literal="="
+   * @generated
+   * @ordered
+   */
+  public static final int EQUALS_VALUE = 2;
+
+  /**
+   * The '<em><b>NOTEQUAL</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>NOTEQUAL</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #NOTEQUAL
+   * @model literal="!="
+   * @generated
+   * @ordered
+   */
+  public static final int NOTEQUAL_VALUE = 3;
+
+  /**
+   * The '<em><b>LESSEQUAL</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>LESSEQUAL</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #LESSEQUAL
+   * @model literal="<="
+   * @generated
+   * @ordered
+   */
+  public static final int LESSEQUAL_VALUE = 4;
+
+  /**
+   * The '<em><b>GREATEREQUAL</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>GREATEREQUAL</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #GREATEREQUAL
+   * @model literal=">="
+   * @generated
+   * @ordered
+   */
+  public static final int GREATEREQUAL_VALUE = 5;
+
+  /**
+   * An array of all the '<em><b>Compare Operation</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private static final CompareOperation[] VALUES_ARRAY =
+    new CompareOperation[]
+    {
+      GREATER,
+      LESS,
+      EQUALS,
+      NOTEQUAL,
+      LESSEQUAL,
+      GREATEREQUAL,
+    };
+
+  /**
+   * A public read-only list of all the '<em><b>Compare Operation</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static final List<CompareOperation> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+  /**
+   * Returns the '<em><b>Compare Operation</b></em>' literal with the specified literal value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static CompareOperation get(String literal)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      CompareOperation result = VALUES_ARRAY[i];
+      if (result.toString().equals(literal))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Compare Operation</b></em>' literal with the specified name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static CompareOperation getByName(String name)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      CompareOperation result = VALUES_ARRAY[i];
+      if (result.getName().equals(name))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Compare Operation</b></em>' literal with the specified integer value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static CompareOperation get(int value)
+  {
+    switch (value)
+    {
+      case GREATER_VALUE: return GREATER;
+      case LESS_VALUE: return LESS;
+      case EQUALS_VALUE: return EQUALS;
+      case NOTEQUAL_VALUE: return NOTEQUAL;
+      case LESSEQUAL_VALUE: return LESSEQUAL;
+      case GREATEREQUAL_VALUE: return GREATEREQUAL;
+    }
+    return null;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final int value;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String name;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String literal;
+
+  /**
+   * Only this class can construct instances.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private CompareOperation(int value, String name, String literal)
+  {
+    this.value = value;
+    this.name = name;
+    this.literal = literal;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public int getValue()
+  {
+    return value;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getLiteral()
+  {
+    return literal;
+  }
+
+  /**
+   * Returns the literal value of the enumerator, which is its string representation.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    return literal;
+  }
+  
+} //CompareOperation
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/Comparison.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/Comparison.java
new file mode 100644
index 0000000000000000000000000000000000000000..9fa671a9ba19ee65e5cf152a9e0cd11e35fa22cd
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/Comparison.java
@@ -0,0 +1,107 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Comparison</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.Comparison#getLeft <em>Left</em>}</li>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.Comparison#getOperation <em>Operation</em>}</li>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.Comparison#getRight <em>Right</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getComparison()
+ * @model
+ * @generated
+ */
+public interface Comparison extends Expression
+{
+  /**
+   * Returns the value of the '<em><b>Left</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Left</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Left</em>' containment reference.
+   * @see #setLeft(Expression)
+   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getComparison_Left()
+   * @model containment="true"
+   * @generated
+   */
+  Expression getLeft();
+
+  /**
+   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.Comparison#getLeft <em>Left</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Left</em>' containment reference.
+   * @see #getLeft()
+   * @generated
+   */
+  void setLeft(Expression value);
+
+  /**
+   * Returns the value of the '<em><b>Operation</b></em>' attribute.
+   * The literals are from the enumeration {@link org.xtext.example.mydsl.myDsl.CompareOperation}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Operation</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Operation</em>' attribute.
+   * @see org.xtext.example.mydsl.myDsl.CompareOperation
+   * @see #setOperation(CompareOperation)
+   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getComparison_Operation()
+   * @model
+   * @generated
+   */
+  CompareOperation getOperation();
+
+  /**
+   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.Comparison#getOperation <em>Operation</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Operation</em>' attribute.
+   * @see org.xtext.example.mydsl.myDsl.CompareOperation
+   * @see #getOperation()
+   * @generated
+   */
+  void setOperation(CompareOperation value);
+
+  /**
+   * Returns the value of the '<em><b>Right</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Right</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Right</em>' containment reference.
+   * @see #setRight(Expression)
+   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getComparison_Right()
+   * @model containment="true"
+   * @generated
+   */
+  Expression getRight();
+
+  /**
+   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.Comparison#getRight <em>Right</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Right</em>' containment reference.
+   * @see #getRight()
+   * @generated
+   */
+  void setRight(Expression value);
+
+} // Comparison
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/DoubleLiteral.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/DoubleLiteral.java
new file mode 100644
index 0000000000000000000000000000000000000000..9c430b6085ccde081fd4d32f866f47d7c0b95529
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/DoubleLiteral.java
@@ -0,0 +1,51 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl;
+
+import java.math.BigDecimal;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Double Literal</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.DoubleLiteral#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getDoubleLiteral()
+ * @model
+ * @generated
+ */
+public interface DoubleLiteral extends Expression
+{
+  /**
+   * 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(BigDecimal)
+   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getDoubleLiteral_Value()
+   * @model
+   * @generated
+   */
+  BigDecimal getValue();
+
+  /**
+   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.DoubleLiteral#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(BigDecimal value);
+
+} // DoubleLiteral
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/Expression.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/Expression.java
index 9e3fbac14fb894e1e059d258c68e159863bdbe51..1eed353bb5fddda7d828fb5facbf010b56badd47 100644
--- a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/Expression.java
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/Expression.java
@@ -1,54 +1,19 @@
-/**
- */
-package org.xtext.example.mydsl.myDsl;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Expression</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.xtext.example.mydsl.myDsl.Expression#getTermOperations <em>Term Operations</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getExpression()
- * @model
- * @generated
- */
-public interface Expression extends EObject
-{
-  /**
-   * Returns the value of the '<em><b>Term Operations</b></em>' attribute.
-   * The literals are from the enumeration {@link org.xtext.example.mydsl.myDsl.OperationsType}.
-   * <!-- begin-user-doc -->
-   * <p>
-   * If the meaning of the '<em>Term Operations</em>' attribute isn't clear,
-   * there really should be more of a description here...
-   * </p>
-   * <!-- end-user-doc -->
-   * @return the value of the '<em>Term Operations</em>' attribute.
-   * @see org.xtext.example.mydsl.myDsl.OperationsType
-   * @see #setTermOperations(OperationsType)
-   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getExpression_TermOperations()
-   * @model
-   * @generated
-   */
-  OperationsType getTermOperations();
-
-  /**
-   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.Expression#getTermOperations <em>Term Operations</em>}' attribute.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @param value the new value of the '<em>Term Operations</em>' attribute.
-   * @see org.xtext.example.mydsl.myDsl.OperationsType
-   * @see #getTermOperations()
-   * @generated
-   */
-  void setTermOperations(OperationsType value);
-
-} // Expression
+/**
+ */
+package org.xtext.example.mydsl.myDsl;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Expression</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getExpression()
+ * @model
+ * @generated
+ */
+public interface Expression extends EObject
+{
+} // Expression
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/FormalParameter.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/FormalParameter.java
new file mode 100644
index 0000000000000000000000000000000000000000..a1fb9857c19d0906d4a869efd773f862e6d47a28
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/FormalParameter.java
@@ -0,0 +1,50 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Formal Parameter</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.FormalParameter#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getFormalParameter()
+ * @model
+ * @generated
+ */
+public interface FormalParameter extends Expression
+{
+  /**
+   * 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(String)
+   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getFormalParameter_Value()
+   * @model
+   * @generated
+   */
+  String getValue();
+
+  /**
+   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.FormalParameter#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(String value);
+
+} // FormalParameter
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/Function.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/Function.java
new file mode 100644
index 0000000000000000000000000000000000000000..23e6183ae62df5d05b0913b8934585cf2597e462
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/Function.java
@@ -0,0 +1,68 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Function</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.Function#getName <em>Name</em>}</li>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.Function#getParameters <em>Parameters</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getFunction()
+ * @model
+ * @generated
+ */
+public interface Function extends Expression
+{
+  /**
+   * 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.xtext.example.mydsl.myDsl.MyDslPackage#getFunction_Name()
+   * @model
+   * @generated
+   */
+  String getName();
+
+  /**
+   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.Function#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>Parameters</b></em>' containment reference list.
+   * The list contents are of type {@link org.xtext.example.mydsl.myDsl.Expression}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Parameters</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>Parameters</em>' containment reference list.
+   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getFunction_Parameters()
+   * @model containment="true"
+   * @generated
+   */
+  EList<Expression> getParameters();
+
+} // Function
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/IfElseExpression.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/IfElseExpression.java
new file mode 100644
index 0000000000000000000000000000000000000000..53cca43920684e744971291c6f623cdf9bff6630
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/IfElseExpression.java
@@ -0,0 +1,104 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>If Else Expression</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.IfElseExpression#getCondition <em>Condition</em>}</li>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.IfElseExpression#getTrueExp <em>True Exp</em>}</li>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.IfElseExpression#getFalseExp <em>False Exp</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getIfElseExpression()
+ * @model
+ * @generated
+ */
+public interface IfElseExpression extends Expression
+{
+  /**
+   * Returns the value of the '<em><b>Condition</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Condition</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Condition</em>' containment reference.
+   * @see #setCondition(Expression)
+   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getIfElseExpression_Condition()
+   * @model containment="true"
+   * @generated
+   */
+  Expression getCondition();
+
+  /**
+   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.IfElseExpression#getCondition <em>Condition</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Condition</em>' containment reference.
+   * @see #getCondition()
+   * @generated
+   */
+  void setCondition(Expression value);
+
+  /**
+   * Returns the value of the '<em><b>True Exp</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>True Exp</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>True Exp</em>' containment reference.
+   * @see #setTrueExp(Expression)
+   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getIfElseExpression_TrueExp()
+   * @model containment="true"
+   * @generated
+   */
+  Expression getTrueExp();
+
+  /**
+   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.IfElseExpression#getTrueExp <em>True Exp</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>True Exp</em>' containment reference.
+   * @see #getTrueExp()
+   * @generated
+   */
+  void setTrueExp(Expression value);
+
+  /**
+   * Returns the value of the '<em><b>False Exp</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>False Exp</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>False Exp</em>' containment reference.
+   * @see #setFalseExp(Expression)
+   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getIfElseExpression_FalseExp()
+   * @model containment="true"
+   * @generated
+   */
+  Expression getFalseExp();
+
+  /**
+   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.IfElseExpression#getFalseExp <em>False Exp</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>False Exp</em>' containment reference.
+   * @see #getFalseExp()
+   * @generated
+   */
+  void setFalseExp(Expression value);
+
+} // IfElseExpression
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/IntLiteral.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/IntLiteral.java
new file mode 100644
index 0000000000000000000000000000000000000000..b532cb55a2767044cd61697fa0c1810f3f212920
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/IntLiteral.java
@@ -0,0 +1,51 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl;
+
+import java.math.BigInteger;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Int Literal</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.IntLiteral#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getIntLiteral()
+ * @model
+ * @generated
+ */
+public interface IntLiteral extends Expression
+{
+  /**
+   * 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(BigInteger)
+   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getIntLiteral_Value()
+   * @model
+   * @generated
+   */
+  BigInteger getValue();
+
+  /**
+   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.IntLiteral#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(BigInteger value);
+
+} // IntLiteral
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/Model.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/Model.java
index f3f26d78111e3527979a2cb2470a59971eeac102..f21c71df27280ac1c7e3ad2beda38f641d78cf98 100644
--- a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/Model.java
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/Model.java
@@ -1,43 +1,51 @@
-/**
- */
-package org.xtext.example.mydsl.myDsl;
-
-import org.eclipse.emf.common.util.EList;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Model</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.xtext.example.mydsl.myDsl.Model#getTerms <em>Terms</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getModel()
- * @model
- * @generated
- */
-public interface Model extends EObject
-{
-  /**
-   * Returns the value of the '<em><b>Terms</b></em>' containment reference list.
-   * The list contents are of type {@link org.xtext.example.mydsl.myDsl.Expression}.
-   * <!-- begin-user-doc -->
-   * <p>
-   * If the meaning of the '<em>Terms</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>Terms</em>' containment reference list.
-   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getModel_Terms()
-   * @model containment="true"
-   * @generated
-   */
-  EList<Expression> getTerms();
-
-} // Model
+/**
+ */
+package org.xtext.example.mydsl.myDsl;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Model</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.Model#getTerms <em>Terms</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getModel()
+ * @model
+ * @generated
+ */
+public interface Model extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Terms</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Terms</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Terms</em>' containment reference.
+   * @see #setTerms(Expression)
+   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getModel_Terms()
+   * @model containment="true"
+   * @generated
+   */
+  Expression getTerms();
+
+  /**
+   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.Model#getTerms <em>Terms</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Terms</em>' containment reference.
+   * @see #getTerms()
+   * @generated
+   */
+  void setTerms(Expression value);
+
+} // Model
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/MyDslFactory.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/MyDslFactory.java
index 802311ab3894032ced742ed06f2807d159617f4e..cf19c6e116aa71044935854b754a9886b4831f2d 100644
--- a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/MyDslFactory.java
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/MyDslFactory.java
@@ -1,61 +1,160 @@
-/**
- */
-package org.xtext.example.mydsl.myDsl;
-
-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.xtext.example.mydsl.myDsl.MyDslPackage
- * @generated
- */
-public interface MyDslFactory extends EFactory
-{
-  /**
-   * The singleton instance of the factory.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  MyDslFactory eINSTANCE = org.xtext.example.mydsl.myDsl.impl.MyDslFactoryImpl.init();
-
-  /**
-   * Returns a new object of class '<em>Model</em>'.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @return a new object of class '<em>Model</em>'.
-   * @generated
-   */
-  Model createModel();
-
-  /**
-   * Returns a new object of class '<em>Expression</em>'.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @return a new object of class '<em>Expression</em>'.
-   * @generated
-   */
-  Expression createExpression();
-
-  /**
-   * Returns a new object of class '<em>Term</em>'.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @return a new object of class '<em>Term</em>'.
-   * @generated
-   */
-  Term createTerm();
-
-  /**
-   * Returns the package supported by this factory.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @return the package supported by this factory.
-   * @generated
-   */
-  MyDslPackage getMyDslPackage();
-
-} //MyDslFactory
+/**
+ */
+package org.xtext.example.mydsl.myDsl;
+
+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.xtext.example.mydsl.myDsl.MyDslPackage
+ * @generated
+ */
+public interface MyDslFactory extends EFactory
+{
+  /**
+   * The singleton instance of the factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  MyDslFactory eINSTANCE = org.xtext.example.mydsl.myDsl.impl.MyDslFactoryImpl.init();
+
+  /**
+   * Returns a new object of class '<em>Model</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Model</em>'.
+   * @generated
+   */
+  Model createModel();
+
+  /**
+   * Returns a new object of class '<em>Expression</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Expression</em>'.
+   * @generated
+   */
+  Expression createExpression();
+
+  /**
+   * Returns a new object of class '<em>Function</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Function</em>'.
+   * @generated
+   */
+  Function createFunction();
+
+  /**
+   * Returns a new object of class '<em>Formal Parameter</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Formal Parameter</em>'.
+   * @generated
+   */
+  FormalParameter createFormalParameter();
+
+  /**
+   * Returns a new object of class '<em>Boolean Literal</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Boolean Literal</em>'.
+   * @generated
+   */
+  BooleanLiteral createBooleanLiteral();
+
+  /**
+   * Returns a new object of class '<em>Int Literal</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Int Literal</em>'.
+   * @generated
+   */
+  IntLiteral createIntLiteral();
+
+  /**
+   * Returns a new object of class '<em>Double Literal</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Double Literal</em>'.
+   * @generated
+   */
+  DoubleLiteral createDoubleLiteral();
+
+  /**
+   * Returns a new object of class '<em>If Else Expression</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>If Else Expression</em>'.
+   * @generated
+   */
+  IfElseExpression createIfElseExpression();
+
+  /**
+   * Returns a new object of class '<em>Binary Boolean Expression</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Binary Boolean Expression</em>'.
+   * @generated
+   */
+  BinaryBooleanExpression createBinaryBooleanExpression();
+
+  /**
+   * Returns a new object of class '<em>Unary Boolean Expression</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Unary Boolean Expression</em>'.
+   * @generated
+   */
+  UnaryBooleanExpression createUnaryBooleanExpression();
+
+  /**
+   * Returns a new object of class '<em>Comparison</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Comparison</em>'.
+   * @generated
+   */
+  Comparison createComparison();
+
+  /**
+   * Returns a new object of class '<em>Term</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Term</em>'.
+   * @generated
+   */
+  Term createTerm();
+
+  /**
+   * Returns a new object of class '<em>Product</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Product</em>'.
+   * @generated
+   */
+  Product createProduct();
+
+  /**
+   * Returns a new object of class '<em>Power</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Power</em>'.
+   * @generated
+   */
+  Power createPower();
+
+  /**
+   * Returns the package supported by this factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the package supported by this factory.
+   * @generated
+   */
+  MyDslPackage getMyDslPackage();
+
+} //MyDslFactory
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/MyDslPackage.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/MyDslPackage.java
index 17782344ce9da3394a5952c5a27986e5464ee521..77f1c0ecd62e2ad626ee6caa28bde295801e0ccf 100644
--- a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/MyDslPackage.java
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/MyDslPackage.java
@@ -1,382 +1,1452 @@
-/**
- */
-package org.xtext.example.mydsl.myDsl;
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EEnum;
-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.xtext.example.mydsl.myDsl.MyDslFactory
- * @model kind="package"
- * @generated
- */
-public interface MyDslPackage extends EPackage
-{
-  /**
-   * The package name.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  String eNAME = "myDsl";
-
-  /**
-   * The package namespace URI.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  String eNS_URI = "http://www.xtext.org/example/mydsl/MyDsl";
-
-  /**
-   * The package namespace name.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  String eNS_PREFIX = "myDsl";
-
-  /**
-   * The singleton instance of the package.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  MyDslPackage eINSTANCE = org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl.init();
-
-  /**
-   * The meta object id for the '{@link org.xtext.example.mydsl.myDsl.impl.ModelImpl <em>Model</em>}' class.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @see org.xtext.example.mydsl.myDsl.impl.ModelImpl
-   * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getModel()
-   * @generated
-   */
-  int MODEL = 0;
-
-  /**
-   * The feature id for the '<em><b>Terms</b></em>' containment reference list.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   * @ordered
-   */
-  int MODEL__TERMS = 0;
-
-  /**
-   * The number of structural features of the '<em>Model</em>' class.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   * @ordered
-   */
-  int MODEL_FEATURE_COUNT = 1;
-
-  /**
-   * The meta object id for the '{@link org.xtext.example.mydsl.myDsl.impl.ExpressionImpl <em>Expression</em>}' class.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @see org.xtext.example.mydsl.myDsl.impl.ExpressionImpl
-   * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getExpression()
-   * @generated
-   */
-  int EXPRESSION = 1;
-
-  /**
-   * The feature id for the '<em><b>Term Operations</b></em>' attribute.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   * @ordered
-   */
-  int EXPRESSION__TERM_OPERATIONS = 0;
-
-  /**
-   * The number of structural features of the '<em>Expression</em>' class.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   * @ordered
-   */
-  int EXPRESSION_FEATURE_COUNT = 1;
-
-  /**
-   * The meta object id for the '{@link org.xtext.example.mydsl.myDsl.impl.TermImpl <em>Term</em>}' class.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @see org.xtext.example.mydsl.myDsl.impl.TermImpl
-   * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getTerm()
-   * @generated
-   */
-  int TERM = 2;
-
-  /**
-   * The feature id for the '<em><b>Term Operations</b></em>' attribute.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   * @ordered
-   */
-  int TERM__TERM_OPERATIONS = EXPRESSION__TERM_OPERATIONS;
-
-  /**
-   * The feature id for the '<em><b>Left</b></em>' containment reference.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   * @ordered
-   */
-  int TERM__LEFT = EXPRESSION_FEATURE_COUNT + 0;
-
-  /**
-   * The feature id for the '<em><b>Operations</b></em>' containment reference.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   * @ordered
-   */
-  int TERM__OPERATIONS = EXPRESSION_FEATURE_COUNT + 1;
-
-  /**
-   * The feature id for the '<em><b>Right</b></em>' containment reference.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   * @ordered
-   */
-  int TERM__RIGHT = EXPRESSION_FEATURE_COUNT + 2;
-
-  /**
-   * The number of structural features of the '<em>Term</em>' class.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   * @ordered
-   */
-  int TERM_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 3;
-
-  /**
-   * The meta object id for the '{@link org.xtext.example.mydsl.myDsl.OperationsType <em>Operations Type</em>}' enum.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @see org.xtext.example.mydsl.myDsl.OperationsType
-   * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getOperationsType()
-   * @generated
-   */
-  int OPERATIONS_TYPE = 3;
-
-
-  /**
-   * Returns the meta object for class '{@link org.xtext.example.mydsl.myDsl.Model <em>Model</em>}'.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @return the meta object for class '<em>Model</em>'.
-   * @see org.xtext.example.mydsl.myDsl.Model
-   * @generated
-   */
-  EClass getModel();
-
-  /**
-   * Returns the meta object for the containment reference list '{@link org.xtext.example.mydsl.myDsl.Model#getTerms <em>Terms</em>}'.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @return the meta object for the containment reference list '<em>Terms</em>'.
-   * @see org.xtext.example.mydsl.myDsl.Model#getTerms()
-   * @see #getModel()
-   * @generated
-   */
-  EReference getModel_Terms();
-
-  /**
-   * Returns the meta object for class '{@link org.xtext.example.mydsl.myDsl.Expression <em>Expression</em>}'.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @return the meta object for class '<em>Expression</em>'.
-   * @see org.xtext.example.mydsl.myDsl.Expression
-   * @generated
-   */
-  EClass getExpression();
-
-  /**
-   * Returns the meta object for the attribute '{@link org.xtext.example.mydsl.myDsl.Expression#getTermOperations <em>Term Operations</em>}'.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @return the meta object for the attribute '<em>Term Operations</em>'.
-   * @see org.xtext.example.mydsl.myDsl.Expression#getTermOperations()
-   * @see #getExpression()
-   * @generated
-   */
-  EAttribute getExpression_TermOperations();
-
-  /**
-   * Returns the meta object for class '{@link org.xtext.example.mydsl.myDsl.Term <em>Term</em>}'.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @return the meta object for class '<em>Term</em>'.
-   * @see org.xtext.example.mydsl.myDsl.Term
-   * @generated
-   */
-  EClass getTerm();
-
-  /**
-   * Returns the meta object for the containment reference '{@link org.xtext.example.mydsl.myDsl.Term#getLeft <em>Left</em>}'.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @return the meta object for the containment reference '<em>Left</em>'.
-   * @see org.xtext.example.mydsl.myDsl.Term#getLeft()
-   * @see #getTerm()
-   * @generated
-   */
-  EReference getTerm_Left();
-
-  /**
-   * Returns the meta object for the containment reference '{@link org.xtext.example.mydsl.myDsl.Term#getOperations <em>Operations</em>}'.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @return the meta object for the containment reference '<em>Operations</em>'.
-   * @see org.xtext.example.mydsl.myDsl.Term#getOperations()
-   * @see #getTerm()
-   * @generated
-   */
-  EReference getTerm_Operations();
-
-  /**
-   * Returns the meta object for the containment reference '{@link org.xtext.example.mydsl.myDsl.Term#getRight <em>Right</em>}'.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @return the meta object for the containment reference '<em>Right</em>'.
-   * @see org.xtext.example.mydsl.myDsl.Term#getRight()
-   * @see #getTerm()
-   * @generated
-   */
-  EReference getTerm_Right();
-
-  /**
-   * Returns the meta object for enum '{@link org.xtext.example.mydsl.myDsl.OperationsType <em>Operations Type</em>}'.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @return the meta object for enum '<em>Operations Type</em>'.
-   * @see org.xtext.example.mydsl.myDsl.OperationsType
-   * @generated
-   */
-  EEnum getOperationsType();
-
-  /**
-   * 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
-   */
-  MyDslFactory getMyDslFactory();
-
-  /**
-   * <!-- 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.xtext.example.mydsl.myDsl.impl.ModelImpl <em>Model</em>}' class.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see org.xtext.example.mydsl.myDsl.impl.ModelImpl
-     * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getModel()
-     * @generated
-     */
-    EClass MODEL = eINSTANCE.getModel();
-
-    /**
-     * The meta object literal for the '<em><b>Terms</b></em>' containment reference list feature.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    EReference MODEL__TERMS = eINSTANCE.getModel_Terms();
-
-    /**
-     * The meta object literal for the '{@link org.xtext.example.mydsl.myDsl.impl.ExpressionImpl <em>Expression</em>}' class.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see org.xtext.example.mydsl.myDsl.impl.ExpressionImpl
-     * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getExpression()
-     * @generated
-     */
-    EClass EXPRESSION = eINSTANCE.getExpression();
-
-    /**
-     * The meta object literal for the '<em><b>Term Operations</b></em>' attribute feature.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    EAttribute EXPRESSION__TERM_OPERATIONS = eINSTANCE.getExpression_TermOperations();
-
-    /**
-     * The meta object literal for the '{@link org.xtext.example.mydsl.myDsl.impl.TermImpl <em>Term</em>}' class.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see org.xtext.example.mydsl.myDsl.impl.TermImpl
-     * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getTerm()
-     * @generated
-     */
-    EClass TERM = eINSTANCE.getTerm();
-
-    /**
-     * The meta object literal for the '<em><b>Left</b></em>' containment reference feature.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    EReference TERM__LEFT = eINSTANCE.getTerm_Left();
-
-    /**
-     * The meta object literal for the '<em><b>Operations</b></em>' containment reference feature.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    EReference TERM__OPERATIONS = eINSTANCE.getTerm_Operations();
-
-    /**
-     * The meta object literal for the '<em><b>Right</b></em>' containment reference feature.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    EReference TERM__RIGHT = eINSTANCE.getTerm_Right();
-
-    /**
-     * The meta object literal for the '{@link org.xtext.example.mydsl.myDsl.OperationsType <em>Operations Type</em>}' enum.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see org.xtext.example.mydsl.myDsl.OperationsType
-     * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getOperationsType()
-     * @generated
-     */
-    EEnum OPERATIONS_TYPE = eINSTANCE.getOperationsType();
-
-  }
-
-} //MyDslPackage
+/**
+ */
+package org.xtext.example.mydsl.myDsl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+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.xtext.example.mydsl.myDsl.MyDslFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface MyDslPackage extends EPackage
+{
+  /**
+   * The package name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  String eNAME = "myDsl";
+
+  /**
+   * The package namespace URI.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  String eNS_URI = "http://www.xtext.org/example/mydsl/MyDsl";
+
+  /**
+   * The package namespace name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  String eNS_PREFIX = "myDsl";
+
+  /**
+   * The singleton instance of the package.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  MyDslPackage eINSTANCE = org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl.init();
+
+  /**
+   * The meta object id for the '{@link org.xtext.example.mydsl.myDsl.impl.ModelImpl <em>Model</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.xtext.example.mydsl.myDsl.impl.ModelImpl
+   * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getModel()
+   * @generated
+   */
+  int MODEL = 0;
+
+  /**
+   * The feature id for the '<em><b>Terms</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int MODEL__TERMS = 0;
+
+  /**
+   * The number of structural features of the '<em>Model</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int MODEL_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link org.xtext.example.mydsl.myDsl.impl.ExpressionImpl <em>Expression</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.xtext.example.mydsl.myDsl.impl.ExpressionImpl
+   * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getExpression()
+   * @generated
+   */
+  int EXPRESSION = 1;
+
+  /**
+   * The number of structural features of the '<em>Expression</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EXPRESSION_FEATURE_COUNT = 0;
+
+  /**
+   * The meta object id for the '{@link org.xtext.example.mydsl.myDsl.impl.FunctionImpl <em>Function</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.xtext.example.mydsl.myDsl.impl.FunctionImpl
+   * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getFunction()
+   * @generated
+   */
+  int FUNCTION = 2;
+
+  /**
+   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int FUNCTION__NAME = EXPRESSION_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int FUNCTION__PARAMETERS = EXPRESSION_FEATURE_COUNT + 1;
+
+  /**
+   * The number of structural features of the '<em>Function</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int FUNCTION_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 2;
+
+  /**
+   * The meta object id for the '{@link org.xtext.example.mydsl.myDsl.impl.FormalParameterImpl <em>Formal Parameter</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.xtext.example.mydsl.myDsl.impl.FormalParameterImpl
+   * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getFormalParameter()
+   * @generated
+   */
+  int FORMAL_PARAMETER = 3;
+
+  /**
+   * The feature id for the '<em><b>Value</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int FORMAL_PARAMETER__VALUE = EXPRESSION_FEATURE_COUNT + 0;
+
+  /**
+   * The number of structural features of the '<em>Formal Parameter</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int FORMAL_PARAMETER_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 1;
+
+  /**
+   * The meta object id for the '{@link org.xtext.example.mydsl.myDsl.impl.BooleanLiteralImpl <em>Boolean Literal</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.xtext.example.mydsl.myDsl.impl.BooleanLiteralImpl
+   * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getBooleanLiteral()
+   * @generated
+   */
+  int BOOLEAN_LITERAL = 4;
+
+  /**
+   * The feature id for the '<em><b>Value</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BOOLEAN_LITERAL__VALUE = EXPRESSION_FEATURE_COUNT + 0;
+
+  /**
+   * The number of structural features of the '<em>Boolean Literal</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BOOLEAN_LITERAL_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 1;
+
+  /**
+   * The meta object id for the '{@link org.xtext.example.mydsl.myDsl.impl.IntLiteralImpl <em>Int Literal</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.xtext.example.mydsl.myDsl.impl.IntLiteralImpl
+   * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getIntLiteral()
+   * @generated
+   */
+  int INT_LITERAL = 5;
+
+  /**
+   * The feature id for the '<em><b>Value</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int INT_LITERAL__VALUE = EXPRESSION_FEATURE_COUNT + 0;
+
+  /**
+   * The number of structural features of the '<em>Int Literal</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int INT_LITERAL_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 1;
+
+  /**
+   * The meta object id for the '{@link org.xtext.example.mydsl.myDsl.impl.DoubleLiteralImpl <em>Double Literal</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.xtext.example.mydsl.myDsl.impl.DoubleLiteralImpl
+   * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getDoubleLiteral()
+   * @generated
+   */
+  int DOUBLE_LITERAL = 6;
+
+  /**
+   * The feature id for the '<em><b>Value</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int DOUBLE_LITERAL__VALUE = EXPRESSION_FEATURE_COUNT + 0;
+
+  /**
+   * The number of structural features of the '<em>Double Literal</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int DOUBLE_LITERAL_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 1;
+
+  /**
+   * The meta object id for the '{@link org.xtext.example.mydsl.myDsl.impl.IfElseExpressionImpl <em>If Else Expression</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.xtext.example.mydsl.myDsl.impl.IfElseExpressionImpl
+   * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getIfElseExpression()
+   * @generated
+   */
+  int IF_ELSE_EXPRESSION = 7;
+
+  /**
+   * The feature id for the '<em><b>Condition</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int IF_ELSE_EXPRESSION__CONDITION = EXPRESSION_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>True Exp</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int IF_ELSE_EXPRESSION__TRUE_EXP = EXPRESSION_FEATURE_COUNT + 1;
+
+  /**
+   * The feature id for the '<em><b>False Exp</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int IF_ELSE_EXPRESSION__FALSE_EXP = EXPRESSION_FEATURE_COUNT + 2;
+
+  /**
+   * The number of structural features of the '<em>If Else Expression</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int IF_ELSE_EXPRESSION_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 3;
+
+  /**
+   * The meta object id for the '{@link org.xtext.example.mydsl.myDsl.impl.BinaryBooleanExpressionImpl <em>Binary Boolean Expression</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.xtext.example.mydsl.myDsl.impl.BinaryBooleanExpressionImpl
+   * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getBinaryBooleanExpression()
+   * @generated
+   */
+  int BINARY_BOOLEAN_EXPRESSION = 8;
+
+  /**
+   * The feature id for the '<em><b>Left</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BINARY_BOOLEAN_EXPRESSION__LEFT = EXPRESSION_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Operation</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BINARY_BOOLEAN_EXPRESSION__OPERATION = EXPRESSION_FEATURE_COUNT + 1;
+
+  /**
+   * The feature id for the '<em><b>Right</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BINARY_BOOLEAN_EXPRESSION__RIGHT = EXPRESSION_FEATURE_COUNT + 2;
+
+  /**
+   * The number of structural features of the '<em>Binary Boolean Expression</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BINARY_BOOLEAN_EXPRESSION_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 3;
+
+  /**
+   * The meta object id for the '{@link org.xtext.example.mydsl.myDsl.impl.UnaryBooleanExpressionImpl <em>Unary Boolean Expression</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.xtext.example.mydsl.myDsl.impl.UnaryBooleanExpressionImpl
+   * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getUnaryBooleanExpression()
+   * @generated
+   */
+  int UNARY_BOOLEAN_EXPRESSION = 9;
+
+  /**
+   * The feature id for the '<em><b>Inner</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int UNARY_BOOLEAN_EXPRESSION__INNER = EXPRESSION_FEATURE_COUNT + 0;
+
+  /**
+   * The number of structural features of the '<em>Unary Boolean Expression</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int UNARY_BOOLEAN_EXPRESSION_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 1;
+
+  /**
+   * The meta object id for the '{@link org.xtext.example.mydsl.myDsl.impl.ComparisonImpl <em>Comparison</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.xtext.example.mydsl.myDsl.impl.ComparisonImpl
+   * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getComparison()
+   * @generated
+   */
+  int COMPARISON = 10;
+
+  /**
+   * The feature id for the '<em><b>Left</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int COMPARISON__LEFT = EXPRESSION_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Operation</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int COMPARISON__OPERATION = EXPRESSION_FEATURE_COUNT + 1;
+
+  /**
+   * The feature id for the '<em><b>Right</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int COMPARISON__RIGHT = EXPRESSION_FEATURE_COUNT + 2;
+
+  /**
+   * The number of structural features of the '<em>Comparison</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int COMPARISON_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 3;
+
+  /**
+   * The meta object id for the '{@link org.xtext.example.mydsl.myDsl.impl.TermImpl <em>Term</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.xtext.example.mydsl.myDsl.impl.TermImpl
+   * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getTerm()
+   * @generated
+   */
+  int TERM = 11;
+
+  /**
+   * The feature id for the '<em><b>Left</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int TERM__LEFT = EXPRESSION_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Operation</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int TERM__OPERATION = EXPRESSION_FEATURE_COUNT + 1;
+
+  /**
+   * The feature id for the '<em><b>Right</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int TERM__RIGHT = EXPRESSION_FEATURE_COUNT + 2;
+
+  /**
+   * The number of structural features of the '<em>Term</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int TERM_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 3;
+
+  /**
+   * The meta object id for the '{@link org.xtext.example.mydsl.myDsl.impl.ProductImpl <em>Product</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.xtext.example.mydsl.myDsl.impl.ProductImpl
+   * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getProduct()
+   * @generated
+   */
+  int PRODUCT = 12;
+
+  /**
+   * The feature id for the '<em><b>Left</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int PRODUCT__LEFT = EXPRESSION_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Operation</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int PRODUCT__OPERATION = EXPRESSION_FEATURE_COUNT + 1;
+
+  /**
+   * The feature id for the '<em><b>Right</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int PRODUCT__RIGHT = EXPRESSION_FEATURE_COUNT + 2;
+
+  /**
+   * The number of structural features of the '<em>Product</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int PRODUCT_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 3;
+
+  /**
+   * The meta object id for the '{@link org.xtext.example.mydsl.myDsl.impl.PowerImpl <em>Power</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.xtext.example.mydsl.myDsl.impl.PowerImpl
+   * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getPower()
+   * @generated
+   */
+  int POWER = 13;
+
+  /**
+   * The feature id for the '<em><b>Base</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int POWER__BASE = EXPRESSION_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Exponent</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int POWER__EXPONENT = EXPRESSION_FEATURE_COUNT + 1;
+
+  /**
+   * The number of structural features of the '<em>Power</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int POWER_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 2;
+
+  /**
+   * The meta object id for the '{@link org.xtext.example.mydsl.myDsl.ProductOperation <em>Product Operation</em>}' enum.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.xtext.example.mydsl.myDsl.ProductOperation
+   * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getProductOperation()
+   * @generated
+   */
+  int PRODUCT_OPERATION = 14;
+
+  /**
+   * The meta object id for the '{@link org.xtext.example.mydsl.myDsl.TermOperation <em>Term Operation</em>}' enum.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.xtext.example.mydsl.myDsl.TermOperation
+   * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getTermOperation()
+   * @generated
+   */
+  int TERM_OPERATION = 15;
+
+  /**
+   * The meta object id for the '{@link org.xtext.example.mydsl.myDsl.CompareOperation <em>Compare Operation</em>}' enum.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.xtext.example.mydsl.myDsl.CompareOperation
+   * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getCompareOperation()
+   * @generated
+   */
+  int COMPARE_OPERATION = 16;
+
+  /**
+   * The meta object id for the '{@link org.xtext.example.mydsl.myDsl.BooleanOperation <em>Boolean Operation</em>}' enum.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.xtext.example.mydsl.myDsl.BooleanOperation
+   * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getBooleanOperation()
+   * @generated
+   */
+  int BOOLEAN_OPERATION = 17;
+
+
+  /**
+   * Returns the meta object for class '{@link org.xtext.example.mydsl.myDsl.Model <em>Model</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Model</em>'.
+   * @see org.xtext.example.mydsl.myDsl.Model
+   * @generated
+   */
+  EClass getModel();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.xtext.example.mydsl.myDsl.Model#getTerms <em>Terms</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Terms</em>'.
+   * @see org.xtext.example.mydsl.myDsl.Model#getTerms()
+   * @see #getModel()
+   * @generated
+   */
+  EReference getModel_Terms();
+
+  /**
+   * Returns the meta object for class '{@link org.xtext.example.mydsl.myDsl.Expression <em>Expression</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Expression</em>'.
+   * @see org.xtext.example.mydsl.myDsl.Expression
+   * @generated
+   */
+  EClass getExpression();
+
+  /**
+   * Returns the meta object for class '{@link org.xtext.example.mydsl.myDsl.Function <em>Function</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Function</em>'.
+   * @see org.xtext.example.mydsl.myDsl.Function
+   * @generated
+   */
+  EClass getFunction();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.xtext.example.mydsl.myDsl.Function#getName <em>Name</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Name</em>'.
+   * @see org.xtext.example.mydsl.myDsl.Function#getName()
+   * @see #getFunction()
+   * @generated
+   */
+  EAttribute getFunction_Name();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.xtext.example.mydsl.myDsl.Function#getParameters <em>Parameters</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Parameters</em>'.
+   * @see org.xtext.example.mydsl.myDsl.Function#getParameters()
+   * @see #getFunction()
+   * @generated
+   */
+  EReference getFunction_Parameters();
+
+  /**
+   * Returns the meta object for class '{@link org.xtext.example.mydsl.myDsl.FormalParameter <em>Formal Parameter</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Formal Parameter</em>'.
+   * @see org.xtext.example.mydsl.myDsl.FormalParameter
+   * @generated
+   */
+  EClass getFormalParameter();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.xtext.example.mydsl.myDsl.FormalParameter#getValue <em>Value</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Value</em>'.
+   * @see org.xtext.example.mydsl.myDsl.FormalParameter#getValue()
+   * @see #getFormalParameter()
+   * @generated
+   */
+  EAttribute getFormalParameter_Value();
+
+  /**
+   * Returns the meta object for class '{@link org.xtext.example.mydsl.myDsl.BooleanLiteral <em>Boolean Literal</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Boolean Literal</em>'.
+   * @see org.xtext.example.mydsl.myDsl.BooleanLiteral
+   * @generated
+   */
+  EClass getBooleanLiteral();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.xtext.example.mydsl.myDsl.BooleanLiteral#isValue <em>Value</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Value</em>'.
+   * @see org.xtext.example.mydsl.myDsl.BooleanLiteral#isValue()
+   * @see #getBooleanLiteral()
+   * @generated
+   */
+  EAttribute getBooleanLiteral_Value();
+
+  /**
+   * Returns the meta object for class '{@link org.xtext.example.mydsl.myDsl.IntLiteral <em>Int Literal</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Int Literal</em>'.
+   * @see org.xtext.example.mydsl.myDsl.IntLiteral
+   * @generated
+   */
+  EClass getIntLiteral();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.xtext.example.mydsl.myDsl.IntLiteral#getValue <em>Value</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Value</em>'.
+   * @see org.xtext.example.mydsl.myDsl.IntLiteral#getValue()
+   * @see #getIntLiteral()
+   * @generated
+   */
+  EAttribute getIntLiteral_Value();
+
+  /**
+   * Returns the meta object for class '{@link org.xtext.example.mydsl.myDsl.DoubleLiteral <em>Double Literal</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Double Literal</em>'.
+   * @see org.xtext.example.mydsl.myDsl.DoubleLiteral
+   * @generated
+   */
+  EClass getDoubleLiteral();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.xtext.example.mydsl.myDsl.DoubleLiteral#getValue <em>Value</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Value</em>'.
+   * @see org.xtext.example.mydsl.myDsl.DoubleLiteral#getValue()
+   * @see #getDoubleLiteral()
+   * @generated
+   */
+  EAttribute getDoubleLiteral_Value();
+
+  /**
+   * Returns the meta object for class '{@link org.xtext.example.mydsl.myDsl.IfElseExpression <em>If Else Expression</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>If Else Expression</em>'.
+   * @see org.xtext.example.mydsl.myDsl.IfElseExpression
+   * @generated
+   */
+  EClass getIfElseExpression();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.xtext.example.mydsl.myDsl.IfElseExpression#getCondition <em>Condition</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Condition</em>'.
+   * @see org.xtext.example.mydsl.myDsl.IfElseExpression#getCondition()
+   * @see #getIfElseExpression()
+   * @generated
+   */
+  EReference getIfElseExpression_Condition();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.xtext.example.mydsl.myDsl.IfElseExpression#getTrueExp <em>True Exp</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>True Exp</em>'.
+   * @see org.xtext.example.mydsl.myDsl.IfElseExpression#getTrueExp()
+   * @see #getIfElseExpression()
+   * @generated
+   */
+  EReference getIfElseExpression_TrueExp();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.xtext.example.mydsl.myDsl.IfElseExpression#getFalseExp <em>False Exp</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>False Exp</em>'.
+   * @see org.xtext.example.mydsl.myDsl.IfElseExpression#getFalseExp()
+   * @see #getIfElseExpression()
+   * @generated
+   */
+  EReference getIfElseExpression_FalseExp();
+
+  /**
+   * Returns the meta object for class '{@link org.xtext.example.mydsl.myDsl.BinaryBooleanExpression <em>Binary Boolean Expression</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Binary Boolean Expression</em>'.
+   * @see org.xtext.example.mydsl.myDsl.BinaryBooleanExpression
+   * @generated
+   */
+  EClass getBinaryBooleanExpression();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.xtext.example.mydsl.myDsl.BinaryBooleanExpression#getLeft <em>Left</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Left</em>'.
+   * @see org.xtext.example.mydsl.myDsl.BinaryBooleanExpression#getLeft()
+   * @see #getBinaryBooleanExpression()
+   * @generated
+   */
+  EReference getBinaryBooleanExpression_Left();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.xtext.example.mydsl.myDsl.BinaryBooleanExpression#getOperation <em>Operation</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Operation</em>'.
+   * @see org.xtext.example.mydsl.myDsl.BinaryBooleanExpression#getOperation()
+   * @see #getBinaryBooleanExpression()
+   * @generated
+   */
+  EAttribute getBinaryBooleanExpression_Operation();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.xtext.example.mydsl.myDsl.BinaryBooleanExpression#getRight <em>Right</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Right</em>'.
+   * @see org.xtext.example.mydsl.myDsl.BinaryBooleanExpression#getRight()
+   * @see #getBinaryBooleanExpression()
+   * @generated
+   */
+  EReference getBinaryBooleanExpression_Right();
+
+  /**
+   * Returns the meta object for class '{@link org.xtext.example.mydsl.myDsl.UnaryBooleanExpression <em>Unary Boolean Expression</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Unary Boolean Expression</em>'.
+   * @see org.xtext.example.mydsl.myDsl.UnaryBooleanExpression
+   * @generated
+   */
+  EClass getUnaryBooleanExpression();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.xtext.example.mydsl.myDsl.UnaryBooleanExpression#getInner <em>Inner</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Inner</em>'.
+   * @see org.xtext.example.mydsl.myDsl.UnaryBooleanExpression#getInner()
+   * @see #getUnaryBooleanExpression()
+   * @generated
+   */
+  EReference getUnaryBooleanExpression_Inner();
+
+  /**
+   * Returns the meta object for class '{@link org.xtext.example.mydsl.myDsl.Comparison <em>Comparison</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Comparison</em>'.
+   * @see org.xtext.example.mydsl.myDsl.Comparison
+   * @generated
+   */
+  EClass getComparison();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.xtext.example.mydsl.myDsl.Comparison#getLeft <em>Left</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Left</em>'.
+   * @see org.xtext.example.mydsl.myDsl.Comparison#getLeft()
+   * @see #getComparison()
+   * @generated
+   */
+  EReference getComparison_Left();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.xtext.example.mydsl.myDsl.Comparison#getOperation <em>Operation</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Operation</em>'.
+   * @see org.xtext.example.mydsl.myDsl.Comparison#getOperation()
+   * @see #getComparison()
+   * @generated
+   */
+  EAttribute getComparison_Operation();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.xtext.example.mydsl.myDsl.Comparison#getRight <em>Right</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Right</em>'.
+   * @see org.xtext.example.mydsl.myDsl.Comparison#getRight()
+   * @see #getComparison()
+   * @generated
+   */
+  EReference getComparison_Right();
+
+  /**
+   * Returns the meta object for class '{@link org.xtext.example.mydsl.myDsl.Term <em>Term</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Term</em>'.
+   * @see org.xtext.example.mydsl.myDsl.Term
+   * @generated
+   */
+  EClass getTerm();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.xtext.example.mydsl.myDsl.Term#getLeft <em>Left</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Left</em>'.
+   * @see org.xtext.example.mydsl.myDsl.Term#getLeft()
+   * @see #getTerm()
+   * @generated
+   */
+  EReference getTerm_Left();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.xtext.example.mydsl.myDsl.Term#getOperation <em>Operation</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Operation</em>'.
+   * @see org.xtext.example.mydsl.myDsl.Term#getOperation()
+   * @see #getTerm()
+   * @generated
+   */
+  EAttribute getTerm_Operation();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.xtext.example.mydsl.myDsl.Term#getRight <em>Right</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Right</em>'.
+   * @see org.xtext.example.mydsl.myDsl.Term#getRight()
+   * @see #getTerm()
+   * @generated
+   */
+  EReference getTerm_Right();
+
+  /**
+   * Returns the meta object for class '{@link org.xtext.example.mydsl.myDsl.Product <em>Product</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Product</em>'.
+   * @see org.xtext.example.mydsl.myDsl.Product
+   * @generated
+   */
+  EClass getProduct();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.xtext.example.mydsl.myDsl.Product#getLeft <em>Left</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Left</em>'.
+   * @see org.xtext.example.mydsl.myDsl.Product#getLeft()
+   * @see #getProduct()
+   * @generated
+   */
+  EReference getProduct_Left();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.xtext.example.mydsl.myDsl.Product#getOperation <em>Operation</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Operation</em>'.
+   * @see org.xtext.example.mydsl.myDsl.Product#getOperation()
+   * @see #getProduct()
+   * @generated
+   */
+  EAttribute getProduct_Operation();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.xtext.example.mydsl.myDsl.Product#getRight <em>Right</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Right</em>'.
+   * @see org.xtext.example.mydsl.myDsl.Product#getRight()
+   * @see #getProduct()
+   * @generated
+   */
+  EReference getProduct_Right();
+
+  /**
+   * Returns the meta object for class '{@link org.xtext.example.mydsl.myDsl.Power <em>Power</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Power</em>'.
+   * @see org.xtext.example.mydsl.myDsl.Power
+   * @generated
+   */
+  EClass getPower();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.xtext.example.mydsl.myDsl.Power#getBase <em>Base</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Base</em>'.
+   * @see org.xtext.example.mydsl.myDsl.Power#getBase()
+   * @see #getPower()
+   * @generated
+   */
+  EReference getPower_Base();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.xtext.example.mydsl.myDsl.Power#getExponent <em>Exponent</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Exponent</em>'.
+   * @see org.xtext.example.mydsl.myDsl.Power#getExponent()
+   * @see #getPower()
+   * @generated
+   */
+  EReference getPower_Exponent();
+
+  /**
+   * Returns the meta object for enum '{@link org.xtext.example.mydsl.myDsl.ProductOperation <em>Product Operation</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for enum '<em>Product Operation</em>'.
+   * @see org.xtext.example.mydsl.myDsl.ProductOperation
+   * @generated
+   */
+  EEnum getProductOperation();
+
+  /**
+   * Returns the meta object for enum '{@link org.xtext.example.mydsl.myDsl.TermOperation <em>Term Operation</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for enum '<em>Term Operation</em>'.
+   * @see org.xtext.example.mydsl.myDsl.TermOperation
+   * @generated
+   */
+  EEnum getTermOperation();
+
+  /**
+   * Returns the meta object for enum '{@link org.xtext.example.mydsl.myDsl.CompareOperation <em>Compare Operation</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for enum '<em>Compare Operation</em>'.
+   * @see org.xtext.example.mydsl.myDsl.CompareOperation
+   * @generated
+   */
+  EEnum getCompareOperation();
+
+  /**
+   * Returns the meta object for enum '{@link org.xtext.example.mydsl.myDsl.BooleanOperation <em>Boolean Operation</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for enum '<em>Boolean Operation</em>'.
+   * @see org.xtext.example.mydsl.myDsl.BooleanOperation
+   * @generated
+   */
+  EEnum getBooleanOperation();
+
+  /**
+   * 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
+   */
+  MyDslFactory getMyDslFactory();
+
+  /**
+   * <!-- 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.xtext.example.mydsl.myDsl.impl.ModelImpl <em>Model</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.xtext.example.mydsl.myDsl.impl.ModelImpl
+     * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getModel()
+     * @generated
+     */
+    EClass MODEL = eINSTANCE.getModel();
+
+    /**
+     * The meta object literal for the '<em><b>Terms</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference MODEL__TERMS = eINSTANCE.getModel_Terms();
+
+    /**
+     * The meta object literal for the '{@link org.xtext.example.mydsl.myDsl.impl.ExpressionImpl <em>Expression</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.xtext.example.mydsl.myDsl.impl.ExpressionImpl
+     * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getExpression()
+     * @generated
+     */
+    EClass EXPRESSION = eINSTANCE.getExpression();
+
+    /**
+     * The meta object literal for the '{@link org.xtext.example.mydsl.myDsl.impl.FunctionImpl <em>Function</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.xtext.example.mydsl.myDsl.impl.FunctionImpl
+     * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getFunction()
+     * @generated
+     */
+    EClass FUNCTION = eINSTANCE.getFunction();
+
+    /**
+     * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute FUNCTION__NAME = eINSTANCE.getFunction_Name();
+
+    /**
+     * The meta object literal for the '<em><b>Parameters</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference FUNCTION__PARAMETERS = eINSTANCE.getFunction_Parameters();
+
+    /**
+     * The meta object literal for the '{@link org.xtext.example.mydsl.myDsl.impl.FormalParameterImpl <em>Formal Parameter</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.xtext.example.mydsl.myDsl.impl.FormalParameterImpl
+     * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getFormalParameter()
+     * @generated
+     */
+    EClass FORMAL_PARAMETER = eINSTANCE.getFormalParameter();
+
+    /**
+     * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute FORMAL_PARAMETER__VALUE = eINSTANCE.getFormalParameter_Value();
+
+    /**
+     * The meta object literal for the '{@link org.xtext.example.mydsl.myDsl.impl.BooleanLiteralImpl <em>Boolean Literal</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.xtext.example.mydsl.myDsl.impl.BooleanLiteralImpl
+     * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getBooleanLiteral()
+     * @generated
+     */
+    EClass BOOLEAN_LITERAL = eINSTANCE.getBooleanLiteral();
+
+    /**
+     * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute BOOLEAN_LITERAL__VALUE = eINSTANCE.getBooleanLiteral_Value();
+
+    /**
+     * The meta object literal for the '{@link org.xtext.example.mydsl.myDsl.impl.IntLiteralImpl <em>Int Literal</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.xtext.example.mydsl.myDsl.impl.IntLiteralImpl
+     * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getIntLiteral()
+     * @generated
+     */
+    EClass INT_LITERAL = eINSTANCE.getIntLiteral();
+
+    /**
+     * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute INT_LITERAL__VALUE = eINSTANCE.getIntLiteral_Value();
+
+    /**
+     * The meta object literal for the '{@link org.xtext.example.mydsl.myDsl.impl.DoubleLiteralImpl <em>Double Literal</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.xtext.example.mydsl.myDsl.impl.DoubleLiteralImpl
+     * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getDoubleLiteral()
+     * @generated
+     */
+    EClass DOUBLE_LITERAL = eINSTANCE.getDoubleLiteral();
+
+    /**
+     * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute DOUBLE_LITERAL__VALUE = eINSTANCE.getDoubleLiteral_Value();
+
+    /**
+     * The meta object literal for the '{@link org.xtext.example.mydsl.myDsl.impl.IfElseExpressionImpl <em>If Else Expression</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.xtext.example.mydsl.myDsl.impl.IfElseExpressionImpl
+     * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getIfElseExpression()
+     * @generated
+     */
+    EClass IF_ELSE_EXPRESSION = eINSTANCE.getIfElseExpression();
+
+    /**
+     * The meta object literal for the '<em><b>Condition</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference IF_ELSE_EXPRESSION__CONDITION = eINSTANCE.getIfElseExpression_Condition();
+
+    /**
+     * The meta object literal for the '<em><b>True Exp</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference IF_ELSE_EXPRESSION__TRUE_EXP = eINSTANCE.getIfElseExpression_TrueExp();
+
+    /**
+     * The meta object literal for the '<em><b>False Exp</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference IF_ELSE_EXPRESSION__FALSE_EXP = eINSTANCE.getIfElseExpression_FalseExp();
+
+    /**
+     * The meta object literal for the '{@link org.xtext.example.mydsl.myDsl.impl.BinaryBooleanExpressionImpl <em>Binary Boolean Expression</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.xtext.example.mydsl.myDsl.impl.BinaryBooleanExpressionImpl
+     * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getBinaryBooleanExpression()
+     * @generated
+     */
+    EClass BINARY_BOOLEAN_EXPRESSION = eINSTANCE.getBinaryBooleanExpression();
+
+    /**
+     * The meta object literal for the '<em><b>Left</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference BINARY_BOOLEAN_EXPRESSION__LEFT = eINSTANCE.getBinaryBooleanExpression_Left();
+
+    /**
+     * The meta object literal for the '<em><b>Operation</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute BINARY_BOOLEAN_EXPRESSION__OPERATION = eINSTANCE.getBinaryBooleanExpression_Operation();
+
+    /**
+     * The meta object literal for the '<em><b>Right</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference BINARY_BOOLEAN_EXPRESSION__RIGHT = eINSTANCE.getBinaryBooleanExpression_Right();
+
+    /**
+     * The meta object literal for the '{@link org.xtext.example.mydsl.myDsl.impl.UnaryBooleanExpressionImpl <em>Unary Boolean Expression</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.xtext.example.mydsl.myDsl.impl.UnaryBooleanExpressionImpl
+     * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getUnaryBooleanExpression()
+     * @generated
+     */
+    EClass UNARY_BOOLEAN_EXPRESSION = eINSTANCE.getUnaryBooleanExpression();
+
+    /**
+     * The meta object literal for the '<em><b>Inner</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference UNARY_BOOLEAN_EXPRESSION__INNER = eINSTANCE.getUnaryBooleanExpression_Inner();
+
+    /**
+     * The meta object literal for the '{@link org.xtext.example.mydsl.myDsl.impl.ComparisonImpl <em>Comparison</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.xtext.example.mydsl.myDsl.impl.ComparisonImpl
+     * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getComparison()
+     * @generated
+     */
+    EClass COMPARISON = eINSTANCE.getComparison();
+
+    /**
+     * The meta object literal for the '<em><b>Left</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference COMPARISON__LEFT = eINSTANCE.getComparison_Left();
+
+    /**
+     * The meta object literal for the '<em><b>Operation</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute COMPARISON__OPERATION = eINSTANCE.getComparison_Operation();
+
+    /**
+     * The meta object literal for the '<em><b>Right</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference COMPARISON__RIGHT = eINSTANCE.getComparison_Right();
+
+    /**
+     * The meta object literal for the '{@link org.xtext.example.mydsl.myDsl.impl.TermImpl <em>Term</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.xtext.example.mydsl.myDsl.impl.TermImpl
+     * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getTerm()
+     * @generated
+     */
+    EClass TERM = eINSTANCE.getTerm();
+
+    /**
+     * The meta object literal for the '<em><b>Left</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference TERM__LEFT = eINSTANCE.getTerm_Left();
+
+    /**
+     * The meta object literal for the '<em><b>Operation</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute TERM__OPERATION = eINSTANCE.getTerm_Operation();
+
+    /**
+     * The meta object literal for the '<em><b>Right</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference TERM__RIGHT = eINSTANCE.getTerm_Right();
+
+    /**
+     * The meta object literal for the '{@link org.xtext.example.mydsl.myDsl.impl.ProductImpl <em>Product</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.xtext.example.mydsl.myDsl.impl.ProductImpl
+     * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getProduct()
+     * @generated
+     */
+    EClass PRODUCT = eINSTANCE.getProduct();
+
+    /**
+     * The meta object literal for the '<em><b>Left</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference PRODUCT__LEFT = eINSTANCE.getProduct_Left();
+
+    /**
+     * The meta object literal for the '<em><b>Operation</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute PRODUCT__OPERATION = eINSTANCE.getProduct_Operation();
+
+    /**
+     * The meta object literal for the '<em><b>Right</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference PRODUCT__RIGHT = eINSTANCE.getProduct_Right();
+
+    /**
+     * The meta object literal for the '{@link org.xtext.example.mydsl.myDsl.impl.PowerImpl <em>Power</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.xtext.example.mydsl.myDsl.impl.PowerImpl
+     * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getPower()
+     * @generated
+     */
+    EClass POWER = eINSTANCE.getPower();
+
+    /**
+     * The meta object literal for the '<em><b>Base</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference POWER__BASE = eINSTANCE.getPower_Base();
+
+    /**
+     * The meta object literal for the '<em><b>Exponent</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference POWER__EXPONENT = eINSTANCE.getPower_Exponent();
+
+    /**
+     * The meta object literal for the '{@link org.xtext.example.mydsl.myDsl.ProductOperation <em>Product Operation</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.xtext.example.mydsl.myDsl.ProductOperation
+     * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getProductOperation()
+     * @generated
+     */
+    EEnum PRODUCT_OPERATION = eINSTANCE.getProductOperation();
+
+    /**
+     * The meta object literal for the '{@link org.xtext.example.mydsl.myDsl.TermOperation <em>Term Operation</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.xtext.example.mydsl.myDsl.TermOperation
+     * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getTermOperation()
+     * @generated
+     */
+    EEnum TERM_OPERATION = eINSTANCE.getTermOperation();
+
+    /**
+     * The meta object literal for the '{@link org.xtext.example.mydsl.myDsl.CompareOperation <em>Compare Operation</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.xtext.example.mydsl.myDsl.CompareOperation
+     * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getCompareOperation()
+     * @generated
+     */
+    EEnum COMPARE_OPERATION = eINSTANCE.getCompareOperation();
+
+    /**
+     * The meta object literal for the '{@link org.xtext.example.mydsl.myDsl.BooleanOperation <em>Boolean Operation</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.xtext.example.mydsl.myDsl.BooleanOperation
+     * @see org.xtext.example.mydsl.myDsl.impl.MyDslPackageImpl#getBooleanOperation()
+     * @generated
+     */
+    EEnum BOOLEAN_OPERATION = eINSTANCE.getBooleanOperation();
+
+  }
+
+} //MyDslPackage
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/Power.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/Power.java
new file mode 100644
index 0000000000000000000000000000000000000000..6be0fe8d100b7af46d988b54d7d9c03a5d44a27b
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/Power.java
@@ -0,0 +1,77 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Power</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.Power#getBase <em>Base</em>}</li>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.Power#getExponent <em>Exponent</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getPower()
+ * @model
+ * @generated
+ */
+public interface Power extends Expression
+{
+  /**
+   * Returns the value of the '<em><b>Base</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Base</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Base</em>' containment reference.
+   * @see #setBase(Expression)
+   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getPower_Base()
+   * @model containment="true"
+   * @generated
+   */
+  Expression getBase();
+
+  /**
+   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.Power#getBase <em>Base</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Base</em>' containment reference.
+   * @see #getBase()
+   * @generated
+   */
+  void setBase(Expression value);
+
+  /**
+   * Returns the value of the '<em><b>Exponent</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Exponent</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Exponent</em>' containment reference.
+   * @see #setExponent(Expression)
+   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getPower_Exponent()
+   * @model containment="true"
+   * @generated
+   */
+  Expression getExponent();
+
+  /**
+   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.Power#getExponent <em>Exponent</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Exponent</em>' containment reference.
+   * @see #getExponent()
+   * @generated
+   */
+  void setExponent(Expression value);
+
+} // Power
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/Product.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/Product.java
new file mode 100644
index 0000000000000000000000000000000000000000..5bf2f6327b71386d5d3520bb35656d87513cdbfa
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/Product.java
@@ -0,0 +1,107 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Product</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.Product#getLeft <em>Left</em>}</li>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.Product#getOperation <em>Operation</em>}</li>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.Product#getRight <em>Right</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getProduct()
+ * @model
+ * @generated
+ */
+public interface Product extends Expression
+{
+  /**
+   * Returns the value of the '<em><b>Left</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Left</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Left</em>' containment reference.
+   * @see #setLeft(Expression)
+   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getProduct_Left()
+   * @model containment="true"
+   * @generated
+   */
+  Expression getLeft();
+
+  /**
+   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.Product#getLeft <em>Left</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Left</em>' containment reference.
+   * @see #getLeft()
+   * @generated
+   */
+  void setLeft(Expression value);
+
+  /**
+   * Returns the value of the '<em><b>Operation</b></em>' attribute.
+   * The literals are from the enumeration {@link org.xtext.example.mydsl.myDsl.ProductOperation}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Operation</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Operation</em>' attribute.
+   * @see org.xtext.example.mydsl.myDsl.ProductOperation
+   * @see #setOperation(ProductOperation)
+   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getProduct_Operation()
+   * @model
+   * @generated
+   */
+  ProductOperation getOperation();
+
+  /**
+   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.Product#getOperation <em>Operation</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Operation</em>' attribute.
+   * @see org.xtext.example.mydsl.myDsl.ProductOperation
+   * @see #getOperation()
+   * @generated
+   */
+  void setOperation(ProductOperation value);
+
+  /**
+   * Returns the value of the '<em><b>Right</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Right</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Right</em>' containment reference.
+   * @see #setRight(Expression)
+   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getProduct_Right()
+   * @model containment="true"
+   * @generated
+   */
+  Expression getRight();
+
+  /**
+   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.Product#getRight <em>Right</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Right</em>' containment reference.
+   * @see #getRight()
+   * @generated
+   */
+  void setRight(Expression value);
+
+} // Product
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/ProductOperation.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/ProductOperation.java
new file mode 100644
index 0000000000000000000000000000000000000000..ca0479d13eb2e6a9770e26d86bdf8f6df41d182b
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/ProductOperation.java
@@ -0,0 +1,250 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Product Operation</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getProductOperation()
+ * @model
+ * @generated
+ */
+public enum ProductOperation implements Enumerator
+{
+  /**
+   * The '<em><b>MULT</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #MULT_VALUE
+   * @generated
+   * @ordered
+   */
+  MULT(0, "MULT", "*"),
+
+  /**
+   * The '<em><b>DIV</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #DIV_VALUE
+   * @generated
+   * @ordered
+   */
+  DIV(1, "DIV", "/"),
+
+  /**
+   * The '<em><b>MOD</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #MOD_VALUE
+   * @generated
+   * @ordered
+   */
+  MOD(2, "MOD", "%");
+
+  /**
+   * The '<em><b>MULT</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>MULT</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #MULT
+   * @model literal="*"
+   * @generated
+   * @ordered
+   */
+  public static final int MULT_VALUE = 0;
+
+  /**
+   * The '<em><b>DIV</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>DIV</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #DIV
+   * @model literal="/"
+   * @generated
+   * @ordered
+   */
+  public static final int DIV_VALUE = 1;
+
+  /**
+   * The '<em><b>MOD</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>MOD</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #MOD
+   * @model literal="%"
+   * @generated
+   * @ordered
+   */
+  public static final int MOD_VALUE = 2;
+
+  /**
+   * An array of all the '<em><b>Product Operation</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private static final ProductOperation[] VALUES_ARRAY =
+    new ProductOperation[]
+    {
+      MULT,
+      DIV,
+      MOD,
+    };
+
+  /**
+   * A public read-only list of all the '<em><b>Product Operation</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static final List<ProductOperation> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+  /**
+   * Returns the '<em><b>Product Operation</b></em>' literal with the specified literal value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static ProductOperation get(String literal)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      ProductOperation result = VALUES_ARRAY[i];
+      if (result.toString().equals(literal))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Product Operation</b></em>' literal with the specified name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static ProductOperation getByName(String name)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      ProductOperation result = VALUES_ARRAY[i];
+      if (result.getName().equals(name))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Product Operation</b></em>' literal with the specified integer value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static ProductOperation get(int value)
+  {
+    switch (value)
+    {
+      case MULT_VALUE: return MULT;
+      case DIV_VALUE: return DIV;
+      case MOD_VALUE: return MOD;
+    }
+    return null;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final int value;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String name;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String literal;
+
+  /**
+   * Only this class can construct instances.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private ProductOperation(int value, String name, String literal)
+  {
+    this.value = value;
+    this.name = name;
+    this.literal = literal;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public int getValue()
+  {
+    return value;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getLiteral()
+  {
+    return literal;
+  }
+
+  /**
+   * Returns the literal value of the enumerator, which is its string representation.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    return literal;
+  }
+  
+} //ProductOperation
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/Term.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/Term.java
index 22909702e72de35c179e57364f7e1c072f5fe670..3c6a9ce590a8056f8a448adb17801acb5859f15c 100644
--- a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/Term.java
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/Term.java
@@ -1,104 +1,107 @@
-/**
- */
-package org.xtext.example.mydsl.myDsl;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Term</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.xtext.example.mydsl.myDsl.Term#getLeft <em>Left</em>}</li>
- *   <li>{@link org.xtext.example.mydsl.myDsl.Term#getOperations <em>Operations</em>}</li>
- *   <li>{@link org.xtext.example.mydsl.myDsl.Term#getRight <em>Right</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getTerm()
- * @model
- * @generated
- */
-public interface Term extends Expression
-{
-  /**
-   * Returns the value of the '<em><b>Left</b></em>' containment reference.
-   * <!-- begin-user-doc -->
-   * <p>
-   * If the meaning of the '<em>Left</em>' containment reference isn't clear,
-   * there really should be more of a description here...
-   * </p>
-   * <!-- end-user-doc -->
-   * @return the value of the '<em>Left</em>' containment reference.
-   * @see #setLeft(Expression)
-   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getTerm_Left()
-   * @model containment="true"
-   * @generated
-   */
-  Expression getLeft();
-
-  /**
-   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.Term#getLeft <em>Left</em>}' containment reference.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @param value the new value of the '<em>Left</em>' containment reference.
-   * @see #getLeft()
-   * @generated
-   */
-  void setLeft(Expression value);
-
-  /**
-   * Returns the value of the '<em><b>Operations</b></em>' containment reference.
-   * <!-- begin-user-doc -->
-   * <p>
-   * If the meaning of the '<em>Operations</em>' containment reference isn't clear,
-   * there really should be more of a description here...
-   * </p>
-   * <!-- end-user-doc -->
-   * @return the value of the '<em>Operations</em>' containment reference.
-   * @see #setOperations(Expression)
-   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getTerm_Operations()
-   * @model containment="true"
-   * @generated
-   */
-  Expression getOperations();
-
-  /**
-   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.Term#getOperations <em>Operations</em>}' containment reference.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @param value the new value of the '<em>Operations</em>' containment reference.
-   * @see #getOperations()
-   * @generated
-   */
-  void setOperations(Expression value);
-
-  /**
-   * Returns the value of the '<em><b>Right</b></em>' containment reference.
-   * <!-- begin-user-doc -->
-   * <p>
-   * If the meaning of the '<em>Right</em>' containment reference isn't clear,
-   * there really should be more of a description here...
-   * </p>
-   * <!-- end-user-doc -->
-   * @return the value of the '<em>Right</em>' containment reference.
-   * @see #setRight(Expression)
-   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getTerm_Right()
-   * @model containment="true"
-   * @generated
-   */
-  Expression getRight();
-
-  /**
-   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.Term#getRight <em>Right</em>}' containment reference.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @param value the new value of the '<em>Right</em>' containment reference.
-   * @see #getRight()
-   * @generated
-   */
-  void setRight(Expression value);
-
-} // Term
+/**
+ */
+package org.xtext.example.mydsl.myDsl;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Term</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.Term#getLeft <em>Left</em>}</li>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.Term#getOperation <em>Operation</em>}</li>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.Term#getRight <em>Right</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getTerm()
+ * @model
+ * @generated
+ */
+public interface Term extends Expression
+{
+  /**
+   * Returns the value of the '<em><b>Left</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Left</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Left</em>' containment reference.
+   * @see #setLeft(Expression)
+   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getTerm_Left()
+   * @model containment="true"
+   * @generated
+   */
+  Expression getLeft();
+
+  /**
+   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.Term#getLeft <em>Left</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Left</em>' containment reference.
+   * @see #getLeft()
+   * @generated
+   */
+  void setLeft(Expression value);
+
+  /**
+   * Returns the value of the '<em><b>Operation</b></em>' attribute.
+   * The literals are from the enumeration {@link org.xtext.example.mydsl.myDsl.TermOperation}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Operation</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Operation</em>' attribute.
+   * @see org.xtext.example.mydsl.myDsl.TermOperation
+   * @see #setOperation(TermOperation)
+   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getTerm_Operation()
+   * @model
+   * @generated
+   */
+  TermOperation getOperation();
+
+  /**
+   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.Term#getOperation <em>Operation</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Operation</em>' attribute.
+   * @see org.xtext.example.mydsl.myDsl.TermOperation
+   * @see #getOperation()
+   * @generated
+   */
+  void setOperation(TermOperation value);
+
+  /**
+   * Returns the value of the '<em><b>Right</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Right</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Right</em>' containment reference.
+   * @see #setRight(Expression)
+   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getTerm_Right()
+   * @model containment="true"
+   * @generated
+   */
+  Expression getRight();
+
+  /**
+   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.Term#getRight <em>Right</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Right</em>' containment reference.
+   * @see #getRight()
+   * @generated
+   */
+  void setRight(Expression value);
+
+} // Term
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/TermOperation.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/TermOperation.java
new file mode 100644
index 0000000000000000000000000000000000000000..69c9b4c975351c88b6aeed319db3254e022e064e
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/TermOperation.java
@@ -0,0 +1,223 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Term Operation</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getTermOperation()
+ * @model
+ * @generated
+ */
+public enum TermOperation implements Enumerator
+{
+  /**
+   * The '<em><b>ADD</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #ADD_VALUE
+   * @generated
+   * @ordered
+   */
+  ADD(0, "ADD", "+"),
+
+  /**
+   * The '<em><b>SUB</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #SUB_VALUE
+   * @generated
+   * @ordered
+   */
+  SUB(1, "SUB", "-");
+
+  /**
+   * The '<em><b>ADD</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>ADD</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #ADD
+   * @model literal="+"
+   * @generated
+   * @ordered
+   */
+  public static final int ADD_VALUE = 0;
+
+  /**
+   * The '<em><b>SUB</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>SUB</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #SUB
+   * @model literal="-"
+   * @generated
+   * @ordered
+   */
+  public static final int SUB_VALUE = 1;
+
+  /**
+   * An array of all the '<em><b>Term Operation</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private static final TermOperation[] VALUES_ARRAY =
+    new TermOperation[]
+    {
+      ADD,
+      SUB,
+    };
+
+  /**
+   * A public read-only list of all the '<em><b>Term Operation</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static final List<TermOperation> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+  /**
+   * Returns the '<em><b>Term Operation</b></em>' literal with the specified literal value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static TermOperation get(String literal)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      TermOperation result = VALUES_ARRAY[i];
+      if (result.toString().equals(literal))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Term Operation</b></em>' literal with the specified name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static TermOperation getByName(String name)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      TermOperation result = VALUES_ARRAY[i];
+      if (result.getName().equals(name))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Term Operation</b></em>' literal with the specified integer value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static TermOperation get(int value)
+  {
+    switch (value)
+    {
+      case ADD_VALUE: return ADD;
+      case SUB_VALUE: return SUB;
+    }
+    return null;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final int value;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String name;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String literal;
+
+  /**
+   * Only this class can construct instances.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private TermOperation(int value, String name, String literal)
+  {
+    this.value = value;
+    this.name = name;
+    this.literal = literal;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public int getValue()
+  {
+    return value;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getLiteral()
+  {
+    return literal;
+  }
+
+  /**
+   * Returns the literal value of the enumerator, which is its string representation.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    return literal;
+  }
+  
+} //TermOperation
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/UnaryBooleanExpression.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/UnaryBooleanExpression.java
new file mode 100644
index 0000000000000000000000000000000000000000..38ffd6e6dbe1966279206cfcc984c41eb7ca5bc4
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/UnaryBooleanExpression.java
@@ -0,0 +1,50 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Unary Boolean Expression</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.UnaryBooleanExpression#getInner <em>Inner</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getUnaryBooleanExpression()
+ * @model
+ * @generated
+ */
+public interface UnaryBooleanExpression extends Expression
+{
+  /**
+   * Returns the value of the '<em><b>Inner</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Inner</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Inner</em>' containment reference.
+   * @see #setInner(Expression)
+   * @see org.xtext.example.mydsl.myDsl.MyDslPackage#getUnaryBooleanExpression_Inner()
+   * @model containment="true"
+   * @generated
+   */
+  Expression getInner();
+
+  /**
+   * Sets the value of the '{@link org.xtext.example.mydsl.myDsl.UnaryBooleanExpression#getInner <em>Inner</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Inner</em>' containment reference.
+   * @see #getInner()
+   * @generated
+   */
+  void setInner(Expression value);
+
+} // UnaryBooleanExpression
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/BinaryBooleanExpressionImpl.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/BinaryBooleanExpressionImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..14ecb1af4ee797ecb099fbe118e558f486f11b10
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/BinaryBooleanExpressionImpl.java
@@ -0,0 +1,336 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.xtext.example.mydsl.myDsl.BinaryBooleanExpression;
+import org.xtext.example.mydsl.myDsl.BooleanOperation;
+import org.xtext.example.mydsl.myDsl.Expression;
+import org.xtext.example.mydsl.myDsl.MyDslPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Binary Boolean Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.BinaryBooleanExpressionImpl#getLeft <em>Left</em>}</li>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.BinaryBooleanExpressionImpl#getOperation <em>Operation</em>}</li>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.BinaryBooleanExpressionImpl#getRight <em>Right</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class BinaryBooleanExpressionImpl extends ExpressionImpl implements BinaryBooleanExpression
+{
+  /**
+   * The cached value of the '{@link #getLeft() <em>Left</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getLeft()
+   * @generated
+   * @ordered
+   */
+  protected Expression left;
+
+  /**
+   * The default value of the '{@link #getOperation() <em>Operation</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getOperation()
+   * @generated
+   * @ordered
+   */
+  protected static final BooleanOperation OPERATION_EDEFAULT = BooleanOperation.AND;
+
+  /**
+   * The cached value of the '{@link #getOperation() <em>Operation</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getOperation()
+   * @generated
+   * @ordered
+   */
+  protected BooleanOperation operation = OPERATION_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getRight() <em>Right</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getRight()
+   * @generated
+   * @ordered
+   */
+  protected Expression right;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected BinaryBooleanExpressionImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return MyDslPackage.Literals.BINARY_BOOLEAN_EXPRESSION;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Expression getLeft()
+  {
+    return left;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetLeft(Expression newLeft, NotificationChain msgs)
+  {
+    Expression oldLeft = left;
+    left = newLeft;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MyDslPackage.BINARY_BOOLEAN_EXPRESSION__LEFT, oldLeft, newLeft);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setLeft(Expression newLeft)
+  {
+    if (newLeft != left)
+    {
+      NotificationChain msgs = null;
+      if (left != null)
+        msgs = ((InternalEObject)left).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.BINARY_BOOLEAN_EXPRESSION__LEFT, null, msgs);
+      if (newLeft != null)
+        msgs = ((InternalEObject)newLeft).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.BINARY_BOOLEAN_EXPRESSION__LEFT, null, msgs);
+      msgs = basicSetLeft(newLeft, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.BINARY_BOOLEAN_EXPRESSION__LEFT, newLeft, newLeft));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public BooleanOperation getOperation()
+  {
+    return operation;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setOperation(BooleanOperation newOperation)
+  {
+    BooleanOperation oldOperation = operation;
+    operation = newOperation == null ? OPERATION_EDEFAULT : newOperation;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.BINARY_BOOLEAN_EXPRESSION__OPERATION, oldOperation, operation));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Expression getRight()
+  {
+    return right;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetRight(Expression newRight, NotificationChain msgs)
+  {
+    Expression oldRight = right;
+    right = newRight;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MyDslPackage.BINARY_BOOLEAN_EXPRESSION__RIGHT, oldRight, newRight);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setRight(Expression newRight)
+  {
+    if (newRight != right)
+    {
+      NotificationChain msgs = null;
+      if (right != null)
+        msgs = ((InternalEObject)right).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.BINARY_BOOLEAN_EXPRESSION__RIGHT, null, msgs);
+      if (newRight != null)
+        msgs = ((InternalEObject)newRight).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.BINARY_BOOLEAN_EXPRESSION__RIGHT, null, msgs);
+      msgs = basicSetRight(newRight, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.BINARY_BOOLEAN_EXPRESSION__RIGHT, newRight, newRight));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.BINARY_BOOLEAN_EXPRESSION__LEFT:
+        return basicSetLeft(null, msgs);
+      case MyDslPackage.BINARY_BOOLEAN_EXPRESSION__RIGHT:
+        return basicSetRight(null, 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 MyDslPackage.BINARY_BOOLEAN_EXPRESSION__LEFT:
+        return getLeft();
+      case MyDslPackage.BINARY_BOOLEAN_EXPRESSION__OPERATION:
+        return getOperation();
+      case MyDslPackage.BINARY_BOOLEAN_EXPRESSION__RIGHT:
+        return getRight();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.BINARY_BOOLEAN_EXPRESSION__LEFT:
+        setLeft((Expression)newValue);
+        return;
+      case MyDslPackage.BINARY_BOOLEAN_EXPRESSION__OPERATION:
+        setOperation((BooleanOperation)newValue);
+        return;
+      case MyDslPackage.BINARY_BOOLEAN_EXPRESSION__RIGHT:
+        setRight((Expression)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.BINARY_BOOLEAN_EXPRESSION__LEFT:
+        setLeft((Expression)null);
+        return;
+      case MyDslPackage.BINARY_BOOLEAN_EXPRESSION__OPERATION:
+        setOperation(OPERATION_EDEFAULT);
+        return;
+      case MyDslPackage.BINARY_BOOLEAN_EXPRESSION__RIGHT:
+        setRight((Expression)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.BINARY_BOOLEAN_EXPRESSION__LEFT:
+        return left != null;
+      case MyDslPackage.BINARY_BOOLEAN_EXPRESSION__OPERATION:
+        return operation != OPERATION_EDEFAULT;
+      case MyDslPackage.BINARY_BOOLEAN_EXPRESSION__RIGHT:
+        return right != null;
+    }
+    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(" (operation: ");
+    result.append(operation);
+    result.append(')');
+    return result.toString();
+  }
+
+} //BinaryBooleanExpressionImpl
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/BooleanLiteralImpl.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/BooleanLiteralImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..3d2f553a42c1029b6724a796ebd962e8f2996dfd
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/BooleanLiteralImpl.java
@@ -0,0 +1,176 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.xtext.example.mydsl.myDsl.BooleanLiteral;
+import org.xtext.example.mydsl.myDsl.MyDslPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Boolean Literal</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.BooleanLiteralImpl#isValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class BooleanLiteralImpl extends ExpressionImpl implements BooleanLiteral
+{
+  /**
+   * The default value of the '{@link #isValue() <em>Value</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #isValue()
+   * @generated
+   * @ordered
+   */
+  protected static final boolean VALUE_EDEFAULT = false;
+
+  /**
+   * The cached value of the '{@link #isValue() <em>Value</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #isValue()
+   * @generated
+   * @ordered
+   */
+  protected boolean value = VALUE_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected BooleanLiteralImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return MyDslPackage.Literals.BOOLEAN_LITERAL;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public boolean isValue()
+  {
+    return value;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setValue(boolean newValue)
+  {
+    boolean oldValue = value;
+    value = newValue;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.BOOLEAN_LITERAL__VALUE, oldValue, value));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.BOOLEAN_LITERAL__VALUE:
+        return isValue();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.BOOLEAN_LITERAL__VALUE:
+        setValue((Boolean)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.BOOLEAN_LITERAL__VALUE:
+        setValue(VALUE_EDEFAULT);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.BOOLEAN_LITERAL__VALUE:
+        return value != VALUE_EDEFAULT;
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (value: ");
+    result.append(value);
+    result.append(')');
+    return result.toString();
+  }
+
+} //BooleanLiteralImpl
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/ComparisonImpl.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/ComparisonImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..c9e1700476affd5cd1cdb1f541c409f472b7e127
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/ComparisonImpl.java
@@ -0,0 +1,336 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.xtext.example.mydsl.myDsl.CompareOperation;
+import org.xtext.example.mydsl.myDsl.Comparison;
+import org.xtext.example.mydsl.myDsl.Expression;
+import org.xtext.example.mydsl.myDsl.MyDslPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Comparison</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.ComparisonImpl#getLeft <em>Left</em>}</li>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.ComparisonImpl#getOperation <em>Operation</em>}</li>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.ComparisonImpl#getRight <em>Right</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ComparisonImpl extends ExpressionImpl implements Comparison
+{
+  /**
+   * The cached value of the '{@link #getLeft() <em>Left</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getLeft()
+   * @generated
+   * @ordered
+   */
+  protected Expression left;
+
+  /**
+   * The default value of the '{@link #getOperation() <em>Operation</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getOperation()
+   * @generated
+   * @ordered
+   */
+  protected static final CompareOperation OPERATION_EDEFAULT = CompareOperation.GREATER;
+
+  /**
+   * The cached value of the '{@link #getOperation() <em>Operation</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getOperation()
+   * @generated
+   * @ordered
+   */
+  protected CompareOperation operation = OPERATION_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getRight() <em>Right</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getRight()
+   * @generated
+   * @ordered
+   */
+  protected Expression right;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ComparisonImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return MyDslPackage.Literals.COMPARISON;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Expression getLeft()
+  {
+    return left;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetLeft(Expression newLeft, NotificationChain msgs)
+  {
+    Expression oldLeft = left;
+    left = newLeft;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MyDslPackage.COMPARISON__LEFT, oldLeft, newLeft);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setLeft(Expression newLeft)
+  {
+    if (newLeft != left)
+    {
+      NotificationChain msgs = null;
+      if (left != null)
+        msgs = ((InternalEObject)left).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.COMPARISON__LEFT, null, msgs);
+      if (newLeft != null)
+        msgs = ((InternalEObject)newLeft).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.COMPARISON__LEFT, null, msgs);
+      msgs = basicSetLeft(newLeft, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.COMPARISON__LEFT, newLeft, newLeft));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public CompareOperation getOperation()
+  {
+    return operation;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setOperation(CompareOperation newOperation)
+  {
+    CompareOperation oldOperation = operation;
+    operation = newOperation == null ? OPERATION_EDEFAULT : newOperation;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.COMPARISON__OPERATION, oldOperation, operation));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Expression getRight()
+  {
+    return right;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetRight(Expression newRight, NotificationChain msgs)
+  {
+    Expression oldRight = right;
+    right = newRight;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MyDslPackage.COMPARISON__RIGHT, oldRight, newRight);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setRight(Expression newRight)
+  {
+    if (newRight != right)
+    {
+      NotificationChain msgs = null;
+      if (right != null)
+        msgs = ((InternalEObject)right).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.COMPARISON__RIGHT, null, msgs);
+      if (newRight != null)
+        msgs = ((InternalEObject)newRight).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.COMPARISON__RIGHT, null, msgs);
+      msgs = basicSetRight(newRight, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.COMPARISON__RIGHT, newRight, newRight));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.COMPARISON__LEFT:
+        return basicSetLeft(null, msgs);
+      case MyDslPackage.COMPARISON__RIGHT:
+        return basicSetRight(null, 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 MyDslPackage.COMPARISON__LEFT:
+        return getLeft();
+      case MyDslPackage.COMPARISON__OPERATION:
+        return getOperation();
+      case MyDslPackage.COMPARISON__RIGHT:
+        return getRight();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.COMPARISON__LEFT:
+        setLeft((Expression)newValue);
+        return;
+      case MyDslPackage.COMPARISON__OPERATION:
+        setOperation((CompareOperation)newValue);
+        return;
+      case MyDslPackage.COMPARISON__RIGHT:
+        setRight((Expression)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.COMPARISON__LEFT:
+        setLeft((Expression)null);
+        return;
+      case MyDslPackage.COMPARISON__OPERATION:
+        setOperation(OPERATION_EDEFAULT);
+        return;
+      case MyDslPackage.COMPARISON__RIGHT:
+        setRight((Expression)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.COMPARISON__LEFT:
+        return left != null;
+      case MyDslPackage.COMPARISON__OPERATION:
+        return operation != OPERATION_EDEFAULT;
+      case MyDslPackage.COMPARISON__RIGHT:
+        return right != null;
+    }
+    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(" (operation: ");
+    result.append(operation);
+    result.append(')');
+    return result.toString();
+  }
+
+} //ComparisonImpl
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/DoubleLiteralImpl.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/DoubleLiteralImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..7e1b280a5e55a1a178cc7d2f069fcf03179b44f0
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/DoubleLiteralImpl.java
@@ -0,0 +1,178 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl.impl;
+
+import java.math.BigDecimal;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.xtext.example.mydsl.myDsl.DoubleLiteral;
+import org.xtext.example.mydsl.myDsl.MyDslPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Double Literal</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.DoubleLiteralImpl#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DoubleLiteralImpl extends ExpressionImpl implements DoubleLiteral
+{
+  /**
+   * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getValue()
+   * @generated
+   * @ordered
+   */
+  protected static final BigDecimal VALUE_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getValue()
+   * @generated
+   * @ordered
+   */
+  protected BigDecimal value = VALUE_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected DoubleLiteralImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return MyDslPackage.Literals.DOUBLE_LITERAL;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public BigDecimal getValue()
+  {
+    return value;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setValue(BigDecimal newValue)
+  {
+    BigDecimal oldValue = value;
+    value = newValue;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.DOUBLE_LITERAL__VALUE, oldValue, value));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.DOUBLE_LITERAL__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 MyDslPackage.DOUBLE_LITERAL__VALUE:
+        setValue((BigDecimal)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.DOUBLE_LITERAL__VALUE:
+        setValue(VALUE_EDEFAULT);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.DOUBLE_LITERAL__VALUE:
+        return VALUE_EDEFAULT == null ? value != null : !VALUE_EDEFAULT.equals(value);
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (value: ");
+    result.append(value);
+    result.append(')');
+    return result.toString();
+  }
+
+} //DoubleLiteralImpl
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/ExpressionImpl.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/ExpressionImpl.java
index c842c14483e5a09d8a1bb8cc70991d96128b3bc3..ef10b4be481eb56853dd9155f4fd38a0b978e799 100644
--- a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/ExpressionImpl.java
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/ExpressionImpl.java
@@ -1,178 +1,44 @@
-/**
- */
-package org.xtext.example.mydsl.myDsl.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.xtext.example.mydsl.myDsl.Expression;
-import org.xtext.example.mydsl.myDsl.MyDslPackage;
-import org.xtext.example.mydsl.myDsl.OperationsType;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Expression</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.xtext.example.mydsl.myDsl.impl.ExpressionImpl#getTermOperations <em>Term Operations</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class ExpressionImpl extends MinimalEObjectImpl.Container implements Expression
-{
-  /**
-   * The default value of the '{@link #getTermOperations() <em>Term Operations</em>}' attribute.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @see #getTermOperations()
-   * @generated
-   * @ordered
-   */
-  protected static final OperationsType TERM_OPERATIONS_EDEFAULT = OperationsType.ADD;
-
-  /**
-   * The cached value of the '{@link #getTermOperations() <em>Term Operations</em>}' attribute.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @see #getTermOperations()
-   * @generated
-   * @ordered
-   */
-  protected OperationsType termOperations = TERM_OPERATIONS_EDEFAULT;
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  protected ExpressionImpl()
-  {
-    super();
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  @Override
-  protected EClass eStaticClass()
-  {
-    return MyDslPackage.Literals.EXPRESSION;
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public OperationsType getTermOperations()
-  {
-    return termOperations;
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public void setTermOperations(OperationsType newTermOperations)
-  {
-    OperationsType oldTermOperations = termOperations;
-    termOperations = newTermOperations == null ? TERM_OPERATIONS_EDEFAULT : newTermOperations;
-    if (eNotificationRequired())
-      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.EXPRESSION__TERM_OPERATIONS, oldTermOperations, termOperations));
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  @Override
-  public Object eGet(int featureID, boolean resolve, boolean coreType)
-  {
-    switch (featureID)
-    {
-      case MyDslPackage.EXPRESSION__TERM_OPERATIONS:
-        return getTermOperations();
-    }
-    return super.eGet(featureID, resolve, coreType);
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  @Override
-  public void eSet(int featureID, Object newValue)
-  {
-    switch (featureID)
-    {
-      case MyDslPackage.EXPRESSION__TERM_OPERATIONS:
-        setTermOperations((OperationsType)newValue);
-        return;
-    }
-    super.eSet(featureID, newValue);
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  @Override
-  public void eUnset(int featureID)
-  {
-    switch (featureID)
-    {
-      case MyDslPackage.EXPRESSION__TERM_OPERATIONS:
-        setTermOperations(TERM_OPERATIONS_EDEFAULT);
-        return;
-    }
-    super.eUnset(featureID);
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  @Override
-  public boolean eIsSet(int featureID)
-  {
-    switch (featureID)
-    {
-      case MyDslPackage.EXPRESSION__TERM_OPERATIONS:
-        return termOperations != TERM_OPERATIONS_EDEFAULT;
-    }
-    return super.eIsSet(featureID);
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  @Override
-  public String toString()
-  {
-    if (eIsProxy()) return super.toString();
-
-    StringBuffer result = new StringBuffer(super.toString());
-    result.append(" (termOperations: ");
-    result.append(termOperations);
-    result.append(')');
-    return result.toString();
-  }
-
-} //ExpressionImpl
+/**
+ */
+package org.xtext.example.mydsl.myDsl.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.xtext.example.mydsl.myDsl.Expression;
+import org.xtext.example.mydsl.myDsl.MyDslPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class ExpressionImpl extends MinimalEObjectImpl.Container implements Expression
+{
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ExpressionImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return MyDslPackage.Literals.EXPRESSION;
+  }
+
+} //ExpressionImpl
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/FormalParameterImpl.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/FormalParameterImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..72df4e25535e3c9dbf39b86b4095ea5cbf1071a8
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/FormalParameterImpl.java
@@ -0,0 +1,176 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.xtext.example.mydsl.myDsl.FormalParameter;
+import org.xtext.example.mydsl.myDsl.MyDslPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Formal Parameter</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.FormalParameterImpl#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class FormalParameterImpl extends ExpressionImpl implements FormalParameter
+{
+  /**
+   * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getValue()
+   * @generated
+   * @ordered
+   */
+  protected static final String VALUE_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getValue()
+   * @generated
+   * @ordered
+   */
+  protected String value = VALUE_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected FormalParameterImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return MyDslPackage.Literals.FORMAL_PARAMETER;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getValue()
+  {
+    return value;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setValue(String newValue)
+  {
+    String oldValue = value;
+    value = newValue;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.FORMAL_PARAMETER__VALUE, oldValue, value));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.FORMAL_PARAMETER__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 MyDslPackage.FORMAL_PARAMETER__VALUE:
+        setValue((String)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.FORMAL_PARAMETER__VALUE:
+        setValue(VALUE_EDEFAULT);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.FORMAL_PARAMETER__VALUE:
+        return VALUE_EDEFAULT == null ? value != null : !VALUE_EDEFAULT.equals(value);
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (value: ");
+    result.append(value);
+    result.append(')');
+    return result.toString();
+  }
+
+} //FormalParameterImpl
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/FunctionImpl.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/FunctionImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..7b2393681dfe062d1ca587b1e7023d9723d356ae
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/FunctionImpl.java
@@ -0,0 +1,239 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl.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.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.xtext.example.mydsl.myDsl.Expression;
+import org.xtext.example.mydsl.myDsl.Function;
+import org.xtext.example.mydsl.myDsl.MyDslPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Function</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.FunctionImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.FunctionImpl#getParameters <em>Parameters</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class FunctionImpl extends ExpressionImpl implements Function
+{
+  /**
+   * 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 #getParameters() <em>Parameters</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getParameters()
+   * @generated
+   * @ordered
+   */
+  protected EList<Expression> parameters;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected FunctionImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return MyDslPackage.Literals.FUNCTION;
+  }
+
+  /**
+   * <!-- 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, MyDslPackage.FUNCTION__NAME, oldName, name));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<Expression> getParameters()
+  {
+    if (parameters == null)
+    {
+      parameters = new EObjectContainmentEList<Expression>(Expression.class, this, MyDslPackage.FUNCTION__PARAMETERS);
+    }
+    return parameters;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.FUNCTION__PARAMETERS:
+        return ((InternalEList<?>)getParameters()).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 MyDslPackage.FUNCTION__NAME:
+        return getName();
+      case MyDslPackage.FUNCTION__PARAMETERS:
+        return getParameters();
+    }
+    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 MyDslPackage.FUNCTION__NAME:
+        setName((String)newValue);
+        return;
+      case MyDslPackage.FUNCTION__PARAMETERS:
+        getParameters().clear();
+        getParameters().addAll((Collection<? extends Expression>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.FUNCTION__NAME:
+        setName(NAME_EDEFAULT);
+        return;
+      case MyDslPackage.FUNCTION__PARAMETERS:
+        getParameters().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.FUNCTION__NAME:
+        return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+      case MyDslPackage.FUNCTION__PARAMETERS:
+        return parameters != null && !parameters.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();
+  }
+
+} //FunctionImpl
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/IfElseExpressionImpl.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/IfElseExpressionImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..87ec0fd4c41f3430d7b0200775a0c0b8597104de
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/IfElseExpressionImpl.java
@@ -0,0 +1,335 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.xtext.example.mydsl.myDsl.Expression;
+import org.xtext.example.mydsl.myDsl.IfElseExpression;
+import org.xtext.example.mydsl.myDsl.MyDslPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>If Else Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.IfElseExpressionImpl#getCondition <em>Condition</em>}</li>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.IfElseExpressionImpl#getTrueExp <em>True Exp</em>}</li>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.IfElseExpressionImpl#getFalseExp <em>False Exp</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class IfElseExpressionImpl extends ExpressionImpl implements IfElseExpression
+{
+  /**
+   * The cached value of the '{@link #getCondition() <em>Condition</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getCondition()
+   * @generated
+   * @ordered
+   */
+  protected Expression condition;
+
+  /**
+   * The cached value of the '{@link #getTrueExp() <em>True Exp</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getTrueExp()
+   * @generated
+   * @ordered
+   */
+  protected Expression trueExp;
+
+  /**
+   * The cached value of the '{@link #getFalseExp() <em>False Exp</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getFalseExp()
+   * @generated
+   * @ordered
+   */
+  protected Expression falseExp;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected IfElseExpressionImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return MyDslPackage.Literals.IF_ELSE_EXPRESSION;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Expression getCondition()
+  {
+    return condition;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetCondition(Expression newCondition, NotificationChain msgs)
+  {
+    Expression oldCondition = condition;
+    condition = newCondition;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MyDslPackage.IF_ELSE_EXPRESSION__CONDITION, oldCondition, newCondition);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setCondition(Expression newCondition)
+  {
+    if (newCondition != condition)
+    {
+      NotificationChain msgs = null;
+      if (condition != null)
+        msgs = ((InternalEObject)condition).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.IF_ELSE_EXPRESSION__CONDITION, null, msgs);
+      if (newCondition != null)
+        msgs = ((InternalEObject)newCondition).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.IF_ELSE_EXPRESSION__CONDITION, null, msgs);
+      msgs = basicSetCondition(newCondition, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.IF_ELSE_EXPRESSION__CONDITION, newCondition, newCondition));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Expression getTrueExp()
+  {
+    return trueExp;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetTrueExp(Expression newTrueExp, NotificationChain msgs)
+  {
+    Expression oldTrueExp = trueExp;
+    trueExp = newTrueExp;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MyDslPackage.IF_ELSE_EXPRESSION__TRUE_EXP, oldTrueExp, newTrueExp);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setTrueExp(Expression newTrueExp)
+  {
+    if (newTrueExp != trueExp)
+    {
+      NotificationChain msgs = null;
+      if (trueExp != null)
+        msgs = ((InternalEObject)trueExp).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.IF_ELSE_EXPRESSION__TRUE_EXP, null, msgs);
+      if (newTrueExp != null)
+        msgs = ((InternalEObject)newTrueExp).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.IF_ELSE_EXPRESSION__TRUE_EXP, null, msgs);
+      msgs = basicSetTrueExp(newTrueExp, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.IF_ELSE_EXPRESSION__TRUE_EXP, newTrueExp, newTrueExp));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Expression getFalseExp()
+  {
+    return falseExp;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetFalseExp(Expression newFalseExp, NotificationChain msgs)
+  {
+    Expression oldFalseExp = falseExp;
+    falseExp = newFalseExp;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MyDslPackage.IF_ELSE_EXPRESSION__FALSE_EXP, oldFalseExp, newFalseExp);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setFalseExp(Expression newFalseExp)
+  {
+    if (newFalseExp != falseExp)
+    {
+      NotificationChain msgs = null;
+      if (falseExp != null)
+        msgs = ((InternalEObject)falseExp).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.IF_ELSE_EXPRESSION__FALSE_EXP, null, msgs);
+      if (newFalseExp != null)
+        msgs = ((InternalEObject)newFalseExp).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.IF_ELSE_EXPRESSION__FALSE_EXP, null, msgs);
+      msgs = basicSetFalseExp(newFalseExp, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.IF_ELSE_EXPRESSION__FALSE_EXP, newFalseExp, newFalseExp));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.IF_ELSE_EXPRESSION__CONDITION:
+        return basicSetCondition(null, msgs);
+      case MyDslPackage.IF_ELSE_EXPRESSION__TRUE_EXP:
+        return basicSetTrueExp(null, msgs);
+      case MyDslPackage.IF_ELSE_EXPRESSION__FALSE_EXP:
+        return basicSetFalseExp(null, 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 MyDslPackage.IF_ELSE_EXPRESSION__CONDITION:
+        return getCondition();
+      case MyDslPackage.IF_ELSE_EXPRESSION__TRUE_EXP:
+        return getTrueExp();
+      case MyDslPackage.IF_ELSE_EXPRESSION__FALSE_EXP:
+        return getFalseExp();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.IF_ELSE_EXPRESSION__CONDITION:
+        setCondition((Expression)newValue);
+        return;
+      case MyDslPackage.IF_ELSE_EXPRESSION__TRUE_EXP:
+        setTrueExp((Expression)newValue);
+        return;
+      case MyDslPackage.IF_ELSE_EXPRESSION__FALSE_EXP:
+        setFalseExp((Expression)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.IF_ELSE_EXPRESSION__CONDITION:
+        setCondition((Expression)null);
+        return;
+      case MyDslPackage.IF_ELSE_EXPRESSION__TRUE_EXP:
+        setTrueExp((Expression)null);
+        return;
+      case MyDslPackage.IF_ELSE_EXPRESSION__FALSE_EXP:
+        setFalseExp((Expression)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.IF_ELSE_EXPRESSION__CONDITION:
+        return condition != null;
+      case MyDslPackage.IF_ELSE_EXPRESSION__TRUE_EXP:
+        return trueExp != null;
+      case MyDslPackage.IF_ELSE_EXPRESSION__FALSE_EXP:
+        return falseExp != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //IfElseExpressionImpl
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/IntLiteralImpl.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/IntLiteralImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..d4aa2b01474dfcb40acdb766c40047db6d2d7a21
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/IntLiteralImpl.java
@@ -0,0 +1,178 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl.impl;
+
+import java.math.BigInteger;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.xtext.example.mydsl.myDsl.IntLiteral;
+import org.xtext.example.mydsl.myDsl.MyDslPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Int Literal</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.IntLiteralImpl#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class IntLiteralImpl extends ExpressionImpl implements IntLiteral
+{
+  /**
+   * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getValue()
+   * @generated
+   * @ordered
+   */
+  protected static final BigInteger VALUE_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getValue()
+   * @generated
+   * @ordered
+   */
+  protected BigInteger value = VALUE_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected IntLiteralImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return MyDslPackage.Literals.INT_LITERAL;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public BigInteger getValue()
+  {
+    return value;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setValue(BigInteger newValue)
+  {
+    BigInteger oldValue = value;
+    value = newValue;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.INT_LITERAL__VALUE, oldValue, value));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.INT_LITERAL__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 MyDslPackage.INT_LITERAL__VALUE:
+        setValue((BigInteger)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.INT_LITERAL__VALUE:
+        setValue(VALUE_EDEFAULT);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.INT_LITERAL__VALUE:
+        return VALUE_EDEFAULT == null ? value != null : !VALUE_EDEFAULT.equals(value);
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (value: ");
+    result.append(value);
+    result.append(')');
+    return result.toString();
+  }
+
+} //IntLiteralImpl
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/ModelImpl.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/ModelImpl.java
index 285e692f908e166bf05aedccb76b0dccd16f1326..749d1b592190bf6a161d703adc04936599c6282d 100644
--- a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/ModelImpl.java
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/ModelImpl.java
@@ -1,167 +1,194 @@
-/**
- */
-package org.xtext.example.mydsl.myDsl.impl;
-
-import java.util.Collection;
-
-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.MinimalEObjectImpl;
-
-import org.eclipse.emf.ecore.util.EObjectContainmentEList;
-import org.eclipse.emf.ecore.util.InternalEList;
-
-import org.xtext.example.mydsl.myDsl.Expression;
-import org.xtext.example.mydsl.myDsl.Model;
-import org.xtext.example.mydsl.myDsl.MyDslPackage;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Model</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.xtext.example.mydsl.myDsl.impl.ModelImpl#getTerms <em>Terms</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class ModelImpl extends MinimalEObjectImpl.Container implements Model
-{
-  /**
-   * The cached value of the '{@link #getTerms() <em>Terms</em>}' containment reference list.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @see #getTerms()
-   * @generated
-   * @ordered
-   */
-  protected EList<Expression> terms;
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  protected ModelImpl()
-  {
-    super();
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  @Override
-  protected EClass eStaticClass()
-  {
-    return MyDslPackage.Literals.MODEL;
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public EList<Expression> getTerms()
-  {
-    if (terms == null)
-    {
-      terms = new EObjectContainmentEList<Expression>(Expression.class, this, MyDslPackage.MODEL__TERMS);
-    }
-    return terms;
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  @Override
-  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
-  {
-    switch (featureID)
-    {
-      case MyDslPackage.MODEL__TERMS:
-        return ((InternalEList<?>)getTerms()).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 MyDslPackage.MODEL__TERMS:
-        return getTerms();
-    }
-    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 MyDslPackage.MODEL__TERMS:
-        getTerms().clear();
-        getTerms().addAll((Collection<? extends Expression>)newValue);
-        return;
-    }
-    super.eSet(featureID, newValue);
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  @Override
-  public void eUnset(int featureID)
-  {
-    switch (featureID)
-    {
-      case MyDslPackage.MODEL__TERMS:
-        getTerms().clear();
-        return;
-    }
-    super.eUnset(featureID);
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  @Override
-  public boolean eIsSet(int featureID)
-  {
-    switch (featureID)
-    {
-      case MyDslPackage.MODEL__TERMS:
-        return terms != null && !terms.isEmpty();
-    }
-    return super.eIsSet(featureID);
-  }
-
-} //ModelImpl
+/**
+ */
+package org.xtext.example.mydsl.myDsl.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+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.xtext.example.mydsl.myDsl.Expression;
+import org.xtext.example.mydsl.myDsl.Model;
+import org.xtext.example.mydsl.myDsl.MyDslPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.ModelImpl#getTerms <em>Terms</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ModelImpl extends MinimalEObjectImpl.Container implements Model
+{
+  /**
+   * The cached value of the '{@link #getTerms() <em>Terms</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getTerms()
+   * @generated
+   * @ordered
+   */
+  protected Expression terms;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ModelImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return MyDslPackage.Literals.MODEL;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Expression getTerms()
+  {
+    return terms;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetTerms(Expression newTerms, NotificationChain msgs)
+  {
+    Expression oldTerms = terms;
+    terms = newTerms;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MyDslPackage.MODEL__TERMS, oldTerms, newTerms);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setTerms(Expression newTerms)
+  {
+    if (newTerms != terms)
+    {
+      NotificationChain msgs = null;
+      if (terms != null)
+        msgs = ((InternalEObject)terms).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.MODEL__TERMS, null, msgs);
+      if (newTerms != null)
+        msgs = ((InternalEObject)newTerms).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.MODEL__TERMS, null, msgs);
+      msgs = basicSetTerms(newTerms, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.MODEL__TERMS, newTerms, newTerms));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.MODEL__TERMS:
+        return basicSetTerms(null, 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 MyDslPackage.MODEL__TERMS:
+        return getTerms();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.MODEL__TERMS:
+        setTerms((Expression)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.MODEL__TERMS:
+        setTerms((Expression)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.MODEL__TERMS:
+        return terms != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //ModelImpl
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/MyDslFactoryImpl.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/MyDslFactoryImpl.java
index 267411954d9783fe758ae7b6d488b33df2011faf..1818c9ad4917b01a774f5761a4a391dc50153b6b 100644
--- a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/MyDslFactoryImpl.java
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/MyDslFactoryImpl.java
@@ -1,187 +1,397 @@
-/**
- */
-package org.xtext.example.mydsl.myDsl.impl;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EDataType;
-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.xtext.example.mydsl.myDsl.*;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model <b>Factory</b>.
- * <!-- end-user-doc -->
- * @generated
- */
-public class MyDslFactoryImpl extends EFactoryImpl implements MyDslFactory
-{
-  /**
-   * Creates the default factory implementation.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public static MyDslFactory init()
-  {
-    try
-    {
-      MyDslFactory theMyDslFactory = (MyDslFactory)EPackage.Registry.INSTANCE.getEFactory("http://www.xtext.org/example/mydsl/MyDsl"); 
-      if (theMyDslFactory != null)
-      {
-        return theMyDslFactory;
-      }
-    }
-    catch (Exception exception)
-    {
-      EcorePlugin.INSTANCE.log(exception);
-    }
-    return new MyDslFactoryImpl();
-  }
-
-  /**
-   * Creates an instance of the factory.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public MyDslFactoryImpl()
-  {
-    super();
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  @Override
-  public EObject create(EClass eClass)
-  {
-    switch (eClass.getClassifierID())
-    {
-      case MyDslPackage.MODEL: return createModel();
-      case MyDslPackage.EXPRESSION: return createExpression();
-      case MyDslPackage.TERM: return createTerm();
-      default:
-        throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
-    }
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  @Override
-  public Object createFromString(EDataType eDataType, String initialValue)
-  {
-    switch (eDataType.getClassifierID())
-    {
-      case MyDslPackage.OPERATIONS_TYPE:
-        return createOperationsTypeFromString(eDataType, initialValue);
-      default:
-        throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
-    }
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  @Override
-  public String convertToString(EDataType eDataType, Object instanceValue)
-  {
-    switch (eDataType.getClassifierID())
-    {
-      case MyDslPackage.OPERATIONS_TYPE:
-        return convertOperationsTypeToString(eDataType, instanceValue);
-      default:
-        throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
-    }
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public Model createModel()
-  {
-    ModelImpl model = new ModelImpl();
-    return model;
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public Expression createExpression()
-  {
-    ExpressionImpl expression = new ExpressionImpl();
-    return expression;
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public Term createTerm()
-  {
-    TermImpl term = new TermImpl();
-    return term;
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public OperationsType createOperationsTypeFromString(EDataType eDataType, String initialValue)
-  {
-    OperationsType result = OperationsType.get(initialValue);
-    if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
-    return result;
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public String convertOperationsTypeToString(EDataType eDataType, Object instanceValue)
-  {
-    return instanceValue == null ? null : instanceValue.toString();
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public MyDslPackage getMyDslPackage()
-  {
-    return (MyDslPackage)getEPackage();
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @deprecated
-   * @generated
-   */
-  @Deprecated
-  public static MyDslPackage getPackage()
-  {
-    return MyDslPackage.eINSTANCE;
-  }
-
-} //MyDslFactoryImpl
+/**
+ */
+package org.xtext.example.mydsl.myDsl.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+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.xtext.example.mydsl.myDsl.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class MyDslFactoryImpl extends EFactoryImpl implements MyDslFactory
+{
+  /**
+   * Creates the default factory implementation.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static MyDslFactory init()
+  {
+    try
+    {
+      MyDslFactory theMyDslFactory = (MyDslFactory)EPackage.Registry.INSTANCE.getEFactory("http://www.xtext.org/example/mydsl/MyDsl"); 
+      if (theMyDslFactory != null)
+      {
+        return theMyDslFactory;
+      }
+    }
+    catch (Exception exception)
+    {
+      EcorePlugin.INSTANCE.log(exception);
+    }
+    return new MyDslFactoryImpl();
+  }
+
+  /**
+   * Creates an instance of the factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public MyDslFactoryImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public EObject create(EClass eClass)
+  {
+    switch (eClass.getClassifierID())
+    {
+      case MyDslPackage.MODEL: return createModel();
+      case MyDslPackage.EXPRESSION: return createExpression();
+      case MyDslPackage.FUNCTION: return createFunction();
+      case MyDslPackage.FORMAL_PARAMETER: return createFormalParameter();
+      case MyDslPackage.BOOLEAN_LITERAL: return createBooleanLiteral();
+      case MyDslPackage.INT_LITERAL: return createIntLiteral();
+      case MyDslPackage.DOUBLE_LITERAL: return createDoubleLiteral();
+      case MyDslPackage.IF_ELSE_EXPRESSION: return createIfElseExpression();
+      case MyDslPackage.BINARY_BOOLEAN_EXPRESSION: return createBinaryBooleanExpression();
+      case MyDslPackage.UNARY_BOOLEAN_EXPRESSION: return createUnaryBooleanExpression();
+      case MyDslPackage.COMPARISON: return createComparison();
+      case MyDslPackage.TERM: return createTerm();
+      case MyDslPackage.PRODUCT: return createProduct();
+      case MyDslPackage.POWER: return createPower();
+      default:
+        throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object createFromString(EDataType eDataType, String initialValue)
+  {
+    switch (eDataType.getClassifierID())
+    {
+      case MyDslPackage.PRODUCT_OPERATION:
+        return createProductOperationFromString(eDataType, initialValue);
+      case MyDslPackage.TERM_OPERATION:
+        return createTermOperationFromString(eDataType, initialValue);
+      case MyDslPackage.COMPARE_OPERATION:
+        return createCompareOperationFromString(eDataType, initialValue);
+      case MyDslPackage.BOOLEAN_OPERATION:
+        return createBooleanOperationFromString(eDataType, initialValue);
+      default:
+        throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String convertToString(EDataType eDataType, Object instanceValue)
+  {
+    switch (eDataType.getClassifierID())
+    {
+      case MyDslPackage.PRODUCT_OPERATION:
+        return convertProductOperationToString(eDataType, instanceValue);
+      case MyDslPackage.TERM_OPERATION:
+        return convertTermOperationToString(eDataType, instanceValue);
+      case MyDslPackage.COMPARE_OPERATION:
+        return convertCompareOperationToString(eDataType, instanceValue);
+      case MyDslPackage.BOOLEAN_OPERATION:
+        return convertBooleanOperationToString(eDataType, instanceValue);
+      default:
+        throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Model createModel()
+  {
+    ModelImpl model = new ModelImpl();
+    return model;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Expression createExpression()
+  {
+    ExpressionImpl expression = new ExpressionImpl();
+    return expression;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Function createFunction()
+  {
+    FunctionImpl function = new FunctionImpl();
+    return function;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public FormalParameter createFormalParameter()
+  {
+    FormalParameterImpl formalParameter = new FormalParameterImpl();
+    return formalParameter;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public BooleanLiteral createBooleanLiteral()
+  {
+    BooleanLiteralImpl booleanLiteral = new BooleanLiteralImpl();
+    return booleanLiteral;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public IntLiteral createIntLiteral()
+  {
+    IntLiteralImpl intLiteral = new IntLiteralImpl();
+    return intLiteral;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public DoubleLiteral createDoubleLiteral()
+  {
+    DoubleLiteralImpl doubleLiteral = new DoubleLiteralImpl();
+    return doubleLiteral;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public IfElseExpression createIfElseExpression()
+  {
+    IfElseExpressionImpl ifElseExpression = new IfElseExpressionImpl();
+    return ifElseExpression;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public BinaryBooleanExpression createBinaryBooleanExpression()
+  {
+    BinaryBooleanExpressionImpl binaryBooleanExpression = new BinaryBooleanExpressionImpl();
+    return binaryBooleanExpression;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public UnaryBooleanExpression createUnaryBooleanExpression()
+  {
+    UnaryBooleanExpressionImpl unaryBooleanExpression = new UnaryBooleanExpressionImpl();
+    return unaryBooleanExpression;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Comparison createComparison()
+  {
+    ComparisonImpl comparison = new ComparisonImpl();
+    return comparison;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Term createTerm()
+  {
+    TermImpl term = new TermImpl();
+    return term;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Product createProduct()
+  {
+    ProductImpl product = new ProductImpl();
+    return product;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Power createPower()
+  {
+    PowerImpl power = new PowerImpl();
+    return power;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ProductOperation createProductOperationFromString(EDataType eDataType, String initialValue)
+  {
+    ProductOperation result = ProductOperation.get(initialValue);
+    if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+    return result;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String convertProductOperationToString(EDataType eDataType, Object instanceValue)
+  {
+    return instanceValue == null ? null : instanceValue.toString();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public TermOperation createTermOperationFromString(EDataType eDataType, String initialValue)
+  {
+    TermOperation result = TermOperation.get(initialValue);
+    if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+    return result;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String convertTermOperationToString(EDataType eDataType, Object instanceValue)
+  {
+    return instanceValue == null ? null : instanceValue.toString();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public CompareOperation createCompareOperationFromString(EDataType eDataType, String initialValue)
+  {
+    CompareOperation result = CompareOperation.get(initialValue);
+    if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+    return result;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String convertCompareOperationToString(EDataType eDataType, Object instanceValue)
+  {
+    return instanceValue == null ? null : instanceValue.toString();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public BooleanOperation createBooleanOperationFromString(EDataType eDataType, String initialValue)
+  {
+    BooleanOperation result = BooleanOperation.get(initialValue);
+    if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+    return result;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String convertBooleanOperationToString(EDataType eDataType, Object instanceValue)
+  {
+    return instanceValue == null ? null : instanceValue.toString();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public MyDslPackage getMyDslPackage()
+  {
+    return (MyDslPackage)getEPackage();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @deprecated
+   * @generated
+   */
+  @Deprecated
+  public static MyDslPackage getPackage()
+  {
+    return MyDslPackage.eINSTANCE;
+  }
+
+} //MyDslFactoryImpl
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/MyDslPackageImpl.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/MyDslPackageImpl.java
index 43380a7b29b982db35e51487213518f65773be5e..c2424078d4b8d0645d1d572d56959078a2bf4849 100644
--- a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/MyDslPackageImpl.java
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/MyDslPackageImpl.java
@@ -1,318 +1,874 @@
-/**
- */
-package org.xtext.example.mydsl.myDsl.impl;
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EEnum;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EReference;
-
-import org.eclipse.emf.ecore.impl.EPackageImpl;
-
-import org.xtext.example.mydsl.myDsl.Expression;
-import org.xtext.example.mydsl.myDsl.Model;
-import org.xtext.example.mydsl.myDsl.MyDslFactory;
-import org.xtext.example.mydsl.myDsl.MyDslPackage;
-import org.xtext.example.mydsl.myDsl.OperationsType;
-import org.xtext.example.mydsl.myDsl.Term;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model <b>Package</b>.
- * <!-- end-user-doc -->
- * @generated
- */
-public class MyDslPackageImpl extends EPackageImpl implements MyDslPackage
-{
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  private EClass modelEClass = null;
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  private EClass expressionEClass = null;
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  private EClass termEClass = null;
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  private EEnum operationsTypeEEnum = 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.xtext.example.mydsl.myDsl.MyDslPackage#eNS_URI
-   * @see #init()
-   * @generated
-   */
-  private MyDslPackageImpl()
-  {
-    super(eNS_URI, MyDslFactory.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 MyDslPackage#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 MyDslPackage init()
-  {
-    if (isInited) return (MyDslPackage)EPackage.Registry.INSTANCE.getEPackage(MyDslPackage.eNS_URI);
-
-    // Obtain or create and register package
-    MyDslPackageImpl theMyDslPackage = (MyDslPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof MyDslPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new MyDslPackageImpl());
-
-    isInited = true;
-
-    // Create package meta-data objects
-    theMyDslPackage.createPackageContents();
-
-    // Initialize created meta-data
-    theMyDslPackage.initializePackageContents();
-
-    // Mark meta-data to indicate it can't be changed
-    theMyDslPackage.freeze();
-
-  
-    // Update the registry and return the package
-    EPackage.Registry.INSTANCE.put(MyDslPackage.eNS_URI, theMyDslPackage);
-    return theMyDslPackage;
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public EClass getModel()
-  {
-    return modelEClass;
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public EReference getModel_Terms()
-  {
-    return (EReference)modelEClass.getEStructuralFeatures().get(0);
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public EClass getExpression()
-  {
-    return expressionEClass;
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public EAttribute getExpression_TermOperations()
-  {
-    return (EAttribute)expressionEClass.getEStructuralFeatures().get(0);
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public EClass getTerm()
-  {
-    return termEClass;
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public EReference getTerm_Left()
-  {
-    return (EReference)termEClass.getEStructuralFeatures().get(0);
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public EReference getTerm_Operations()
-  {
-    return (EReference)termEClass.getEStructuralFeatures().get(1);
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public EReference getTerm_Right()
-  {
-    return (EReference)termEClass.getEStructuralFeatures().get(2);
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public EEnum getOperationsType()
-  {
-    return operationsTypeEEnum;
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public MyDslFactory getMyDslFactory()
-  {
-    return (MyDslFactory)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
-    modelEClass = createEClass(MODEL);
-    createEReference(modelEClass, MODEL__TERMS);
-
-    expressionEClass = createEClass(EXPRESSION);
-    createEAttribute(expressionEClass, EXPRESSION__TERM_OPERATIONS);
-
-    termEClass = createEClass(TERM);
-    createEReference(termEClass, TERM__LEFT);
-    createEReference(termEClass, TERM__OPERATIONS);
-    createEReference(termEClass, TERM__RIGHT);
-
-    // Create enums
-    operationsTypeEEnum = createEEnum(OPERATIONS_TYPE);
-  }
-
-  /**
-   * <!-- 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
-    termEClass.getESuperTypes().add(this.getExpression());
-
-    // Initialize classes and features; add operations and parameters
-    initEClass(modelEClass, Model.class, "Model", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-    initEReference(getModel_Terms(), this.getExpression(), null, "terms", null, 0, -1, Model.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-
-    initEClass(expressionEClass, Expression.class, "Expression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-    initEAttribute(getExpression_TermOperations(), this.getOperationsType(), "termOperations", null, 0, 1, Expression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-
-    initEClass(termEClass, Term.class, "Term", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-    initEReference(getTerm_Left(), this.getExpression(), null, "left", null, 0, 1, Term.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-    initEReference(getTerm_Operations(), this.getExpression(), null, "Operations", null, 0, 1, Term.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-    initEReference(getTerm_Right(), this.getExpression(), null, "right", null, 0, 1, Term.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-
-    // Initialize enums and add enum literals
-    initEEnum(operationsTypeEEnum, OperationsType.class, "OperationsType");
-    addEEnumLiteral(operationsTypeEEnum, OperationsType.ADD);
-    addEEnumLiteral(operationsTypeEEnum, OperationsType.SUB);
-    addEEnumLiteral(operationsTypeEEnum, OperationsType.MULT);
-    addEEnumLiteral(operationsTypeEEnum, OperationsType.DIV);
-    addEEnumLiteral(operationsTypeEEnum, OperationsType.MOD);
-    addEEnumLiteral(operationsTypeEEnum, OperationsType.GREATER);
-    addEEnumLiteral(operationsTypeEEnum, OperationsType.LESS);
-    addEEnumLiteral(operationsTypeEEnum, OperationsType.EQUALS);
-    addEEnumLiteral(operationsTypeEEnum, OperationsType.NOTEQUAL);
-    addEEnumLiteral(operationsTypeEEnum, OperationsType.LESSEQUAL);
-    addEEnumLiteral(operationsTypeEEnum, OperationsType.GREATEREQUAL);
-    addEEnumLiteral(operationsTypeEEnum, OperationsType.AND);
-    addEEnumLiteral(operationsTypeEEnum, OperationsType.OR);
-    addEEnumLiteral(operationsTypeEEnum, OperationsType.XOR);
-
-    // Create resource
-    createResource(eNS_URI);
-  }
-
-} //MyDslPackageImpl
+/**
+ */
+package org.xtext.example.mydsl.myDsl.impl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.xtext.example.mydsl.myDsl.BinaryBooleanExpression;
+import org.xtext.example.mydsl.myDsl.BooleanLiteral;
+import org.xtext.example.mydsl.myDsl.BooleanOperation;
+import org.xtext.example.mydsl.myDsl.CompareOperation;
+import org.xtext.example.mydsl.myDsl.Comparison;
+import org.xtext.example.mydsl.myDsl.DoubleLiteral;
+import org.xtext.example.mydsl.myDsl.Expression;
+import org.xtext.example.mydsl.myDsl.FormalParameter;
+import org.xtext.example.mydsl.myDsl.Function;
+import org.xtext.example.mydsl.myDsl.IfElseExpression;
+import org.xtext.example.mydsl.myDsl.IntLiteral;
+import org.xtext.example.mydsl.myDsl.Model;
+import org.xtext.example.mydsl.myDsl.MyDslFactory;
+import org.xtext.example.mydsl.myDsl.MyDslPackage;
+import org.xtext.example.mydsl.myDsl.Power;
+import org.xtext.example.mydsl.myDsl.Product;
+import org.xtext.example.mydsl.myDsl.ProductOperation;
+import org.xtext.example.mydsl.myDsl.Term;
+import org.xtext.example.mydsl.myDsl.TermOperation;
+import org.xtext.example.mydsl.myDsl.UnaryBooleanExpression;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class MyDslPackageImpl extends EPackageImpl implements MyDslPackage
+{
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass modelEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass expressionEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass functionEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass formalParameterEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass booleanLiteralEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass intLiteralEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass doubleLiteralEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass ifElseExpressionEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass binaryBooleanExpressionEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass unaryBooleanExpressionEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass comparisonEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass termEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass productEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass powerEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EEnum productOperationEEnum = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EEnum termOperationEEnum = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EEnum compareOperationEEnum = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EEnum booleanOperationEEnum = 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.xtext.example.mydsl.myDsl.MyDslPackage#eNS_URI
+   * @see #init()
+   * @generated
+   */
+  private MyDslPackageImpl()
+  {
+    super(eNS_URI, MyDslFactory.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 MyDslPackage#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 MyDslPackage init()
+  {
+    if (isInited) return (MyDslPackage)EPackage.Registry.INSTANCE.getEPackage(MyDslPackage.eNS_URI);
+
+    // Obtain or create and register package
+    MyDslPackageImpl theMyDslPackage = (MyDslPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof MyDslPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new MyDslPackageImpl());
+
+    isInited = true;
+
+    // Create package meta-data objects
+    theMyDslPackage.createPackageContents();
+
+    // Initialize created meta-data
+    theMyDslPackage.initializePackageContents();
+
+    // Mark meta-data to indicate it can't be changed
+    theMyDslPackage.freeze();
+
+  
+    // Update the registry and return the package
+    EPackage.Registry.INSTANCE.put(MyDslPackage.eNS_URI, theMyDslPackage);
+    return theMyDslPackage;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getModel()
+  {
+    return modelEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getModel_Terms()
+  {
+    return (EReference)modelEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getExpression()
+  {
+    return expressionEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getFunction()
+  {
+    return functionEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getFunction_Name()
+  {
+    return (EAttribute)functionEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getFunction_Parameters()
+  {
+    return (EReference)functionEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getFormalParameter()
+  {
+    return formalParameterEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getFormalParameter_Value()
+  {
+    return (EAttribute)formalParameterEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getBooleanLiteral()
+  {
+    return booleanLiteralEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getBooleanLiteral_Value()
+  {
+    return (EAttribute)booleanLiteralEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getIntLiteral()
+  {
+    return intLiteralEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getIntLiteral_Value()
+  {
+    return (EAttribute)intLiteralEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getDoubleLiteral()
+  {
+    return doubleLiteralEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getDoubleLiteral_Value()
+  {
+    return (EAttribute)doubleLiteralEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getIfElseExpression()
+  {
+    return ifElseExpressionEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getIfElseExpression_Condition()
+  {
+    return (EReference)ifElseExpressionEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getIfElseExpression_TrueExp()
+  {
+    return (EReference)ifElseExpressionEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getIfElseExpression_FalseExp()
+  {
+    return (EReference)ifElseExpressionEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getBinaryBooleanExpression()
+  {
+    return binaryBooleanExpressionEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getBinaryBooleanExpression_Left()
+  {
+    return (EReference)binaryBooleanExpressionEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getBinaryBooleanExpression_Operation()
+  {
+    return (EAttribute)binaryBooleanExpressionEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getBinaryBooleanExpression_Right()
+  {
+    return (EReference)binaryBooleanExpressionEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getUnaryBooleanExpression()
+  {
+    return unaryBooleanExpressionEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getUnaryBooleanExpression_Inner()
+  {
+    return (EReference)unaryBooleanExpressionEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getComparison()
+  {
+    return comparisonEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getComparison_Left()
+  {
+    return (EReference)comparisonEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getComparison_Operation()
+  {
+    return (EAttribute)comparisonEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getComparison_Right()
+  {
+    return (EReference)comparisonEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getTerm()
+  {
+    return termEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getTerm_Left()
+  {
+    return (EReference)termEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getTerm_Operation()
+  {
+    return (EAttribute)termEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getTerm_Right()
+  {
+    return (EReference)termEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getProduct()
+  {
+    return productEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getProduct_Left()
+  {
+    return (EReference)productEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getProduct_Operation()
+  {
+    return (EAttribute)productEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getProduct_Right()
+  {
+    return (EReference)productEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getPower()
+  {
+    return powerEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getPower_Base()
+  {
+    return (EReference)powerEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getPower_Exponent()
+  {
+    return (EReference)powerEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EEnum getProductOperation()
+  {
+    return productOperationEEnum;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EEnum getTermOperation()
+  {
+    return termOperationEEnum;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EEnum getCompareOperation()
+  {
+    return compareOperationEEnum;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EEnum getBooleanOperation()
+  {
+    return booleanOperationEEnum;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public MyDslFactory getMyDslFactory()
+  {
+    return (MyDslFactory)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
+    modelEClass = createEClass(MODEL);
+    createEReference(modelEClass, MODEL__TERMS);
+
+    expressionEClass = createEClass(EXPRESSION);
+
+    functionEClass = createEClass(FUNCTION);
+    createEAttribute(functionEClass, FUNCTION__NAME);
+    createEReference(functionEClass, FUNCTION__PARAMETERS);
+
+    formalParameterEClass = createEClass(FORMAL_PARAMETER);
+    createEAttribute(formalParameterEClass, FORMAL_PARAMETER__VALUE);
+
+    booleanLiteralEClass = createEClass(BOOLEAN_LITERAL);
+    createEAttribute(booleanLiteralEClass, BOOLEAN_LITERAL__VALUE);
+
+    intLiteralEClass = createEClass(INT_LITERAL);
+    createEAttribute(intLiteralEClass, INT_LITERAL__VALUE);
+
+    doubleLiteralEClass = createEClass(DOUBLE_LITERAL);
+    createEAttribute(doubleLiteralEClass, DOUBLE_LITERAL__VALUE);
+
+    ifElseExpressionEClass = createEClass(IF_ELSE_EXPRESSION);
+    createEReference(ifElseExpressionEClass, IF_ELSE_EXPRESSION__CONDITION);
+    createEReference(ifElseExpressionEClass, IF_ELSE_EXPRESSION__TRUE_EXP);
+    createEReference(ifElseExpressionEClass, IF_ELSE_EXPRESSION__FALSE_EXP);
+
+    binaryBooleanExpressionEClass = createEClass(BINARY_BOOLEAN_EXPRESSION);
+    createEReference(binaryBooleanExpressionEClass, BINARY_BOOLEAN_EXPRESSION__LEFT);
+    createEAttribute(binaryBooleanExpressionEClass, BINARY_BOOLEAN_EXPRESSION__OPERATION);
+    createEReference(binaryBooleanExpressionEClass, BINARY_BOOLEAN_EXPRESSION__RIGHT);
+
+    unaryBooleanExpressionEClass = createEClass(UNARY_BOOLEAN_EXPRESSION);
+    createEReference(unaryBooleanExpressionEClass, UNARY_BOOLEAN_EXPRESSION__INNER);
+
+    comparisonEClass = createEClass(COMPARISON);
+    createEReference(comparisonEClass, COMPARISON__LEFT);
+    createEAttribute(comparisonEClass, COMPARISON__OPERATION);
+    createEReference(comparisonEClass, COMPARISON__RIGHT);
+
+    termEClass = createEClass(TERM);
+    createEReference(termEClass, TERM__LEFT);
+    createEAttribute(termEClass, TERM__OPERATION);
+    createEReference(termEClass, TERM__RIGHT);
+
+    productEClass = createEClass(PRODUCT);
+    createEReference(productEClass, PRODUCT__LEFT);
+    createEAttribute(productEClass, PRODUCT__OPERATION);
+    createEReference(productEClass, PRODUCT__RIGHT);
+
+    powerEClass = createEClass(POWER);
+    createEReference(powerEClass, POWER__BASE);
+    createEReference(powerEClass, POWER__EXPONENT);
+
+    // Create enums
+    productOperationEEnum = createEEnum(PRODUCT_OPERATION);
+    termOperationEEnum = createEEnum(TERM_OPERATION);
+    compareOperationEEnum = createEEnum(COMPARE_OPERATION);
+    booleanOperationEEnum = createEEnum(BOOLEAN_OPERATION);
+  }
+
+  /**
+   * <!-- 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
+    functionEClass.getESuperTypes().add(this.getExpression());
+    formalParameterEClass.getESuperTypes().add(this.getExpression());
+    booleanLiteralEClass.getESuperTypes().add(this.getExpression());
+    intLiteralEClass.getESuperTypes().add(this.getExpression());
+    doubleLiteralEClass.getESuperTypes().add(this.getExpression());
+    ifElseExpressionEClass.getESuperTypes().add(this.getExpression());
+    binaryBooleanExpressionEClass.getESuperTypes().add(this.getExpression());
+    unaryBooleanExpressionEClass.getESuperTypes().add(this.getExpression());
+    comparisonEClass.getESuperTypes().add(this.getExpression());
+    termEClass.getESuperTypes().add(this.getExpression());
+    productEClass.getESuperTypes().add(this.getExpression());
+    powerEClass.getESuperTypes().add(this.getExpression());
+
+    // Initialize classes and features; add operations and parameters
+    initEClass(modelEClass, Model.class, "Model", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getModel_Terms(), this.getExpression(), null, "terms", null, 0, 1, Model.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(expressionEClass, Expression.class, "Expression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+    initEClass(functionEClass, Function.class, "Function", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getFunction_Name(), ecorePackage.getEString(), "name", null, 0, 1, Function.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getFunction_Parameters(), this.getExpression(), null, "parameters", null, 0, -1, Function.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(formalParameterEClass, FormalParameter.class, "FormalParameter", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getFormalParameter_Value(), ecorePackage.getEString(), "value", null, 0, 1, FormalParameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(booleanLiteralEClass, BooleanLiteral.class, "BooleanLiteral", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getBooleanLiteral_Value(), ecorePackage.getEBoolean(), "value", null, 0, 1, BooleanLiteral.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(intLiteralEClass, IntLiteral.class, "IntLiteral", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getIntLiteral_Value(), ecorePackage.getEBigInteger(), "value", null, 0, 1, IntLiteral.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(doubleLiteralEClass, DoubleLiteral.class, "DoubleLiteral", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getDoubleLiteral_Value(), ecorePackage.getEBigDecimal(), "value", null, 0, 1, DoubleLiteral.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(ifElseExpressionEClass, IfElseExpression.class, "IfElseExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getIfElseExpression_Condition(), this.getExpression(), null, "condition", null, 0, 1, IfElseExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getIfElseExpression_TrueExp(), this.getExpression(), null, "trueExp", null, 0, 1, IfElseExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getIfElseExpression_FalseExp(), this.getExpression(), null, "falseExp", null, 0, 1, IfElseExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(binaryBooleanExpressionEClass, BinaryBooleanExpression.class, "BinaryBooleanExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getBinaryBooleanExpression_Left(), this.getExpression(), null, "left", null, 0, 1, BinaryBooleanExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getBinaryBooleanExpression_Operation(), this.getBooleanOperation(), "operation", null, 0, 1, BinaryBooleanExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getBinaryBooleanExpression_Right(), this.getExpression(), null, "right", null, 0, 1, BinaryBooleanExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(unaryBooleanExpressionEClass, UnaryBooleanExpression.class, "UnaryBooleanExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getUnaryBooleanExpression_Inner(), this.getExpression(), null, "inner", null, 0, 1, UnaryBooleanExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(comparisonEClass, Comparison.class, "Comparison", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getComparison_Left(), this.getExpression(), null, "left", null, 0, 1, Comparison.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getComparison_Operation(), this.getCompareOperation(), "operation", null, 0, 1, Comparison.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getComparison_Right(), this.getExpression(), null, "right", null, 0, 1, Comparison.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(termEClass, Term.class, "Term", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getTerm_Left(), this.getExpression(), null, "left", null, 0, 1, Term.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getTerm_Operation(), this.getTermOperation(), "operation", null, 0, 1, Term.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getTerm_Right(), this.getExpression(), null, "right", null, 0, 1, Term.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(productEClass, Product.class, "Product", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getProduct_Left(), this.getExpression(), null, "left", null, 0, 1, Product.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getProduct_Operation(), this.getProductOperation(), "operation", null, 0, 1, Product.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getProduct_Right(), this.getExpression(), null, "right", null, 0, 1, Product.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(powerEClass, Power.class, "Power", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getPower_Base(), this.getExpression(), null, "base", null, 0, 1, Power.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getPower_Exponent(), this.getExpression(), null, "exponent", null, 0, 1, Power.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    // Initialize enums and add enum literals
+    initEEnum(productOperationEEnum, ProductOperation.class, "ProductOperation");
+    addEEnumLiteral(productOperationEEnum, ProductOperation.MULT);
+    addEEnumLiteral(productOperationEEnum, ProductOperation.DIV);
+    addEEnumLiteral(productOperationEEnum, ProductOperation.MOD);
+
+    initEEnum(termOperationEEnum, TermOperation.class, "TermOperation");
+    addEEnumLiteral(termOperationEEnum, TermOperation.ADD);
+    addEEnumLiteral(termOperationEEnum, TermOperation.SUB);
+
+    initEEnum(compareOperationEEnum, CompareOperation.class, "CompareOperation");
+    addEEnumLiteral(compareOperationEEnum, CompareOperation.GREATER);
+    addEEnumLiteral(compareOperationEEnum, CompareOperation.LESS);
+    addEEnumLiteral(compareOperationEEnum, CompareOperation.EQUALS);
+    addEEnumLiteral(compareOperationEEnum, CompareOperation.NOTEQUAL);
+    addEEnumLiteral(compareOperationEEnum, CompareOperation.LESSEQUAL);
+    addEEnumLiteral(compareOperationEEnum, CompareOperation.GREATEREQUAL);
+
+    initEEnum(booleanOperationEEnum, BooleanOperation.class, "BooleanOperation");
+    addEEnumLiteral(booleanOperationEEnum, BooleanOperation.AND);
+    addEEnumLiteral(booleanOperationEEnum, BooleanOperation.OR);
+    addEEnumLiteral(booleanOperationEEnum, BooleanOperation.XOR);
+
+    // Create resource
+    createResource(eNS_URI);
+  }
+
+} //MyDslPackageImpl
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/PowerImpl.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/PowerImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..181b952c9788a47d9484ae2f709edd2741a85e0b
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/PowerImpl.java
@@ -0,0 +1,264 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.xtext.example.mydsl.myDsl.Expression;
+import org.xtext.example.mydsl.myDsl.MyDslPackage;
+import org.xtext.example.mydsl.myDsl.Power;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Power</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.PowerImpl#getBase <em>Base</em>}</li>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.PowerImpl#getExponent <em>Exponent</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class PowerImpl extends ExpressionImpl implements Power
+{
+  /**
+   * The cached value of the '{@link #getBase() <em>Base</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getBase()
+   * @generated
+   * @ordered
+   */
+  protected Expression base;
+
+  /**
+   * The cached value of the '{@link #getExponent() <em>Exponent</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getExponent()
+   * @generated
+   * @ordered
+   */
+  protected Expression exponent;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected PowerImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return MyDslPackage.Literals.POWER;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Expression getBase()
+  {
+    return base;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetBase(Expression newBase, NotificationChain msgs)
+  {
+    Expression oldBase = base;
+    base = newBase;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MyDslPackage.POWER__BASE, oldBase, newBase);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setBase(Expression newBase)
+  {
+    if (newBase != base)
+    {
+      NotificationChain msgs = null;
+      if (base != null)
+        msgs = ((InternalEObject)base).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.POWER__BASE, null, msgs);
+      if (newBase != null)
+        msgs = ((InternalEObject)newBase).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.POWER__BASE, null, msgs);
+      msgs = basicSetBase(newBase, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.POWER__BASE, newBase, newBase));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Expression getExponent()
+  {
+    return exponent;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetExponent(Expression newExponent, NotificationChain msgs)
+  {
+    Expression oldExponent = exponent;
+    exponent = newExponent;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MyDslPackage.POWER__EXPONENT, oldExponent, newExponent);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setExponent(Expression newExponent)
+  {
+    if (newExponent != exponent)
+    {
+      NotificationChain msgs = null;
+      if (exponent != null)
+        msgs = ((InternalEObject)exponent).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.POWER__EXPONENT, null, msgs);
+      if (newExponent != null)
+        msgs = ((InternalEObject)newExponent).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.POWER__EXPONENT, null, msgs);
+      msgs = basicSetExponent(newExponent, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.POWER__EXPONENT, newExponent, newExponent));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.POWER__BASE:
+        return basicSetBase(null, msgs);
+      case MyDslPackage.POWER__EXPONENT:
+        return basicSetExponent(null, 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 MyDslPackage.POWER__BASE:
+        return getBase();
+      case MyDslPackage.POWER__EXPONENT:
+        return getExponent();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.POWER__BASE:
+        setBase((Expression)newValue);
+        return;
+      case MyDslPackage.POWER__EXPONENT:
+        setExponent((Expression)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.POWER__BASE:
+        setBase((Expression)null);
+        return;
+      case MyDslPackage.POWER__EXPONENT:
+        setExponent((Expression)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.POWER__BASE:
+        return base != null;
+      case MyDslPackage.POWER__EXPONENT:
+        return exponent != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //PowerImpl
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/ProductImpl.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/ProductImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..2d589fb45ba233ca2da8be76da61256c95750e9a
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/ProductImpl.java
@@ -0,0 +1,336 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.xtext.example.mydsl.myDsl.Expression;
+import org.xtext.example.mydsl.myDsl.MyDslPackage;
+import org.xtext.example.mydsl.myDsl.Product;
+import org.xtext.example.mydsl.myDsl.ProductOperation;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Product</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.ProductImpl#getLeft <em>Left</em>}</li>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.ProductImpl#getOperation <em>Operation</em>}</li>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.ProductImpl#getRight <em>Right</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ProductImpl extends ExpressionImpl implements Product
+{
+  /**
+   * The cached value of the '{@link #getLeft() <em>Left</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getLeft()
+   * @generated
+   * @ordered
+   */
+  protected Expression left;
+
+  /**
+   * The default value of the '{@link #getOperation() <em>Operation</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getOperation()
+   * @generated
+   * @ordered
+   */
+  protected static final ProductOperation OPERATION_EDEFAULT = ProductOperation.MULT;
+
+  /**
+   * The cached value of the '{@link #getOperation() <em>Operation</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getOperation()
+   * @generated
+   * @ordered
+   */
+  protected ProductOperation operation = OPERATION_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getRight() <em>Right</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getRight()
+   * @generated
+   * @ordered
+   */
+  protected Expression right;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ProductImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return MyDslPackage.Literals.PRODUCT;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Expression getLeft()
+  {
+    return left;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetLeft(Expression newLeft, NotificationChain msgs)
+  {
+    Expression oldLeft = left;
+    left = newLeft;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MyDslPackage.PRODUCT__LEFT, oldLeft, newLeft);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setLeft(Expression newLeft)
+  {
+    if (newLeft != left)
+    {
+      NotificationChain msgs = null;
+      if (left != null)
+        msgs = ((InternalEObject)left).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.PRODUCT__LEFT, null, msgs);
+      if (newLeft != null)
+        msgs = ((InternalEObject)newLeft).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.PRODUCT__LEFT, null, msgs);
+      msgs = basicSetLeft(newLeft, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.PRODUCT__LEFT, newLeft, newLeft));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ProductOperation getOperation()
+  {
+    return operation;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setOperation(ProductOperation newOperation)
+  {
+    ProductOperation oldOperation = operation;
+    operation = newOperation == null ? OPERATION_EDEFAULT : newOperation;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.PRODUCT__OPERATION, oldOperation, operation));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Expression getRight()
+  {
+    return right;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetRight(Expression newRight, NotificationChain msgs)
+  {
+    Expression oldRight = right;
+    right = newRight;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MyDslPackage.PRODUCT__RIGHT, oldRight, newRight);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setRight(Expression newRight)
+  {
+    if (newRight != right)
+    {
+      NotificationChain msgs = null;
+      if (right != null)
+        msgs = ((InternalEObject)right).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.PRODUCT__RIGHT, null, msgs);
+      if (newRight != null)
+        msgs = ((InternalEObject)newRight).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.PRODUCT__RIGHT, null, msgs);
+      msgs = basicSetRight(newRight, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.PRODUCT__RIGHT, newRight, newRight));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.PRODUCT__LEFT:
+        return basicSetLeft(null, msgs);
+      case MyDslPackage.PRODUCT__RIGHT:
+        return basicSetRight(null, 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 MyDslPackage.PRODUCT__LEFT:
+        return getLeft();
+      case MyDslPackage.PRODUCT__OPERATION:
+        return getOperation();
+      case MyDslPackage.PRODUCT__RIGHT:
+        return getRight();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.PRODUCT__LEFT:
+        setLeft((Expression)newValue);
+        return;
+      case MyDslPackage.PRODUCT__OPERATION:
+        setOperation((ProductOperation)newValue);
+        return;
+      case MyDslPackage.PRODUCT__RIGHT:
+        setRight((Expression)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.PRODUCT__LEFT:
+        setLeft((Expression)null);
+        return;
+      case MyDslPackage.PRODUCT__OPERATION:
+        setOperation(OPERATION_EDEFAULT);
+        return;
+      case MyDslPackage.PRODUCT__RIGHT:
+        setRight((Expression)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.PRODUCT__LEFT:
+        return left != null;
+      case MyDslPackage.PRODUCT__OPERATION:
+        return operation != OPERATION_EDEFAULT;
+      case MyDslPackage.PRODUCT__RIGHT:
+        return right != null;
+    }
+    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(" (operation: ");
+    result.append(operation);
+    result.append(')');
+    return result.toString();
+  }
+
+} //ProductImpl
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/TermImpl.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/TermImpl.java
index e4105a91c00488faa16996a6c87dbaa56e53c327..3c34b29cc4f633936d7410e1b71cc842f615cd5d 100644
--- a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/TermImpl.java
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/TermImpl.java
@@ -1,335 +1,336 @@
-/**
- */
-package org.xtext.example.mydsl.myDsl.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.NotificationChain;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.InternalEObject;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
-import org.xtext.example.mydsl.myDsl.Expression;
-import org.xtext.example.mydsl.myDsl.MyDslPackage;
-import org.xtext.example.mydsl.myDsl.Term;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Term</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.xtext.example.mydsl.myDsl.impl.TermImpl#getLeft <em>Left</em>}</li>
- *   <li>{@link org.xtext.example.mydsl.myDsl.impl.TermImpl#getOperations <em>Operations</em>}</li>
- *   <li>{@link org.xtext.example.mydsl.myDsl.impl.TermImpl#getRight <em>Right</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class TermImpl extends ExpressionImpl implements Term
-{
-  /**
-   * The cached value of the '{@link #getLeft() <em>Left</em>}' containment reference.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @see #getLeft()
-   * @generated
-   * @ordered
-   */
-  protected Expression left;
-
-  /**
-   * The cached value of the '{@link #getOperations() <em>Operations</em>}' containment reference.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @see #getOperations()
-   * @generated
-   * @ordered
-   */
-  protected Expression operations;
-
-  /**
-   * The cached value of the '{@link #getRight() <em>Right</em>}' containment reference.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @see #getRight()
-   * @generated
-   * @ordered
-   */
-  protected Expression right;
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  protected TermImpl()
-  {
-    super();
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  @Override
-  protected EClass eStaticClass()
-  {
-    return MyDslPackage.Literals.TERM;
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public Expression getLeft()
-  {
-    return left;
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public NotificationChain basicSetLeft(Expression newLeft, NotificationChain msgs)
-  {
-    Expression oldLeft = left;
-    left = newLeft;
-    if (eNotificationRequired())
-    {
-      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MyDslPackage.TERM__LEFT, oldLeft, newLeft);
-      if (msgs == null) msgs = notification; else msgs.add(notification);
-    }
-    return msgs;
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public void setLeft(Expression newLeft)
-  {
-    if (newLeft != left)
-    {
-      NotificationChain msgs = null;
-      if (left != null)
-        msgs = ((InternalEObject)left).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.TERM__LEFT, null, msgs);
-      if (newLeft != null)
-        msgs = ((InternalEObject)newLeft).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.TERM__LEFT, null, msgs);
-      msgs = basicSetLeft(newLeft, msgs);
-      if (msgs != null) msgs.dispatch();
-    }
-    else if (eNotificationRequired())
-      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.TERM__LEFT, newLeft, newLeft));
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public Expression getOperations()
-  {
-    return operations;
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public NotificationChain basicSetOperations(Expression newOperations, NotificationChain msgs)
-  {
-    Expression oldOperations = operations;
-    operations = newOperations;
-    if (eNotificationRequired())
-    {
-      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MyDslPackage.TERM__OPERATIONS, oldOperations, newOperations);
-      if (msgs == null) msgs = notification; else msgs.add(notification);
-    }
-    return msgs;
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public void setOperations(Expression newOperations)
-  {
-    if (newOperations != operations)
-    {
-      NotificationChain msgs = null;
-      if (operations != null)
-        msgs = ((InternalEObject)operations).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.TERM__OPERATIONS, null, msgs);
-      if (newOperations != null)
-        msgs = ((InternalEObject)newOperations).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.TERM__OPERATIONS, null, msgs);
-      msgs = basicSetOperations(newOperations, msgs);
-      if (msgs != null) msgs.dispatch();
-    }
-    else if (eNotificationRequired())
-      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.TERM__OPERATIONS, newOperations, newOperations));
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public Expression getRight()
-  {
-    return right;
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public NotificationChain basicSetRight(Expression newRight, NotificationChain msgs)
-  {
-    Expression oldRight = right;
-    right = newRight;
-    if (eNotificationRequired())
-    {
-      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MyDslPackage.TERM__RIGHT, oldRight, newRight);
-      if (msgs == null) msgs = notification; else msgs.add(notification);
-    }
-    return msgs;
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public void setRight(Expression newRight)
-  {
-    if (newRight != right)
-    {
-      NotificationChain msgs = null;
-      if (right != null)
-        msgs = ((InternalEObject)right).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.TERM__RIGHT, null, msgs);
-      if (newRight != null)
-        msgs = ((InternalEObject)newRight).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.TERM__RIGHT, null, msgs);
-      msgs = basicSetRight(newRight, msgs);
-      if (msgs != null) msgs.dispatch();
-    }
-    else if (eNotificationRequired())
-      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.TERM__RIGHT, newRight, newRight));
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  @Override
-  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
-  {
-    switch (featureID)
-    {
-      case MyDslPackage.TERM__LEFT:
-        return basicSetLeft(null, msgs);
-      case MyDslPackage.TERM__OPERATIONS:
-        return basicSetOperations(null, msgs);
-      case MyDslPackage.TERM__RIGHT:
-        return basicSetRight(null, 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 MyDslPackage.TERM__LEFT:
-        return getLeft();
-      case MyDslPackage.TERM__OPERATIONS:
-        return getOperations();
-      case MyDslPackage.TERM__RIGHT:
-        return getRight();
-    }
-    return super.eGet(featureID, resolve, coreType);
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  @Override
-  public void eSet(int featureID, Object newValue)
-  {
-    switch (featureID)
-    {
-      case MyDslPackage.TERM__LEFT:
-        setLeft((Expression)newValue);
-        return;
-      case MyDslPackage.TERM__OPERATIONS:
-        setOperations((Expression)newValue);
-        return;
-      case MyDslPackage.TERM__RIGHT:
-        setRight((Expression)newValue);
-        return;
-    }
-    super.eSet(featureID, newValue);
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  @Override
-  public void eUnset(int featureID)
-  {
-    switch (featureID)
-    {
-      case MyDslPackage.TERM__LEFT:
-        setLeft((Expression)null);
-        return;
-      case MyDslPackage.TERM__OPERATIONS:
-        setOperations((Expression)null);
-        return;
-      case MyDslPackage.TERM__RIGHT:
-        setRight((Expression)null);
-        return;
-    }
-    super.eUnset(featureID);
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  @Override
-  public boolean eIsSet(int featureID)
-  {
-    switch (featureID)
-    {
-      case MyDslPackage.TERM__LEFT:
-        return left != null;
-      case MyDslPackage.TERM__OPERATIONS:
-        return operations != null;
-      case MyDslPackage.TERM__RIGHT:
-        return right != null;
-    }
-    return super.eIsSet(featureID);
-  }
-
-} //TermImpl
+/**
+ */
+package org.xtext.example.mydsl.myDsl.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.xtext.example.mydsl.myDsl.Expression;
+import org.xtext.example.mydsl.myDsl.MyDslPackage;
+import org.xtext.example.mydsl.myDsl.Term;
+import org.xtext.example.mydsl.myDsl.TermOperation;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Term</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.TermImpl#getLeft <em>Left</em>}</li>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.TermImpl#getOperation <em>Operation</em>}</li>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.TermImpl#getRight <em>Right</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class TermImpl extends ExpressionImpl implements Term
+{
+  /**
+   * The cached value of the '{@link #getLeft() <em>Left</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getLeft()
+   * @generated
+   * @ordered
+   */
+  protected Expression left;
+
+  /**
+   * The default value of the '{@link #getOperation() <em>Operation</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getOperation()
+   * @generated
+   * @ordered
+   */
+  protected static final TermOperation OPERATION_EDEFAULT = TermOperation.ADD;
+
+  /**
+   * The cached value of the '{@link #getOperation() <em>Operation</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getOperation()
+   * @generated
+   * @ordered
+   */
+  protected TermOperation operation = OPERATION_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getRight() <em>Right</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getRight()
+   * @generated
+   * @ordered
+   */
+  protected Expression right;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected TermImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return MyDslPackage.Literals.TERM;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Expression getLeft()
+  {
+    return left;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetLeft(Expression newLeft, NotificationChain msgs)
+  {
+    Expression oldLeft = left;
+    left = newLeft;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MyDslPackage.TERM__LEFT, oldLeft, newLeft);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setLeft(Expression newLeft)
+  {
+    if (newLeft != left)
+    {
+      NotificationChain msgs = null;
+      if (left != null)
+        msgs = ((InternalEObject)left).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.TERM__LEFT, null, msgs);
+      if (newLeft != null)
+        msgs = ((InternalEObject)newLeft).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.TERM__LEFT, null, msgs);
+      msgs = basicSetLeft(newLeft, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.TERM__LEFT, newLeft, newLeft));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public TermOperation getOperation()
+  {
+    return operation;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setOperation(TermOperation newOperation)
+  {
+    TermOperation oldOperation = operation;
+    operation = newOperation == null ? OPERATION_EDEFAULT : newOperation;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.TERM__OPERATION, oldOperation, operation));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Expression getRight()
+  {
+    return right;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetRight(Expression newRight, NotificationChain msgs)
+  {
+    Expression oldRight = right;
+    right = newRight;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MyDslPackage.TERM__RIGHT, oldRight, newRight);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setRight(Expression newRight)
+  {
+    if (newRight != right)
+    {
+      NotificationChain msgs = null;
+      if (right != null)
+        msgs = ((InternalEObject)right).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.TERM__RIGHT, null, msgs);
+      if (newRight != null)
+        msgs = ((InternalEObject)newRight).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.TERM__RIGHT, null, msgs);
+      msgs = basicSetRight(newRight, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.TERM__RIGHT, newRight, newRight));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.TERM__LEFT:
+        return basicSetLeft(null, msgs);
+      case MyDslPackage.TERM__RIGHT:
+        return basicSetRight(null, 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 MyDslPackage.TERM__LEFT:
+        return getLeft();
+      case MyDslPackage.TERM__OPERATION:
+        return getOperation();
+      case MyDslPackage.TERM__RIGHT:
+        return getRight();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.TERM__LEFT:
+        setLeft((Expression)newValue);
+        return;
+      case MyDslPackage.TERM__OPERATION:
+        setOperation((TermOperation)newValue);
+        return;
+      case MyDslPackage.TERM__RIGHT:
+        setRight((Expression)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.TERM__LEFT:
+        setLeft((Expression)null);
+        return;
+      case MyDslPackage.TERM__OPERATION:
+        setOperation(OPERATION_EDEFAULT);
+        return;
+      case MyDslPackage.TERM__RIGHT:
+        setRight((Expression)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.TERM__LEFT:
+        return left != null;
+      case MyDslPackage.TERM__OPERATION:
+        return operation != OPERATION_EDEFAULT;
+      case MyDslPackage.TERM__RIGHT:
+        return right != null;
+    }
+    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(" (operation: ");
+    result.append(operation);
+    result.append(')');
+    return result.toString();
+  }
+
+} //TermImpl
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/UnaryBooleanExpressionImpl.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/UnaryBooleanExpressionImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..233b2c9716b0eb30e77b191c041fe374f1ec5079
--- /dev/null
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/impl/UnaryBooleanExpressionImpl.java
@@ -0,0 +1,193 @@
+/**
+ */
+package org.xtext.example.mydsl.myDsl.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.xtext.example.mydsl.myDsl.Expression;
+import org.xtext.example.mydsl.myDsl.MyDslPackage;
+import org.xtext.example.mydsl.myDsl.UnaryBooleanExpression;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Unary Boolean Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.xtext.example.mydsl.myDsl.impl.UnaryBooleanExpressionImpl#getInner <em>Inner</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class UnaryBooleanExpressionImpl extends ExpressionImpl implements UnaryBooleanExpression
+{
+  /**
+   * The cached value of the '{@link #getInner() <em>Inner</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getInner()
+   * @generated
+   * @ordered
+   */
+  protected Expression inner;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected UnaryBooleanExpressionImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return MyDslPackage.Literals.UNARY_BOOLEAN_EXPRESSION;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Expression getInner()
+  {
+    return inner;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetInner(Expression newInner, NotificationChain msgs)
+  {
+    Expression oldInner = inner;
+    inner = newInner;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MyDslPackage.UNARY_BOOLEAN_EXPRESSION__INNER, oldInner, newInner);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setInner(Expression newInner)
+  {
+    if (newInner != inner)
+    {
+      NotificationChain msgs = null;
+      if (inner != null)
+        msgs = ((InternalEObject)inner).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.UNARY_BOOLEAN_EXPRESSION__INNER, null, msgs);
+      if (newInner != null)
+        msgs = ((InternalEObject)newInner).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MyDslPackage.UNARY_BOOLEAN_EXPRESSION__INNER, null, msgs);
+      msgs = basicSetInner(newInner, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, MyDslPackage.UNARY_BOOLEAN_EXPRESSION__INNER, newInner, newInner));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.UNARY_BOOLEAN_EXPRESSION__INNER:
+        return basicSetInner(null, 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 MyDslPackage.UNARY_BOOLEAN_EXPRESSION__INNER:
+        return getInner();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.UNARY_BOOLEAN_EXPRESSION__INNER:
+        setInner((Expression)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.UNARY_BOOLEAN_EXPRESSION__INNER:
+        setInner((Expression)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case MyDslPackage.UNARY_BOOLEAN_EXPRESSION__INNER:
+        return inner != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //UnaryBooleanExpressionImpl
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/util/MyDslAdapterFactory.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/util/MyDslAdapterFactory.java
index bfc73f61bc4bd99612fe86b1fd9afa5343759acb..959a87406da67d7eece6663281cdd2038a51c77e 100644
--- a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/util/MyDslAdapterFactory.java
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/util/MyDslAdapterFactory.java
@@ -1,172 +1,392 @@
-/**
- */
-package org.xtext.example.mydsl.myDsl.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.xtext.example.mydsl.myDsl.*;
-
-/**
- * <!-- 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.xtext.example.mydsl.myDsl.MyDslPackage
- * @generated
- */
-public class MyDslAdapterFactory extends AdapterFactoryImpl
-{
-  /**
-   * The cached model package.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  protected static MyDslPackage modelPackage;
-
-  /**
-   * Creates an instance of the adapter factory.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public MyDslAdapterFactory()
-  {
-    if (modelPackage == null)
-    {
-      modelPackage = MyDslPackage.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 MyDslSwitch<Adapter> modelSwitch =
-    new MyDslSwitch<Adapter>()
-    {
-      @Override
-      public Adapter caseModel(Model object)
-      {
-        return createModelAdapter();
-      }
-      @Override
-      public Adapter caseExpression(Expression object)
-      {
-        return createExpressionAdapter();
-      }
-      @Override
-      public Adapter caseTerm(Term object)
-      {
-        return createTermAdapter();
-      }
-      @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.xtext.example.mydsl.myDsl.Model <em>Model</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.xtext.example.mydsl.myDsl.Model
-   * @generated
-   */
-  public Adapter createModelAdapter()
-  {
-    return null;
-  }
-
-  /**
-   * Creates a new adapter for an object of class '{@link org.xtext.example.mydsl.myDsl.Expression <em>Expression</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.xtext.example.mydsl.myDsl.Expression
-   * @generated
-   */
-  public Adapter createExpressionAdapter()
-  {
-    return null;
-  }
-
-  /**
-   * Creates a new adapter for an object of class '{@link org.xtext.example.mydsl.myDsl.Term <em>Term</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.xtext.example.mydsl.myDsl.Term
-   * @generated
-   */
-  public Adapter createTermAdapter()
-  {
-    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;
-  }
-
-} //MyDslAdapterFactory
+/**
+ */
+package org.xtext.example.mydsl.myDsl.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.xtext.example.mydsl.myDsl.*;
+
+/**
+ * <!-- 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.xtext.example.mydsl.myDsl.MyDslPackage
+ * @generated
+ */
+public class MyDslAdapterFactory extends AdapterFactoryImpl
+{
+  /**
+   * The cached model package.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected static MyDslPackage modelPackage;
+
+  /**
+   * Creates an instance of the adapter factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public MyDslAdapterFactory()
+  {
+    if (modelPackage == null)
+    {
+      modelPackage = MyDslPackage.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 MyDslSwitch<Adapter> modelSwitch =
+    new MyDslSwitch<Adapter>()
+    {
+      @Override
+      public Adapter caseModel(Model object)
+      {
+        return createModelAdapter();
+      }
+      @Override
+      public Adapter caseExpression(Expression object)
+      {
+        return createExpressionAdapter();
+      }
+      @Override
+      public Adapter caseFunction(Function object)
+      {
+        return createFunctionAdapter();
+      }
+      @Override
+      public Adapter caseFormalParameter(FormalParameter object)
+      {
+        return createFormalParameterAdapter();
+      }
+      @Override
+      public Adapter caseBooleanLiteral(BooleanLiteral object)
+      {
+        return createBooleanLiteralAdapter();
+      }
+      @Override
+      public Adapter caseIntLiteral(IntLiteral object)
+      {
+        return createIntLiteralAdapter();
+      }
+      @Override
+      public Adapter caseDoubleLiteral(DoubleLiteral object)
+      {
+        return createDoubleLiteralAdapter();
+      }
+      @Override
+      public Adapter caseIfElseExpression(IfElseExpression object)
+      {
+        return createIfElseExpressionAdapter();
+      }
+      @Override
+      public Adapter caseBinaryBooleanExpression(BinaryBooleanExpression object)
+      {
+        return createBinaryBooleanExpressionAdapter();
+      }
+      @Override
+      public Adapter caseUnaryBooleanExpression(UnaryBooleanExpression object)
+      {
+        return createUnaryBooleanExpressionAdapter();
+      }
+      @Override
+      public Adapter caseComparison(Comparison object)
+      {
+        return createComparisonAdapter();
+      }
+      @Override
+      public Adapter caseTerm(Term object)
+      {
+        return createTermAdapter();
+      }
+      @Override
+      public Adapter caseProduct(Product object)
+      {
+        return createProductAdapter();
+      }
+      @Override
+      public Adapter casePower(Power object)
+      {
+        return createPowerAdapter();
+      }
+      @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.xtext.example.mydsl.myDsl.Model <em>Model</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.xtext.example.mydsl.myDsl.Model
+   * @generated
+   */
+  public Adapter createModelAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.xtext.example.mydsl.myDsl.Expression <em>Expression</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.xtext.example.mydsl.myDsl.Expression
+   * @generated
+   */
+  public Adapter createExpressionAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.xtext.example.mydsl.myDsl.Function <em>Function</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.xtext.example.mydsl.myDsl.Function
+   * @generated
+   */
+  public Adapter createFunctionAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.xtext.example.mydsl.myDsl.FormalParameter <em>Formal Parameter</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.xtext.example.mydsl.myDsl.FormalParameter
+   * @generated
+   */
+  public Adapter createFormalParameterAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.xtext.example.mydsl.myDsl.BooleanLiteral <em>Boolean Literal</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.xtext.example.mydsl.myDsl.BooleanLiteral
+   * @generated
+   */
+  public Adapter createBooleanLiteralAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.xtext.example.mydsl.myDsl.IntLiteral <em>Int Literal</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.xtext.example.mydsl.myDsl.IntLiteral
+   * @generated
+   */
+  public Adapter createIntLiteralAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.xtext.example.mydsl.myDsl.DoubleLiteral <em>Double Literal</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.xtext.example.mydsl.myDsl.DoubleLiteral
+   * @generated
+   */
+  public Adapter createDoubleLiteralAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.xtext.example.mydsl.myDsl.IfElseExpression <em>If Else Expression</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.xtext.example.mydsl.myDsl.IfElseExpression
+   * @generated
+   */
+  public Adapter createIfElseExpressionAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.xtext.example.mydsl.myDsl.BinaryBooleanExpression <em>Binary Boolean Expression</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.xtext.example.mydsl.myDsl.BinaryBooleanExpression
+   * @generated
+   */
+  public Adapter createBinaryBooleanExpressionAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.xtext.example.mydsl.myDsl.UnaryBooleanExpression <em>Unary Boolean Expression</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.xtext.example.mydsl.myDsl.UnaryBooleanExpression
+   * @generated
+   */
+  public Adapter createUnaryBooleanExpressionAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.xtext.example.mydsl.myDsl.Comparison <em>Comparison</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.xtext.example.mydsl.myDsl.Comparison
+   * @generated
+   */
+  public Adapter createComparisonAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.xtext.example.mydsl.myDsl.Term <em>Term</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.xtext.example.mydsl.myDsl.Term
+   * @generated
+   */
+  public Adapter createTermAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.xtext.example.mydsl.myDsl.Product <em>Product</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.xtext.example.mydsl.myDsl.Product
+   * @generated
+   */
+  public Adapter createProductAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.xtext.example.mydsl.myDsl.Power <em>Power</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.xtext.example.mydsl.myDsl.Power
+   * @generated
+   */
+  public Adapter createPowerAdapter()
+  {
+    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;
+  }
+
+} //MyDslAdapterFactory
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/util/MyDslSwitch.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/util/MyDslSwitch.java
index 5006fb1742786932b516f52e3cc243b098e34ac5..796b3709bb02b796b1aaa78ff60e24c2256fb72c 100644
--- a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/util/MyDslSwitch.java
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/myDsl/util/MyDslSwitch.java
@@ -1,166 +1,430 @@
-/**
- */
-package org.xtext.example.mydsl.myDsl.util;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-
-import org.eclipse.emf.ecore.util.Switch;
-
-import org.xtext.example.mydsl.myDsl.*;
-
-/**
- * <!-- 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.xtext.example.mydsl.myDsl.MyDslPackage
- * @generated
- */
-public class MyDslSwitch<T> extends Switch<T>
-{
-  /**
-   * The cached model package
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  protected static MyDslPackage modelPackage;
-
-  /**
-   * Creates an instance of the switch.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public MyDslSwitch()
-  {
-    if (modelPackage == null)
-    {
-      modelPackage = MyDslPackage.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 MyDslPackage.MODEL:
-      {
-        Model model = (Model)theEObject;
-        T result = caseModel(model);
-        if (result == null) result = defaultCase(theEObject);
-        return result;
-      }
-      case MyDslPackage.EXPRESSION:
-      {
-        Expression expression = (Expression)theEObject;
-        T result = caseExpression(expression);
-        if (result == null) result = defaultCase(theEObject);
-        return result;
-      }
-      case MyDslPackage.TERM:
-      {
-        Term term = (Term)theEObject;
-        T result = caseTerm(term);
-        if (result == null) result = caseExpression(term);
-        if (result == null) result = defaultCase(theEObject);
-        return result;
-      }
-      default: return defaultCase(theEObject);
-    }
-  }
-
-  /**
-   * Returns the result of interpreting the object as an instance of '<em>Model</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>Model</em>'.
-   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-   * @generated
-   */
-  public T caseModel(Model object)
-  {
-    return null;
-  }
-
-  /**
-   * Returns the result of interpreting the object as an instance of '<em>Expression</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>Expression</em>'.
-   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-   * @generated
-   */
-  public T caseExpression(Expression object)
-  {
-    return null;
-  }
-
-  /**
-   * Returns the result of interpreting the object as an instance of '<em>Term</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>Term</em>'.
-   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-   * @generated
-   */
-  public T caseTerm(Term 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;
-  }
-
-} //MyDslSwitch
+/**
+ */
+package org.xtext.example.mydsl.myDsl.util;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+
+import org.xtext.example.mydsl.myDsl.*;
+
+/**
+ * <!-- 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.xtext.example.mydsl.myDsl.MyDslPackage
+ * @generated
+ */
+public class MyDslSwitch<T> extends Switch<T>
+{
+  /**
+   * The cached model package
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected static MyDslPackage modelPackage;
+
+  /**
+   * Creates an instance of the switch.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public MyDslSwitch()
+  {
+    if (modelPackage == null)
+    {
+      modelPackage = MyDslPackage.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 MyDslPackage.MODEL:
+      {
+        Model model = (Model)theEObject;
+        T result = caseModel(model);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case MyDslPackage.EXPRESSION:
+      {
+        Expression expression = (Expression)theEObject;
+        T result = caseExpression(expression);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case MyDslPackage.FUNCTION:
+      {
+        Function function = (Function)theEObject;
+        T result = caseFunction(function);
+        if (result == null) result = caseExpression(function);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case MyDslPackage.FORMAL_PARAMETER:
+      {
+        FormalParameter formalParameter = (FormalParameter)theEObject;
+        T result = caseFormalParameter(formalParameter);
+        if (result == null) result = caseExpression(formalParameter);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case MyDslPackage.BOOLEAN_LITERAL:
+      {
+        BooleanLiteral booleanLiteral = (BooleanLiteral)theEObject;
+        T result = caseBooleanLiteral(booleanLiteral);
+        if (result == null) result = caseExpression(booleanLiteral);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case MyDslPackage.INT_LITERAL:
+      {
+        IntLiteral intLiteral = (IntLiteral)theEObject;
+        T result = caseIntLiteral(intLiteral);
+        if (result == null) result = caseExpression(intLiteral);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case MyDslPackage.DOUBLE_LITERAL:
+      {
+        DoubleLiteral doubleLiteral = (DoubleLiteral)theEObject;
+        T result = caseDoubleLiteral(doubleLiteral);
+        if (result == null) result = caseExpression(doubleLiteral);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case MyDslPackage.IF_ELSE_EXPRESSION:
+      {
+        IfElseExpression ifElseExpression = (IfElseExpression)theEObject;
+        T result = caseIfElseExpression(ifElseExpression);
+        if (result == null) result = caseExpression(ifElseExpression);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case MyDslPackage.BINARY_BOOLEAN_EXPRESSION:
+      {
+        BinaryBooleanExpression binaryBooleanExpression = (BinaryBooleanExpression)theEObject;
+        T result = caseBinaryBooleanExpression(binaryBooleanExpression);
+        if (result == null) result = caseExpression(binaryBooleanExpression);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case MyDslPackage.UNARY_BOOLEAN_EXPRESSION:
+      {
+        UnaryBooleanExpression unaryBooleanExpression = (UnaryBooleanExpression)theEObject;
+        T result = caseUnaryBooleanExpression(unaryBooleanExpression);
+        if (result == null) result = caseExpression(unaryBooleanExpression);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case MyDslPackage.COMPARISON:
+      {
+        Comparison comparison = (Comparison)theEObject;
+        T result = caseComparison(comparison);
+        if (result == null) result = caseExpression(comparison);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case MyDslPackage.TERM:
+      {
+        Term term = (Term)theEObject;
+        T result = caseTerm(term);
+        if (result == null) result = caseExpression(term);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case MyDslPackage.PRODUCT:
+      {
+        Product product = (Product)theEObject;
+        T result = caseProduct(product);
+        if (result == null) result = caseExpression(product);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case MyDslPackage.POWER:
+      {
+        Power power = (Power)theEObject;
+        T result = casePower(power);
+        if (result == null) result = caseExpression(power);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      default: return defaultCase(theEObject);
+    }
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Model</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>Model</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseModel(Model object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Expression</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>Expression</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseExpression(Expression object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Function</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>Function</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseFunction(Function object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Formal Parameter</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>Formal Parameter</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseFormalParameter(FormalParameter object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Boolean Literal</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>Boolean Literal</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseBooleanLiteral(BooleanLiteral object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Int Literal</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>Int Literal</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseIntLiteral(IntLiteral object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Double Literal</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>Double Literal</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseDoubleLiteral(DoubleLiteral object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>If Else Expression</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>If Else Expression</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseIfElseExpression(IfElseExpression object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Binary Boolean Expression</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>Binary Boolean Expression</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseBinaryBooleanExpression(BinaryBooleanExpression object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Unary Boolean Expression</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>Unary Boolean Expression</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseUnaryBooleanExpression(UnaryBooleanExpression object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Comparison</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>Comparison</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseComparison(Comparison object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Term</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>Term</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseTerm(Term object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Product</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>Product</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseProduct(Product object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Power</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>Power</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T casePower(Power 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;
+  }
+
+} //MyDslSwitch
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g
index f15696f61fc0b0852d912deb53b1d2dd08671ff0..a4a99d1e56dd59be665b3256474ce2ea29243a9e 100644
--- a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g
@@ -81,71 +81,598 @@ ruleModel returns [EObject current=null]
 (
 (
 		{ 
-	        newCompositeNode(grammarAccess.getModelAccess().getTermsTermParserRuleCall_0()); 
+	        newCompositeNode(grammarAccess.getModelAccess().getTermsIfElseExpressionParserRuleCall_0()); 
 	    }
-		lv_terms_0_0=ruleTerm		{
+		lv_terms_0_0=ruleIfElseExpression		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getModelRule());
 	        }
-       		add(
+       		set(
+       			$current, 
+       			"terms",
+        		lv_terms_0_0, 
+        		"IfElseExpression");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)
+;
+
+
+
+
+
+// Entry rule entryRuleDouble
+entryRuleDouble returns [String current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getDoubleRule()); } 
+	 iv_ruleDouble=ruleDouble 
+	 { $current=$iv_ruleDouble.current.getText(); }  
+	 EOF 
+;
+
+// Rule Double
+ruleDouble returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+	kw='-' 
+    {
+        $current.merge(kw);
+        newLeafNode(kw, grammarAccess.getDoubleAccess().getHyphenMinusKeyword_0()); 
+    }
+)?    this_INT_1=RULE_INT    {
+		$current.merge(this_INT_1);
+    }
+
+    { 
+    newLeafNode(this_INT_1, grammarAccess.getDoubleAccess().getINTTerminalRuleCall_1()); 
+    }
+
+	kw='.' 
+    {
+        $current.merge(kw);
+        newLeafNode(kw, grammarAccess.getDoubleAccess().getFullStopKeyword_2()); 
+    }
+    this_INT_3=RULE_INT    {
+		$current.merge(this_INT_3);
+    }
+
+    { 
+    newLeafNode(this_INT_3, grammarAccess.getDoubleAccess().getINTTerminalRuleCall_3()); 
+    }
+)
+    ;
+
+
+
+
+
+// Entry rule entryRuleInteger
+entryRuleInteger returns [String current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getIntegerRule()); } 
+	 iv_ruleInteger=ruleInteger 
+	 { $current=$iv_ruleInteger.current.getText(); }  
+	 EOF 
+;
+
+// Rule Integer
+ruleInteger returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+	kw='-' 
+    {
+        $current.merge(kw);
+        newLeafNode(kw, grammarAccess.getIntegerAccess().getHyphenMinusKeyword_0()); 
+    }
+)?    this_INT_1=RULE_INT    {
+		$current.merge(this_INT_1);
+    }
+
+    { 
+    newLeafNode(this_INT_1, grammarAccess.getIntegerAccess().getINTTerminalRuleCall_1()); 
+    }
+)
+    ;
+
+
+
+
+
+// Entry rule entryRuleEString
+entryRuleEString returns [String current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getEStringRule()); } 
+	 iv_ruleEString=ruleEString 
+	 { $current=$iv_ruleEString.current.getText(); }  
+	 EOF 
+;
+
+// Rule EString
+ruleEString returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(    this_STRING_0=RULE_STRING    {
+		$current.merge(this_STRING_0);
+    }
+
+    { 
+    newLeafNode(this_STRING_0, grammarAccess.getEStringAccess().getSTRINGTerminalRuleCall_0()); 
+    }
+
+    |    this_ID_1=RULE_ID    {
+		$current.merge(this_ID_1);
+    }
+
+    { 
+    newLeafNode(this_ID_1, grammarAccess.getEStringAccess().getIDTerminalRuleCall_1()); 
+    }
+)
+    ;
+
+
+
+
+
+// Entry rule entryRuleEBoolean
+entryRuleEBoolean returns [String current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getEBooleanRule()); } 
+	 iv_ruleEBoolean=ruleEBoolean 
+	 { $current=$iv_ruleEBoolean.current.getText(); }  
+	 EOF 
+;
+
+// Rule EBoolean
+ruleEBoolean returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(
+	kw='true' 
+    {
+        $current.merge(kw);
+        newLeafNode(kw, grammarAccess.getEBooleanAccess().getTrueKeyword_0()); 
+    }
+
+    |
+	kw='false' 
+    {
+        $current.merge(kw);
+        newLeafNode(kw, grammarAccess.getEBooleanAccess().getFalseKeyword_1()); 
+    }
+)
+    ;
+
+
+
+
+
+// Entry rule entryRuleRootExpression
+entryRuleRootExpression returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getRootExpressionRule()); }
+	 iv_ruleRootExpression=ruleRootExpression 
+	 { $current=$iv_ruleRootExpression.current; } 
+	 EOF 
+;
+
+// Rule RootExpression
+ruleRootExpression returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+
+    { 
+        newCompositeNode(grammarAccess.getRootExpressionAccess().getIfElseExpressionParserRuleCall()); 
+    }
+    this_IfElseExpression_0=ruleIfElseExpression
+    { 
+        $current = $this_IfElseExpression_0.current; 
+        afterParserOrEnumRuleCall();
+    }
+
+;
+
+
+
+
+
+// Entry rule entryRuleIfElseExpression
+entryRuleIfElseExpression returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getIfElseExpressionRule()); }
+	 iv_ruleIfElseExpression=ruleIfElseExpression 
+	 { $current=$iv_ruleIfElseExpression.current; } 
+	 EOF 
+;
+
+// Rule IfElseExpression
+ruleIfElseExpression returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(
+    { 
+        newCompositeNode(grammarAccess.getIfElseExpressionAccess().getBinaryBooleanExpressionParserRuleCall_0()); 
+    }
+    this_BinaryBooleanExpression_0=ruleBinaryBooleanExpression
+    { 
+        $current = $this_BinaryBooleanExpression_0.current; 
+        afterParserOrEnumRuleCall();
+    }
+((
+    {
+        $current = forceCreateModelElementAndSet(
+            grammarAccess.getIfElseExpressionAccess().getIfElseExpressionConditionAction_1_0(),
+            $current);
+    }
+)	otherlv_2='?' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getIfElseExpressionAccess().getQuestionMarkKeyword_1_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getIfElseExpressionAccess().getTrueExpIfElseExpressionParserRuleCall_1_2_0()); 
+	    }
+		lv_trueExp_3_0=ruleIfElseExpression		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getIfElseExpressionRule());
+	        }
+       		set(
+       			$current, 
+       			"trueExp",
+        		lv_trueExp_3_0, 
+        		"IfElseExpression");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_4=':' 
+    {
+    	newLeafNode(otherlv_4, grammarAccess.getIfElseExpressionAccess().getColonKeyword_1_3());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getIfElseExpressionAccess().getFalseExpIfElseExpressionParserRuleCall_1_4_0()); 
+	    }
+		lv_falseExp_5_0=ruleIfElseExpression		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getIfElseExpressionRule());
+	        }
+       		set(
+       			$current, 
+       			"falseExp",
+        		lv_falseExp_5_0, 
+        		"IfElseExpression");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))?)
+;
+
+
+
+
+
+// Entry rule entryRuleBinaryBooleanExpression
+entryRuleBinaryBooleanExpression returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getBinaryBooleanExpressionRule()); }
+	 iv_ruleBinaryBooleanExpression=ruleBinaryBooleanExpression 
+	 { $current=$iv_ruleBinaryBooleanExpression.current; } 
+	 EOF 
+;
+
+// Rule BinaryBooleanExpression
+ruleBinaryBooleanExpression returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(
+    { 
+        newCompositeNode(grammarAccess.getBinaryBooleanExpressionAccess().getUnaryBooleanExpressionParserRuleCall_0()); 
+    }
+    this_UnaryBooleanExpression_0=ruleUnaryBooleanExpression
+    { 
+        $current = $this_UnaryBooleanExpression_0.current; 
+        afterParserOrEnumRuleCall();
+    }
+((
+    {
+        $current = forceCreateModelElementAndSet(
+            grammarAccess.getBinaryBooleanExpressionAccess().getBinaryBooleanExpressionLeftAction_1_0(),
+            $current);
+    }
+)(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getBinaryBooleanExpressionAccess().getOperationBooleanOperationEnumRuleCall_1_1_0()); 
+	    }
+		lv_operation_2_0=ruleBooleanOperation		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getBinaryBooleanExpressionRule());
+	        }
+       		set(
+       			$current, 
+       			"operation",
+        		lv_operation_2_0, 
+        		"BooleanOperation");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getBinaryBooleanExpressionAccess().getRightUnaryBooleanExpressionParserRuleCall_1_2_0()); 
+	    }
+		lv_right_3_0=ruleUnaryBooleanExpression		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getBinaryBooleanExpressionRule());
+	        }
+       		set(
+       			$current, 
+       			"right",
+        		lv_right_3_0, 
+        		"UnaryBooleanExpression");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*)
+;
+
+
+
+
+
+// Entry rule entryRuleUnaryBooleanExpression
+entryRuleUnaryBooleanExpression returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getUnaryBooleanExpressionRule()); }
+	 iv_ruleUnaryBooleanExpression=ruleUnaryBooleanExpression 
+	 { $current=$iv_ruleUnaryBooleanExpression.current; } 
+	 EOF 
+;
+
+// Rule UnaryBooleanExpression
+ruleUnaryBooleanExpression returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((	otherlv_0='NOT' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getUnaryBooleanExpressionAccess().getNOTKeyword_0_0());
+    }
+
+    { 
+        newCompositeNode(grammarAccess.getUnaryBooleanExpressionAccess().getComparisonParserRuleCall_0_1()); 
+    }
+    this_Comparison_1=ruleComparison
+    { 
+        $current = $this_Comparison_1.current; 
+        afterParserOrEnumRuleCall();
+    }
+(
+    {
+        $current = forceCreateModelElementAndSet(
+            grammarAccess.getUnaryBooleanExpressionAccess().getUnaryBooleanExpressionInnerAction_0_2(),
+            $current);
+    }
+))
+    |
+    { 
+        newCompositeNode(grammarAccess.getUnaryBooleanExpressionAccess().getComparisonParserRuleCall_1()); 
+    }
+    this_Comparison_3=ruleComparison
+    { 
+        $current = $this_Comparison_3.current; 
+        afterParserOrEnumRuleCall();
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleComparison
+entryRuleComparison returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getComparisonRule()); }
+	 iv_ruleComparison=ruleComparison 
+	 { $current=$iv_ruleComparison.current; } 
+	 EOF 
+;
+
+// Rule Comparison
+ruleComparison returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(
+    { 
+        newCompositeNode(grammarAccess.getComparisonAccess().getTermParserRuleCall_0()); 
+    }
+    this_Term_0=ruleTerm
+    { 
+        $current = $this_Term_0.current; 
+        afterParserOrEnumRuleCall();
+    }
+((
+    {
+        $current = forceCreateModelElementAndSet(
+            grammarAccess.getComparisonAccess().getComparisonLeftAction_1_0(),
+            $current);
+    }
+)(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getComparisonAccess().getOperationCompareOperationEnumRuleCall_1_1_0()); 
+	    }
+		lv_operation_2_0=ruleCompareOperation		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getComparisonRule());
+	        }
+       		set(
+       			$current, 
+       			"operation",
+        		lv_operation_2_0, 
+        		"CompareOperation");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getComparisonAccess().getRightTermParserRuleCall_1_2_0()); 
+	    }
+		lv_right_3_0=ruleTerm		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getComparisonRule());
+	        }
+       		set(
+       			$current, 
+       			"right",
+        		lv_right_3_0, 
+        		"Term");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*)
+;
+
+
+
+
+
+// Entry rule entryRuleTerm
+entryRuleTerm returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getTermRule()); }
+	 iv_ruleTerm=ruleTerm 
+	 { $current=$iv_ruleTerm.current; } 
+	 EOF 
+;
+
+// Rule Term
+ruleTerm returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(
+    { 
+        newCompositeNode(grammarAccess.getTermAccess().getProductParserRuleCall_0()); 
+    }
+    this_Product_0=ruleProduct
+    { 
+        $current = $this_Product_0.current; 
+        afterParserOrEnumRuleCall();
+    }
+((
+    {
+        $current = forceCreateModelElementAndSet(
+            grammarAccess.getTermAccess().getTermLeftAction_1_0(),
+            $current);
+    }
+)(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getTermAccess().getOperationTermOperationEnumRuleCall_1_1_0()); 
+	    }
+		lv_operation_2_0=ruleTermOperation		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getTermRule());
+	        }
+       		set(
        			$current, 
-       			"terms",
-        		lv_terms_0_0, 
-        		"Term");
+       			"operation",
+        		lv_operation_2_0, 
+        		"TermOperation");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
+)(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getTermAccess().getRightProductParserRuleCall_1_2_0()); 
+	    }
+		lv_right_3_0=ruleProduct		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getTermRule());
+	        }
+       		set(
+       			$current, 
+       			"right",
+        		lv_right_3_0, 
+        		"Product");
+	        afterParserOrEnumRuleCall();
+	    }
+
 )
+))*)
 ;
 
 
 
 
 
-// Entry rule entryRuleTerm
-entryRuleTerm returns [EObject current=null] 
+// Entry rule entryRuleProduct
+entryRuleProduct returns [EObject current=null] 
 	:
-	{ newCompositeNode(grammarAccess.getTermRule()); }
-	 iv_ruleTerm=ruleTerm 
-	 { $current=$iv_ruleTerm.current; } 
+	{ newCompositeNode(grammarAccess.getProductRule()); }
+	 iv_ruleProduct=ruleProduct 
+	 { $current=$iv_ruleProduct.current; } 
 	 EOF 
 ;
 
-// Rule Term
-ruleTerm returns [EObject current=null] 
+// Rule Product
+ruleProduct returns [EObject current=null] 
     @init { enterRule(); 
     }
     @after { leaveRule(); }:
 (
     { 
-        newCompositeNode(grammarAccess.getTermAccess().getTypesParserRuleCall_0()); 
+        newCompositeNode(grammarAccess.getProductAccess().getPowerParserRuleCall_0()); 
     }
-    this_Types_0=ruleTypes
+    this_Power_0=rulePower
     { 
-        $current = $this_Types_0.current; 
+        $current = $this_Power_0.current; 
         afterParserOrEnumRuleCall();
     }
 ((
     {
         $current = forceCreateModelElementAndSet(
-            grammarAccess.getTermAccess().getTermLeftAction_1_0(),
+            grammarAccess.getProductAccess().getProductLeftAction_1_0(),
             $current);
     }
 )(
 (
 		{ 
-	        newCompositeNode(grammarAccess.getTermAccess().getOperationsOperationsParserRuleCall_1_1_0()); 
+	        newCompositeNode(grammarAccess.getProductAccess().getOperationProductOperationEnumRuleCall_1_1_0()); 
 	    }
-		lv_Operations_2_0=ruleOperations		{
+		lv_operation_2_0=ruleProductOperation		{
 	        if ($current==null) {
-	            $current = createModelElementForParent(grammarAccess.getTermRule());
+	            $current = createModelElementForParent(grammarAccess.getProductRule());
 	        }
        		set(
        			$current, 
-       			"Operations",
-        		lv_Operations_2_0, 
-        		"Operations");
+       			"operation",
+        		lv_operation_2_0, 
+        		"ProductOperation");
 	        afterParserOrEnumRuleCall();
 	    }
 
@@ -153,17 +680,17 @@ ruleTerm returns [EObject current=null]
 )(
 (
 		{ 
-	        newCompositeNode(grammarAccess.getTermAccess().getRightTypesParserRuleCall_1_2_0()); 
+	        newCompositeNode(grammarAccess.getProductAccess().getRightPowerParserRuleCall_1_2_0()); 
 	    }
-		lv_right_3_0=ruleTypes		{
+		lv_right_3_0=rulePower		{
 	        if ($current==null) {
-	            $current = createModelElementForParent(grammarAccess.getTermRule());
+	            $current = createModelElementForParent(grammarAccess.getProductRule());
 	        }
        		set(
        			$current, 
        			"right",
         		lv_right_3_0, 
-        		"Types");
+        		"Power");
 	        afterParserOrEnumRuleCall();
 	    }
 
@@ -175,91 +702,201 @@ ruleTerm returns [EObject current=null]
 
 
 
-// Entry rule entryRuleTypes
-entryRuleTypes returns [EObject current=null] 
+// Entry rule entryRulePower
+entryRulePower returns [EObject current=null] 
 	:
-	{ newCompositeNode(grammarAccess.getTypesRule()); }
-	 iv_ruleTypes=ruleTypes 
-	 { $current=$iv_ruleTypes.current; } 
+	{ newCompositeNode(grammarAccess.getPowerRule()); }
+	 iv_rulePower=rulePower 
+	 { $current=$iv_rulePower.current; } 
 	 EOF 
 ;
 
-// Rule Types
-ruleTypes returns [EObject current=null] 
+// Rule Power
+rulePower returns [EObject current=null] 
     @init { enterRule(); 
     }
     @after { leaveRule(); }:
 (
     { 
-        newCompositeNode(grammarAccess.getTypesAccess().getArithmeticsParserRuleCall_0()); 
+        newCompositeNode(grammarAccess.getPowerAccess().getAtomParserRuleCall_0()); 
     }
-    this_Arithmetics_0=ruleArithmetics
+    this_Atom_0=ruleAtom
     { 
-        $current = $this_Arithmetics_0.current; 
+        $current = $this_Atom_0.current; 
         afterParserOrEnumRuleCall();
     }
+((
+    {
+        $current = forceCreateModelElementAndSet(
+            grammarAccess.getPowerAccess().getPowerBaseAction_1_0(),
+            $current);
+    }
+)	otherlv_2='^' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getPowerAccess().getCircumflexAccentKeyword_1_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getPowerAccess().getExponentAtomParserRuleCall_1_2_0()); 
+	    }
+		lv_exponent_3_0=ruleAtom		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getPowerRule());
+	        }
+       		set(
+       			$current, 
+       			"exponent",
+        		lv_exponent_3_0, 
+        		"Atom");
+	        afterParserOrEnumRuleCall();
+	    }
 
-    |
+)
+))*)
+;
+
+
+
+
+
+// Entry rule entryRuleAtom
+entryRuleAtom returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getAtomRule()); }
+	 iv_ruleAtom=ruleAtom 
+	 { $current=$iv_ruleAtom.current; } 
+	 EOF 
+;
+
+// Rule Atom
+ruleAtom returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(
     { 
-        newCompositeNode(grammarAccess.getTypesAccess().getStringsParserRuleCall_1()); 
+        newCompositeNode(grammarAccess.getAtomAccess().getLiteralParserRuleCall_0()); 
     }
-    this_Strings_1=ruleStrings
+    this_Literal_0=ruleLiteral
     { 
-        $current = $this_Strings_1.current; 
+        $current = $this_Literal_0.current; 
         afterParserOrEnumRuleCall();
     }
 
-    |(	otherlv_2='(' 
+    |(	otherlv_1='(' 
     {
-    	newLeafNode(otherlv_2, grammarAccess.getTypesAccess().getLeftParenthesisKeyword_2_0());
+    	newLeafNode(otherlv_1, grammarAccess.getAtomAccess().getLeftParenthesisKeyword_1_0());
     }
 
     { 
-        newCompositeNode(grammarAccess.getTypesAccess().getTermParserRuleCall_2_1()); 
+        newCompositeNode(grammarAccess.getAtomAccess().getRootExpressionParserRuleCall_1_1()); 
     }
-    this_Term_3=ruleTerm
+    this_RootExpression_2=ruleRootExpression
     { 
-        $current = $this_Term_3.current; 
+        $current = $this_RootExpression_2.current; 
         afterParserOrEnumRuleCall();
     }
-	otherlv_4=')' 
+	otherlv_3=')' 
     {
-    	newLeafNode(otherlv_4, grammarAccess.getTypesAccess().getRightParenthesisKeyword_2_2());
+    	newLeafNode(otherlv_3, grammarAccess.getAtomAccess().getRightParenthesisKeyword_1_2());
     }
-))
+)
+    |
+    { 
+        newCompositeNode(grammarAccess.getAtomAccess().getFunctionParserRuleCall_2()); 
+    }
+    this_Function_4=ruleFunction
+    { 
+        $current = $this_Function_4.current; 
+        afterParserOrEnumRuleCall();
+    }
+)
 ;
 
 
 
 
 
-// Entry rule entryRuleArithmetics
-entryRuleArithmetics returns [EObject current=null] 
+// Entry rule entryRuleFunction
+entryRuleFunction returns [EObject current=null] 
 	:
-	{ newCompositeNode(grammarAccess.getArithmeticsRule()); }
-	 iv_ruleArithmetics=ruleArithmetics 
-	 { $current=$iv_ruleArithmetics.current; } 
+	{ newCompositeNode(grammarAccess.getFunctionRule()); }
+	 iv_ruleFunction=ruleFunction 
+	 { $current=$iv_ruleFunction.current; } 
 	 EOF 
 ;
 
-// Rule Arithmetics
-ruleArithmetics returns [EObject current=null] 
+// Rule Function
+ruleFunction returns [EObject current=null] 
     @init { enterRule(); 
     }
     @after { leaveRule(); }:
 ((
+(
+		lv_name_0_0=RULE_ID
+		{
+			newLeafNode(lv_name_0_0, grammarAccess.getFunctionAccess().getNameIDTerminalRuleCall_0_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getFunctionRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"name",
+        		lv_name_0_0, 
+        		"ID");
+	    }
+
+)
+)	otherlv_1='(' 
     {
-        $current = forceCreateModelElement(
-            grammarAccess.getArithmeticsAccess().getExpressionAction_0(),
-            $current);
+    	newLeafNode(otherlv_1, grammarAccess.getFunctionAccess().getLeftParenthesisKeyword_1());
     }
+((
+(
+		{ 
+	        newCompositeNode(grammarAccess.getFunctionAccess().getParametersRootExpressionParserRuleCall_2_0_0()); 
+	    }
+		lv_parameters_2_0=ruleRootExpression		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getFunctionRule());
+	        }
+       		add(
+       			$current, 
+       			"parameters",
+        		lv_parameters_2_0, 
+        		"RootExpression");
+	        afterParserOrEnumRuleCall();
+	    }
+
 )
-    { 
-        newCompositeNode(grammarAccess.getArithmeticsAccess().getDECIMALParserRuleCall_1()); 
+)(	otherlv_3=',' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getFunctionAccess().getCommaKeyword_2_1_0());
     }
-ruleDECIMAL
-    { 
-        afterParserOrEnumRuleCall();
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getFunctionAccess().getParametersRootExpressionParserRuleCall_2_1_1_0()); 
+	    }
+		lv_parameters_4_0=ruleRootExpression		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getFunctionRule());
+	        }
+       		add(
+       			$current, 
+       			"parameters",
+        		lv_parameters_4_0, 
+        		"RootExpression");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*)?	otherlv_5=')' 
+    {
+    	newLeafNode(otherlv_5, grammarAccess.getFunctionAccess().getRightParenthesisKeyword_3());
     }
 )
 ;
@@ -268,32 +905,47 @@ ruleDECIMAL
 
 
 
-// Entry rule entryRuleStrings
-entryRuleStrings returns [EObject current=null] 
+// Entry rule entryRuleLiteral
+entryRuleLiteral returns [EObject current=null] 
 	:
-	{ newCompositeNode(grammarAccess.getStringsRule()); }
-	 iv_ruleStrings=ruleStrings 
-	 { $current=$iv_ruleStrings.current; } 
+	{ newCompositeNode(grammarAccess.getLiteralRule()); }
+	 iv_ruleLiteral=ruleLiteral 
+	 { $current=$iv_ruleLiteral.current; } 
 	 EOF 
 ;
 
-// Rule Strings
-ruleStrings returns [EObject current=null] 
+// Rule Literal
+ruleLiteral returns [EObject current=null] 
     @init { enterRule(); 
     }
     @after { leaveRule(); }:
-((
-    {
-        $current = forceCreateModelElement(
-            grammarAccess.getStringsAccess().getExpressionAction_0(),
-            $current);
+(
+    { 
+        newCompositeNode(grammarAccess.getLiteralAccess().getNumberLiteralParserRuleCall_0()); 
     }
-)
+    this_NumberLiteral_0=ruleNumberLiteral
+    { 
+        $current = $this_NumberLiteral_0.current; 
+        afterParserOrEnumRuleCall();
+    }
+
+    |
+    { 
+        newCompositeNode(grammarAccess.getLiteralAccess().getBooleanLiteralParserRuleCall_1()); 
+    }
+    this_BooleanLiteral_1=ruleBooleanLiteral
+    { 
+        $current = $this_BooleanLiteral_1.current; 
+        afterParserOrEnumRuleCall();
+    }
+
+    |
     { 
-        newCompositeNode(grammarAccess.getStringsAccess().getE_STRINGParserRuleCall_1()); 
+        newCompositeNode(grammarAccess.getLiteralAccess().getFormalParameterParserRuleCall_2()); 
     }
-ruleE_STRING
+    this_FormalParameter_2=ruleFormalParameter
     { 
+        $current = $this_FormalParameter_2.current; 
         afterParserOrEnumRuleCall();
     }
 )
@@ -303,117 +955,191 @@ ruleE_STRING
 
 
 
-// Entry rule entryRuleDECIMAL
-entryRuleDECIMAL returns [String current=null] 
+// Entry rule entryRuleFormalParameter
+entryRuleFormalParameter returns [EObject current=null] 
 	:
-	{ newCompositeNode(grammarAccess.getDECIMALRule()); } 
-	 iv_ruleDECIMAL=ruleDECIMAL 
-	 { $current=$iv_ruleDECIMAL.current.getText(); }  
+	{ newCompositeNode(grammarAccess.getFormalParameterRule()); }
+	 iv_ruleFormalParameter=ruleFormalParameter 
+	 { $current=$iv_ruleFormalParameter.current; } 
 	 EOF 
 ;
 
-// Rule DECIMAL
-ruleDECIMAL returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+// Rule FormalParameter
+ruleFormalParameter returns [EObject current=null] 
     @init { enterRule(); 
     }
     @after { leaveRule(); }:
-((
-	kw='-' 
-    {
-        $current.merge(kw);
-        newLeafNode(kw, grammarAccess.getDECIMALAccess().getHyphenMinusKeyword_0()); 
-    }
-)?    this_INT_1=RULE_INT    {
-		$current.merge(this_INT_1);
-    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getFormalParameterAccess().getValueEStringParserRuleCall_0()); 
+	    }
+		lv_value_0_0=ruleEString		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getFormalParameterRule());
+	        }
+       		set(
+       			$current, 
+       			"value",
+        		lv_value_0_0, 
+        		"EString");
+	        afterParserOrEnumRuleCall();
+	    }
 
-    { 
-    newLeafNode(this_INT_1, grammarAccess.getDECIMALAccess().getINTTerminalRuleCall_1()); 
+)
+)
+;
+
+
+
+
+
+// Entry rule entryRuleBooleanLiteral
+entryRuleBooleanLiteral returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getBooleanLiteralRule()); }
+	 iv_ruleBooleanLiteral=ruleBooleanLiteral 
+	 { $current=$iv_ruleBooleanLiteral.current; } 
+	 EOF 
+;
+
+// Rule BooleanLiteral
+ruleBooleanLiteral returns [EObject current=null] 
+    @init { enterRule(); 
     }
+    @after { leaveRule(); }:
 (
-	kw='.' 
-    {
-        $current.merge(kw);
-        newLeafNode(kw, grammarAccess.getDECIMALAccess().getFullStopKeyword_2_0()); 
-    }
-    this_INT_3=RULE_INT    {
-		$current.merge(this_INT_3);
-    }
+(
+		{ 
+	        newCompositeNode(grammarAccess.getBooleanLiteralAccess().getValueEBooleanParserRuleCall_0()); 
+	    }
+		lv_value_0_0=ruleEBoolean		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getBooleanLiteralRule());
+	        }
+       		set(
+       			$current, 
+       			"value",
+        		lv_value_0_0, 
+        		"EBoolean");
+	        afterParserOrEnumRuleCall();
+	    }
 
-    { 
-    newLeafNode(this_INT_3, grammarAccess.getDECIMALAccess().getINTTerminalRuleCall_2_1()); 
-    }
-)?)
-    ;
+)
+)
+;
 
 
 
 
 
-// Entry rule entryRuleE_STRING
-entryRuleE_STRING returns [String current=null] 
+// Entry rule entryRuleNumberLiteral
+entryRuleNumberLiteral returns [EObject current=null] 
 	:
-	{ newCompositeNode(grammarAccess.getE_STRINGRule()); } 
-	 iv_ruleE_STRING=ruleE_STRING 
-	 { $current=$iv_ruleE_STRING.current.getText(); }  
+	{ newCompositeNode(grammarAccess.getNumberLiteralRule()); }
+	 iv_ruleNumberLiteral=ruleNumberLiteral 
+	 { $current=$iv_ruleNumberLiteral.current; } 
 	 EOF 
 ;
 
-// Rule E_STRING
-ruleE_STRING returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+// Rule NumberLiteral
+ruleNumberLiteral returns [EObject current=null] 
     @init { enterRule(); 
     }
     @after { leaveRule(); }:
-(    this_STRING_0=RULE_STRING    {
-		$current.merge(this_STRING_0);
+(
+    { 
+        newCompositeNode(grammarAccess.getNumberLiteralAccess().getIntLiteralParserRuleCall_0()); 
     }
-
+    this_IntLiteral_0=ruleIntLiteral
     { 
-    newLeafNode(this_STRING_0, grammarAccess.getE_STRINGAccess().getSTRINGTerminalRuleCall_0()); 
+        $current = $this_IntLiteral_0.current; 
+        afterParserOrEnumRuleCall();
     }
 
-    |    this_ID_1=RULE_ID    {
-		$current.merge(this_ID_1);
+    |
+    { 
+        newCompositeNode(grammarAccess.getNumberLiteralAccess().getDoubleLiteralParserRuleCall_1()); 
     }
-
+    this_DoubleLiteral_1=ruleDoubleLiteral
     { 
-    newLeafNode(this_ID_1, grammarAccess.getE_STRINGAccess().getIDTerminalRuleCall_1()); 
+        $current = $this_DoubleLiteral_1.current; 
+        afterParserOrEnumRuleCall();
     }
 )
-    ;
+;
+
+
+
+
+
+// Entry rule entryRuleIntLiteral
+entryRuleIntLiteral returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getIntLiteralRule()); }
+	 iv_ruleIntLiteral=ruleIntLiteral 
+	 { $current=$iv_ruleIntLiteral.current; } 
+	 EOF 
+;
+
+// Rule IntLiteral
+ruleIntLiteral returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getIntLiteralAccess().getValueIntegerParserRuleCall_0()); 
+	    }
+		lv_value_0_0=ruleInteger		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getIntLiteralRule());
+	        }
+       		set(
+       			$current, 
+       			"value",
+        		lv_value_0_0, 
+        		"Integer");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)
+;
 
 
 
 
 
-// Entry rule entryRuleOperations
-entryRuleOperations returns [EObject current=null] 
+// Entry rule entryRuleDoubleLiteral
+entryRuleDoubleLiteral returns [EObject current=null] 
 	:
-	{ newCompositeNode(grammarAccess.getOperationsRule()); }
-	 iv_ruleOperations=ruleOperations 
-	 { $current=$iv_ruleOperations.current; } 
+	{ newCompositeNode(grammarAccess.getDoubleLiteralRule()); }
+	 iv_ruleDoubleLiteral=ruleDoubleLiteral 
+	 { $current=$iv_ruleDoubleLiteral.current; } 
 	 EOF 
 ;
 
-// Rule Operations
-ruleOperations returns [EObject current=null] 
+// Rule DoubleLiteral
+ruleDoubleLiteral returns [EObject current=null] 
     @init { enterRule(); 
     }
     @after { leaveRule(); }:
 (
 (
 		{ 
-	        newCompositeNode(grammarAccess.getOperationsAccess().getTermOperationsOperationsTypeEnumRuleCall_0()); 
+	        newCompositeNode(grammarAccess.getDoubleLiteralAccess().getValueDoubleParserRuleCall_0()); 
 	    }
-		lv_termOperations_0_0=ruleOperationsType		{
+		lv_value_0_0=ruleDouble		{
 	        if ($current==null) {
-	            $current = createModelElementForParent(grammarAccess.getOperationsRule());
+	            $current = createModelElementForParent(grammarAccess.getDoubleLiteralRule());
 	        }
        		set(
        			$current, 
-       			"termOperations",
-        		lv_termOperations_0_0, 
-        		"OperationsType");
+       			"value",
+        		lv_value_0_0, 
+        		"Double");
 	        afterParserOrEnumRuleCall();
 	    }
 
@@ -425,92 +1151,113 @@ ruleOperations returns [EObject current=null]
 
 
 
-// Rule OperationsType
-ruleOperationsType returns [Enumerator current=null] 
+// Rule ProductOperation
+ruleProductOperation returns [Enumerator current=null] 
     @init { enterRule(); }
     @after { leaveRule(); }:
-((	enumLiteral_0='+' 
+((	enumLiteral_0='*' 
 	{
-        $current = grammarAccess.getOperationsTypeAccess().getADDEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
-        newLeafNode(enumLiteral_0, grammarAccess.getOperationsTypeAccess().getADDEnumLiteralDeclaration_0()); 
+        $current = grammarAccess.getProductOperationAccess().getMULTEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_0, grammarAccess.getProductOperationAccess().getMULTEnumLiteralDeclaration_0()); 
     }
 )
-    |(	enumLiteral_1='-' 
+    |(	enumLiteral_1='/' 
 	{
-        $current = grammarAccess.getOperationsTypeAccess().getSUBEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
-        newLeafNode(enumLiteral_1, grammarAccess.getOperationsTypeAccess().getSUBEnumLiteralDeclaration_1()); 
+        $current = grammarAccess.getProductOperationAccess().getDIVEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_1, grammarAccess.getProductOperationAccess().getDIVEnumLiteralDeclaration_1()); 
     }
 )
-    |(	enumLiteral_2='*' 
+    |(	enumLiteral_2='%' 
 	{
-        $current = grammarAccess.getOperationsTypeAccess().getMULTEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
-        newLeafNode(enumLiteral_2, grammarAccess.getOperationsTypeAccess().getMULTEnumLiteralDeclaration_2()); 
+        $current = grammarAccess.getProductOperationAccess().getMODEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_2, grammarAccess.getProductOperationAccess().getMODEnumLiteralDeclaration_2()); 
     }
-)
-    |(	enumLiteral_3='/' 
+));
+
+
+
+// Rule TermOperation
+ruleTermOperation returns [Enumerator current=null] 
+    @init { enterRule(); }
+    @after { leaveRule(); }:
+((	enumLiteral_0='+' 
 	{
-        $current = grammarAccess.getOperationsTypeAccess().getDIVEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
-        newLeafNode(enumLiteral_3, grammarAccess.getOperationsTypeAccess().getDIVEnumLiteralDeclaration_3()); 
+        $current = grammarAccess.getTermOperationAccess().getADDEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_0, grammarAccess.getTermOperationAccess().getADDEnumLiteralDeclaration_0()); 
     }
 )
-    |(	enumLiteral_4='%' 
+    |(	enumLiteral_1='-' 
 	{
-        $current = grammarAccess.getOperationsTypeAccess().getMODEnumLiteralDeclaration_4().getEnumLiteral().getInstance();
-        newLeafNode(enumLiteral_4, grammarAccess.getOperationsTypeAccess().getMODEnumLiteralDeclaration_4()); 
+        $current = grammarAccess.getTermOperationAccess().getSUBEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_1, grammarAccess.getTermOperationAccess().getSUBEnumLiteralDeclaration_1()); 
     }
-)
-    |(	enumLiteral_5='>' 
+));
+
+
+
+// Rule CompareOperation
+ruleCompareOperation returns [Enumerator current=null] 
+    @init { enterRule(); }
+    @after { leaveRule(); }:
+((	enumLiteral_0='>' 
 	{
-        $current = grammarAccess.getOperationsTypeAccess().getGREATEREnumLiteralDeclaration_5().getEnumLiteral().getInstance();
-        newLeafNode(enumLiteral_5, grammarAccess.getOperationsTypeAccess().getGREATEREnumLiteralDeclaration_5()); 
+        $current = grammarAccess.getCompareOperationAccess().getGREATEREnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_0, grammarAccess.getCompareOperationAccess().getGREATEREnumLiteralDeclaration_0()); 
     }
 )
-    |(	enumLiteral_6='<' 
+    |(	enumLiteral_1='<' 
 	{
-        $current = grammarAccess.getOperationsTypeAccess().getLESSEnumLiteralDeclaration_6().getEnumLiteral().getInstance();
-        newLeafNode(enumLiteral_6, grammarAccess.getOperationsTypeAccess().getLESSEnumLiteralDeclaration_6()); 
+        $current = grammarAccess.getCompareOperationAccess().getLESSEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_1, grammarAccess.getCompareOperationAccess().getLESSEnumLiteralDeclaration_1()); 
     }
 )
-    |(	enumLiteral_7='=' 
+    |(	enumLiteral_2='=' 
 	{
-        $current = grammarAccess.getOperationsTypeAccess().getEQUALSEnumLiteralDeclaration_7().getEnumLiteral().getInstance();
-        newLeafNode(enumLiteral_7, grammarAccess.getOperationsTypeAccess().getEQUALSEnumLiteralDeclaration_7()); 
+        $current = grammarAccess.getCompareOperationAccess().getEQUALSEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_2, grammarAccess.getCompareOperationAccess().getEQUALSEnumLiteralDeclaration_2()); 
     }
 )
-    |(	enumLiteral_8='!=' 
+    |(	enumLiteral_3='!=' 
 	{
-        $current = grammarAccess.getOperationsTypeAccess().getNOTEQUALEnumLiteralDeclaration_8().getEnumLiteral().getInstance();
-        newLeafNode(enumLiteral_8, grammarAccess.getOperationsTypeAccess().getNOTEQUALEnumLiteralDeclaration_8()); 
+        $current = grammarAccess.getCompareOperationAccess().getNOTEQUALEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_3, grammarAccess.getCompareOperationAccess().getNOTEQUALEnumLiteralDeclaration_3()); 
     }
 )
-    |(	enumLiteral_9='<=' 
+    |(	enumLiteral_4='<=' 
 	{
-        $current = grammarAccess.getOperationsTypeAccess().getLESSEQUALEnumLiteralDeclaration_9().getEnumLiteral().getInstance();
-        newLeafNode(enumLiteral_9, grammarAccess.getOperationsTypeAccess().getLESSEQUALEnumLiteralDeclaration_9()); 
+        $current = grammarAccess.getCompareOperationAccess().getLESSEQUALEnumLiteralDeclaration_4().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_4, grammarAccess.getCompareOperationAccess().getLESSEQUALEnumLiteralDeclaration_4()); 
     }
 )
-    |(	enumLiteral_10='>=' 
+    |(	enumLiteral_5='>=' 
 	{
-        $current = grammarAccess.getOperationsTypeAccess().getGREATEREQUALEnumLiteralDeclaration_10().getEnumLiteral().getInstance();
-        newLeafNode(enumLiteral_10, grammarAccess.getOperationsTypeAccess().getGREATEREQUALEnumLiteralDeclaration_10()); 
+        $current = grammarAccess.getCompareOperationAccess().getGREATEREQUALEnumLiteralDeclaration_5().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_5, grammarAccess.getCompareOperationAccess().getGREATEREQUALEnumLiteralDeclaration_5()); 
     }
-)
-    |(	enumLiteral_11='AND' 
+));
+
+
+
+// Rule BooleanOperation
+ruleBooleanOperation returns [Enumerator current=null] 
+    @init { enterRule(); }
+    @after { leaveRule(); }:
+((	enumLiteral_0='AND' 
 	{
-        $current = grammarAccess.getOperationsTypeAccess().getANDEnumLiteralDeclaration_11().getEnumLiteral().getInstance();
-        newLeafNode(enumLiteral_11, grammarAccess.getOperationsTypeAccess().getANDEnumLiteralDeclaration_11()); 
+        $current = grammarAccess.getBooleanOperationAccess().getANDEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_0, grammarAccess.getBooleanOperationAccess().getANDEnumLiteralDeclaration_0()); 
     }
 )
-    |(	enumLiteral_12='OR' 
+    |(	enumLiteral_1='OR' 
 	{
-        $current = grammarAccess.getOperationsTypeAccess().getOREnumLiteralDeclaration_12().getEnumLiteral().getInstance();
-        newLeafNode(enumLiteral_12, grammarAccess.getOperationsTypeAccess().getOREnumLiteralDeclaration_12()); 
+        $current = grammarAccess.getBooleanOperationAccess().getOREnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_1, grammarAccess.getBooleanOperationAccess().getOREnumLiteralDeclaration_1()); 
     }
 )
-    |(	enumLiteral_13='XOR' 
+    |(	enumLiteral_2='XOR' 
 	{
-        $current = grammarAccess.getOperationsTypeAccess().getXOREnumLiteralDeclaration_13().getEnumLiteral().getInstance();
-        newLeafNode(enumLiteral_13, grammarAccess.getOperationsTypeAccess().getXOREnumLiteralDeclaration_13()); 
+        $current = grammarAccess.getBooleanOperationAccess().getXOREnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_2, grammarAccess.getBooleanOperationAccess().getXOREnumLiteralDeclaration_2()); 
     }
 ));
 
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.tokens b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.tokens
index 4c16ce2206c2bf9aaf6cd9ae94f62eab6668bcf5..7bffa1dbb63541505d90bc7c83dc8479c20d5d40 100644
--- a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.tokens
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.tokens
@@ -1,41 +1,55 @@
-RULE_ID=6
-T__27=27
-T__26=26
-T__25=25
-T__24=24
-T__23=23
-T__22=22
-RULE_ANY_OTHER=10
-T__21=21
-T__20=20
-RULE_SL_COMMENT=8
-RULE_ML_COMMENT=7
-T__19=19
-RULE_STRING=5
-T__16=16
-T__15=15
-T__18=18
-T__17=17
-T__12=12
-T__11=11
-T__14=14
-T__13=13
-RULE_INT=4
-RULE_WS=9
-'>='=24
-'/'=17
-'OR'=26
-'>'=19
-'XOR'=27
-'<='=23
-'!='=22
-'='=21
-'<'=20
-'('=11
-'-'=13
-'*'=16
-'+'=15
-')'=12
-'.'=14
-'AND'=25
-'%'=18
+RULE_ID=6
+T__29=29
+T__28=28
+T__27=27
+T__26=26
+T__25=25
+T__24=24
+T__23=23
+T__22=22
+RULE_ANY_OTHER=10
+T__21=21
+T__20=20
+RULE_SL_COMMENT=8
+RULE_ML_COMMENT=7
+T__30=30
+T__19=19
+T__31=31
+RULE_STRING=5
+T__32=32
+T__33=33
+T__16=16
+T__34=34
+T__15=15
+T__18=18
+T__17=17
+T__12=12
+T__11=11
+T__14=14
+T__13=13
+RULE_INT=4
+RULE_WS=9
+'true'=13
+'NOT'=17
+'>='=31
+'/'=23
+'OR'=33
+'>'=26
+'XOR'=34
+'?'=15
+'<='=30
+'!='=29
+'='=28
+'false'=14
+'<'=27
+':'=16
+'('=19
+'-'=11
+'*'=22
+'+'=25
+','=21
+'.'=12
+')'=20
+'AND'=32
+'^'=18
+'%'=24
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslLexer.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslLexer.java
index a35af1c2b726d97cf58fe1f5cb3ad694e1293536..f5c9b3f0fca54dac20751c79dc53c0e58e92ce68 100644
--- a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslLexer.java
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslLexer.java
@@ -1,1287 +1,1525 @@
-package org.xtext.example.mydsl.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;
-
+package org.xtext.example.mydsl.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 InternalMyDslLexer extends Lexer {
-    public static final int RULE_ID=6;
-    public static final int T__27=27;
-    public static final int T__26=26;
-    public static final int T__25=25;
-    public static final int T__24=24;
-    public static final int T__23=23;
-    public static final int T__22=22;
-    public static final int RULE_ANY_OTHER=10;
-    public static final int T__21=21;
-    public static final int T__20=20;
-    public static final int EOF=-1;
-    public static final int RULE_SL_COMMENT=8;
-    public static final int RULE_ML_COMMENT=7;
-    public static final int T__19=19;
-    public static final int RULE_STRING=5;
-    public static final int T__16=16;
-    public static final int T__15=15;
-    public static final int T__18=18;
-    public static final int T__17=17;
-    public static final int T__12=12;
-    public static final int T__11=11;
-    public static final int T__14=14;
-    public static final int T__13=13;
-    public static final int RULE_INT=4;
-    public static final int RULE_WS=9;
-
-    // delegates
-    // delegators
-
-    public InternalMyDslLexer() {;} 
-    public InternalMyDslLexer(CharStream input) {
-        this(input, new RecognizerSharedState());
-    }
-    public InternalMyDslLexer(CharStream input, RecognizerSharedState state) {
-        super(input,state);
-
-    }
-    public String getGrammarFileName() { return "../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g"; }
-
-    // $ANTLR start "T__11"
-    public final void mT__11() throws RecognitionException {
-        try {
-            int _type = T__11;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:11:7: ( '(' )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:11:9: '('
-            {
-            match('('); 
-
-            }
-
-            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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:12:7: ( ')' )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:12:9: ')'
-            {
-            match(')'); 
-
-            }
-
-            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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:13:7: ( '-' )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:14:7: ( '.' )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:14:9: '.'
-            {
-            match('.'); 
-
-            }
-
-            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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:15:7: ( '+' )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:16:7: ( '*' )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:17:7: ( '/' )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:18:7: ( '%' )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:19:7: ( '>' )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:19:9: '>'
-            {
-            match('>'); 
-
-            }
-
-            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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:20:7: ( '<' )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:20:9: '<'
-            {
-            match('<'); 
-
-            }
-
-            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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:21:7: ( '=' )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:21:9: '='
-            {
-            match('='); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__21"
-
-    // $ANTLR start "T__22"
-    public final void mT__22() throws RecognitionException {
-        try {
-            int _type = T__22;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:22:7: ( '!=' )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:23:7: ( '<=' )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:23:9: '<='
-            {
-            match("<="); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__23"
-
-    // $ANTLR start "T__24"
-    public final void mT__24() throws RecognitionException {
-        try {
-            int _type = T__24;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:24:7: ( '>=' )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:24:9: '>='
-            {
-            match(">="); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__24"
-
-    // $ANTLR start "T__25"
-    public final void mT__25() throws RecognitionException {
-        try {
-            int _type = T__25;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:25:7: ( 'AND' )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:25:9: 'AND'
-            {
-            match("AND"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__25"
-
-    // $ANTLR start "T__26"
-    public final void mT__26() throws RecognitionException {
-        try {
-            int _type = T__26;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:26:7: ( 'OR' )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:26:9: 'OR'
-            {
-            match("OR"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__26"
-
-    // $ANTLR start "T__27"
-    public final void mT__27() throws RecognitionException {
-        try {
-            int _type = T__27;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:27:7: ( 'XOR' )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:27:9: 'XOR'
-            {
-            match("XOR"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__27"
-
-    // $ANTLR start "RULE_ID"
-    public final void mRULE_ID() throws RecognitionException {
-        try {
-            int _type = RULE_ID;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:519:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:519:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
-            {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:519:11: ( '^' )?
-            int alt1=2;
-            int LA1_0 = input.LA(1);
-
-            if ( (LA1_0=='^') ) {
-                alt1=1;
-            }
-            switch (alt1) {
-                case 1 :
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:519: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:519: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:521:10: ( ( '0' .. '9' )+ )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:521:12: ( '0' .. '9' )+
-            {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:521: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:521: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:523:13: ( ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:523:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
-            {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:523: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:523:16: '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
-                    {
-                    match('\"'); 
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:523: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:523: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:523: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:523:86: '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
-                    {
-                    match('\''); 
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:523: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:523: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:523: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:525:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:525:19: '/*' ( options {greedy=false; } : . )* '*/'
-            {
-            match("/*"); 
-
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:525: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:525: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:527:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:527:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
-            {
-            match("//"); 
-
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:527: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:527: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:527: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:527:41: ( '\\r' )? '\\n'
-                    {
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:527:41: ( '\\r' )?
-                    int alt9=2;
-                    int LA9_0 = input.LA(1);
-
-                    if ( (LA9_0=='\r') ) {
-                        alt9=1;
-                    }
-                    switch (alt9) {
-                        case 1 :
-                            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:527: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:529:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:529:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
-            {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:529: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:531:16: ( . )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:531:18: .
-            {
-            matchAny(); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "RULE_ANY_OTHER"
-
-    public void mTokens() throws RecognitionException {
-        // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.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 | T__24 | T__25 | T__26 | T__27 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
-        int alt12=24;
-        alt12 = dfa12.predict(input);
-        switch (alt12) {
-            case 1 :
-                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:10: T__11
-                {
-                mT__11(); 
-
-                }
-                break;
-            case 2 :
-                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:16: T__12
-                {
-                mT__12(); 
-
-                }
-                break;
-            case 3 :
-                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:22: T__13
-                {
-                mT__13(); 
-
-                }
-                break;
-            case 4 :
-                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:28: T__14
-                {
-                mT__14(); 
-
-                }
-                break;
-            case 5 :
-                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:34: T__15
-                {
-                mT__15(); 
-
-                }
-                break;
-            case 6 :
-                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:40: T__16
-                {
-                mT__16(); 
-
-                }
-                break;
-            case 7 :
-                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:46: T__17
-                {
-                mT__17(); 
-
-                }
-                break;
-            case 8 :
-                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:52: T__18
-                {
-                mT__18(); 
-
-                }
-                break;
-            case 9 :
-                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:58: T__19
-                {
-                mT__19(); 
-
-                }
-                break;
-            case 10 :
-                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:64: T__20
-                {
-                mT__20(); 
-
-                }
-                break;
-            case 11 :
-                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:70: T__21
-                {
-                mT__21(); 
-
-                }
-                break;
-            case 12 :
-                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:76: T__22
-                {
-                mT__22(); 
-
-                }
-                break;
-            case 13 :
-                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:82: T__23
-                {
-                mT__23(); 
-
-                }
-                break;
-            case 14 :
-                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:88: T__24
-                {
-                mT__24(); 
-
-                }
-                break;
-            case 15 :
-                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:94: T__25
-                {
-                mT__25(); 
-
-                }
-                break;
-            case 16 :
-                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:100: T__26
-                {
-                mT__26(); 
-
-                }
-                break;
-            case 17 :
-                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:106: T__27
-                {
-                mT__27(); 
-
-                }
-                break;
-            case 18 :
-                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:112: RULE_ID
-                {
-                mRULE_ID(); 
-
-                }
-                break;
-            case 19 :
-                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:120: RULE_INT
-                {
-                mRULE_INT(); 
-
-                }
-                break;
-            case 20 :
-                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:129: RULE_STRING
-                {
-                mRULE_STRING(); 
-
-                }
-                break;
-            case 21 :
-                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:141: RULE_ML_COMMENT
-                {
-                mRULE_ML_COMMENT(); 
-
-                }
-                break;
-            case 22 :
-                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:157: RULE_SL_COMMENT
-                {
-                mRULE_SL_COMMENT(); 
-
-                }
-                break;
-            case 23 :
-                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:173: RULE_WS
-                {
-                mRULE_WS(); 
-
-                }
-                break;
-            case 24 :
-                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:181: RULE_ANY_OTHER
-                {
-                mRULE_ANY_OTHER(); 
-
-                }
-                break;
-
-        }
-
-    }
-
-
-    protected DFA12 dfa12 = new DFA12(this);
-    static final String DFA12_eotS =
-        "\7\uffff\1\37\1\uffff\1\42\1\44\1\uffff\1\26\3\50\1\26\2\uffff"+
-        "\2\26\22\uffff\1\50\1\uffff\1\57\1\50\3\uffff\1\61\1\uffff\1\62"+
-        "\2\uffff";
-    static final String DFA12_eofS =
-        "\63\uffff";
-    static final String DFA12_minS =
-        "\1\0\6\uffff\1\52\1\uffff\2\75\1\uffff\1\75\1\116\1\122\1\117\1"+
-        "\101\2\uffff\2\0\22\uffff\1\104\1\uffff\1\60\1\122\3\uffff\1\60"+
-        "\1\uffff\1\60\2\uffff";
-    static final String DFA12_maxS =
-        "\1\uffff\6\uffff\1\57\1\uffff\2\75\1\uffff\1\75\1\116\1\122\1\117"+
-        "\1\172\2\uffff\2\uffff\22\uffff\1\104\1\uffff\1\172\1\122\3\uffff"+
-        "\1\172\1\uffff\1\172\2\uffff";
-    static final String DFA12_acceptS =
-        "\1\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\uffff\1\10\2\uffff\1\13\5\uffff"+
-        "\1\22\1\23\2\uffff\1\27\1\30\1\1\1\2\1\3\1\4\1\5\1\6\1\25\1\26\1"+
-        "\7\1\10\1\16\1\11\1\15\1\12\1\13\1\14\1\uffff\1\22\2\uffff\1\23"+
-        "\1\24\1\27\1\uffff\1\20\1\uffff\1\17\1\21";
-    static final String DFA12_specialS =
-        "\1\0\22\uffff\1\1\1\2\36\uffff}>";
-    static final String[] DFA12_transitionS = {
-            "\11\26\2\25\2\26\1\25\22\26\1\25\1\14\1\23\2\26\1\10\1\26\1"+
-            "\24\1\1\1\2\1\6\1\5\1\26\1\3\1\4\1\7\12\22\2\26\1\12\1\13\1"+
-            "\11\2\26\1\15\15\21\1\16\10\21\1\17\2\21\3\26\1\20\1\21\1\26"+
-            "\32\21\uff85\26",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\1\35\4\uffff\1\36",
-            "",
-            "\1\41",
-            "\1\43",
-            "",
-            "\1\46",
-            "\1\47",
-            "\1\51",
-            "\1\52",
-            "\32\50\4\uffff\1\50\1\uffff\32\50",
-            "",
-            "",
-            "\0\54",
-            "\0\54",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\1\56",
-            "",
-            "\12\50\7\uffff\32\50\4\uffff\1\50\1\uffff\32\50",
-            "\1\60",
-            "",
-            "",
-            "",
-            "\12\50\7\uffff\32\50\4\uffff\1\50\1\uffff\32\50",
-            "",
-            "\12\50\7\uffff\32\50\4\uffff\1\50\1\uffff\32\50",
-            "",
-            ""
-    };
-
-    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 | T__24 | T__25 | T__26 | T__27 | 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_0 = input.LA(1);
-
-                        s = -1;
-                        if ( (LA12_0=='(') ) {s = 1;}
-
-                        else if ( (LA12_0==')') ) {s = 2;}
-
-                        else if ( (LA12_0=='-') ) {s = 3;}
-
-                        else if ( (LA12_0=='.') ) {s = 4;}
-
-                        else if ( (LA12_0=='+') ) {s = 5;}
-
-                        else if ( (LA12_0=='*') ) {s = 6;}
-
-                        else if ( (LA12_0=='/') ) {s = 7;}
-
-                        else if ( (LA12_0=='%') ) {s = 8;}
-
-                        else if ( (LA12_0=='>') ) {s = 9;}
-
-                        else if ( (LA12_0=='<') ) {s = 10;}
-
-                        else if ( (LA12_0=='=') ) {s = 11;}
-
-                        else if ( (LA12_0=='!') ) {s = 12;}
-
-                        else if ( (LA12_0=='A') ) {s = 13;}
-
-                        else if ( (LA12_0=='O') ) {s = 14;}
-
-                        else if ( (LA12_0=='X') ) {s = 15;}
-
-                        else if ( (LA12_0=='^') ) {s = 16;}
-
-                        else if ( ((LA12_0>='B' && LA12_0<='N')||(LA12_0>='P' && LA12_0<='W')||(LA12_0>='Y' && LA12_0<='Z')||LA12_0=='_'||(LA12_0>='a' && LA12_0<='z')) ) {s = 17;}
-
-                        else if ( ((LA12_0>='0' && LA12_0<='9')) ) {s = 18;}
-
-                        else if ( (LA12_0=='\"') ) {s = 19;}
-
-                        else if ( (LA12_0=='\'') ) {s = 20;}
-
-                        else if ( ((LA12_0>='\t' && LA12_0<='\n')||LA12_0=='\r'||LA12_0==' ') ) {s = 21;}
-
-                        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<='\uFFFF')) ) {s = 22;}
-
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA12_19 = input.LA(1);
-
-                        s = -1;
-                        if ( ((LA12_19>='\u0000' && LA12_19<='\uFFFF')) ) {s = 44;}
-
-                        else s = 22;
-
-                        if ( s>=0 ) return s;
-                        break;
-                    case 2 : 
-                        int LA12_20 = input.LA(1);
-
-                        s = -1;
-                        if ( ((LA12_20>='\u0000' && LA12_20<='\uFFFF')) ) {s = 44;}
-
-                        else s = 22;
-
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 12, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
- 
-
+public class InternalMyDslLexer extends Lexer {
+    public static final int RULE_ID=6;
+    public static final int T__29=29;
+    public static final int T__28=28;
+    public static final int T__27=27;
+    public static final int T__26=26;
+    public static final int T__25=25;
+    public static final int T__24=24;
+    public static final int T__23=23;
+    public static final int T__22=22;
+    public static final int RULE_ANY_OTHER=10;
+    public static final int T__21=21;
+    public static final int T__20=20;
+    public static final int EOF=-1;
+    public static final int RULE_SL_COMMENT=8;
+    public static final int RULE_ML_COMMENT=7;
+    public static final int T__30=30;
+    public static final int T__19=19;
+    public static final int T__31=31;
+    public static final int T__32=32;
+    public static final int RULE_STRING=5;
+    public static final int T__16=16;
+    public static final int T__33=33;
+    public static final int T__15=15;
+    public static final int T__34=34;
+    public static final int T__18=18;
+    public static final int T__17=17;
+    public static final int T__12=12;
+    public static final int T__11=11;
+    public static final int T__14=14;
+    public static final int T__13=13;
+    public static final int RULE_INT=4;
+    public static final int RULE_WS=9;
+
+    // delegates
+    // delegators
+
+    public InternalMyDslLexer() {;} 
+    public InternalMyDslLexer(CharStream input) {
+        this(input, new RecognizerSharedState());
+    }
+    public InternalMyDslLexer(CharStream input, RecognizerSharedState state) {
+        super(input,state);
+
+    }
+    public String getGrammarFileName() { return "../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g"; }
+
+    // $ANTLR start "T__11"
+    public final void mT__11() throws RecognitionException {
+        try {
+            int _type = T__11;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:11:7: ( '-' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:11:9: '-'
+            {
+            match('-'); 
+
+            }
+
+            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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:12:7: ( '.' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:12:9: '.'
+            {
+            match('.'); 
+
+            }
+
+            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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:13:7: ( 'true' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:13:9: 'true'
+            {
+            match("true"); 
+
+
+            }
+
+            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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:14:7: ( 'false' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:14:9: 'false'
+            {
+            match("false"); 
+
+
+            }
+
+            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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:15:7: ( '?' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:16:7: ( ':' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:17:7: ( 'NOT' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:17:9: 'NOT'
+            {
+            match("NOT"); 
+
+
+            }
+
+            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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:18:7: ( '^' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:19:7: ( '(' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:19:9: '('
+            {
+            match('('); 
+
+            }
+
+            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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:20:7: ( ')' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:20:9: ')'
+            {
+            match(')'); 
+
+            }
+
+            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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:21:7: ( ',' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:21:9: ','
+            {
+            match(','); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__21"
+
+    // $ANTLR start "T__22"
+    public final void mT__22() throws RecognitionException {
+        try {
+            int _type = T__22;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:22:7: ( '*' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:23:7: ( '/' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:23:9: '/'
+            {
+            match('/'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__23"
+
+    // $ANTLR start "T__24"
+    public final void mT__24() throws RecognitionException {
+        try {
+            int _type = T__24;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:24:7: ( '%' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:24:9: '%'
+            {
+            match('%'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__24"
+
+    // $ANTLR start "T__25"
+    public final void mT__25() throws RecognitionException {
+        try {
+            int _type = T__25;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:25:7: ( '+' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:25:9: '+'
+            {
+            match('+'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__25"
+
+    // $ANTLR start "T__26"
+    public final void mT__26() throws RecognitionException {
+        try {
+            int _type = T__26;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:26:7: ( '>' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:26:9: '>'
+            {
+            match('>'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__26"
+
+    // $ANTLR start "T__27"
+    public final void mT__27() throws RecognitionException {
+        try {
+            int _type = T__27;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:27:7: ( '<' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:27:9: '<'
+            {
+            match('<'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__27"
+
+    // $ANTLR start "T__28"
+    public final void mT__28() throws RecognitionException {
+        try {
+            int _type = T__28;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:28:7: ( '=' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:28:9: '='
+            {
+            match('='); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__28"
+
+    // $ANTLR start "T__29"
+    public final void mT__29() throws RecognitionException {
+        try {
+            int _type = T__29;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:29:7: ( '!=' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:29:9: '!='
+            {
+            match("!="); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__29"
+
+    // $ANTLR start "T__30"
+    public final void mT__30() throws RecognitionException {
+        try {
+            int _type = T__30;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:30:7: ( '<=' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:30:9: '<='
+            {
+            match("<="); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__30"
+
+    // $ANTLR start "T__31"
+    public final void mT__31() throws RecognitionException {
+        try {
+            int _type = T__31;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:31:7: ( '>=' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:31:9: '>='
+            {
+            match(">="); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__31"
+
+    // $ANTLR start "T__32"
+    public final void mT__32() throws RecognitionException {
+        try {
+            int _type = T__32;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:32:7: ( 'AND' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:32:9: 'AND'
+            {
+            match("AND"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__32"
+
+    // $ANTLR start "T__33"
+    public final void mT__33() throws RecognitionException {
+        try {
+            int _type = T__33;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:33:7: ( 'OR' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:33:9: 'OR'
+            {
+            match("OR"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__33"
+
+    // $ANTLR start "T__34"
+    public final void mT__34() throws RecognitionException {
+        try {
+            int _type = T__34;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:34:7: ( 'XOR' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:34:9: 'XOR'
+            {
+            match("XOR"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__34"
+
+    // $ANTLR start "RULE_ID"
+    public final void mRULE_ID() throws RecognitionException {
+        try {
+            int _type = RULE_ID;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1266:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1266:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1266:11: ( '^' )?
+            int alt1=2;
+            int LA1_0 = input.LA(1);
+
+            if ( (LA1_0=='^') ) {
+                alt1=1;
+            }
+            switch (alt1) {
+                case 1 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1266: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1266: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1268:10: ( ( '0' .. '9' )+ )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1268:12: ( '0' .. '9' )+
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1268: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1268: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1270:13: ( ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1270:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1270: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1270:16: '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
+                    {
+                    match('\"'); 
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1270: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1270: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1270: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1270:86: '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
+                    {
+                    match('\''); 
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1270: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1270: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1270: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1272:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1272:19: '/*' ( options {greedy=false; } : . )* '*/'
+            {
+            match("/*"); 
+
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1272: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1272: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1274:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1274:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            {
+            match("//"); 
+
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1274: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1274: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1274: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1274:41: ( '\\r' )? '\\n'
+                    {
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1274:41: ( '\\r' )?
+                    int alt9=2;
+                    int LA9_0 = input.LA(1);
+
+                    if ( (LA9_0=='\r') ) {
+                        alt9=1;
+                    }
+                    switch (alt9) {
+                        case 1 :
+                            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1274: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1276:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1276:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1276: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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.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.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1278:16: ( . )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1278:18: .
+            {
+            matchAny(); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ANY_OTHER"
+
+    public void mTokens() throws RecognitionException {
+        // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.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 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
+        int alt12=31;
+        alt12 = dfa12.predict(input);
+        switch (alt12) {
+            case 1 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:10: T__11
+                {
+                mT__11(); 
+
+                }
+                break;
+            case 2 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:16: T__12
+                {
+                mT__12(); 
+
+                }
+                break;
+            case 3 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:22: T__13
+                {
+                mT__13(); 
+
+                }
+                break;
+            case 4 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:28: T__14
+                {
+                mT__14(); 
+
+                }
+                break;
+            case 5 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:34: T__15
+                {
+                mT__15(); 
+
+                }
+                break;
+            case 6 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:40: T__16
+                {
+                mT__16(); 
+
+                }
+                break;
+            case 7 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:46: T__17
+                {
+                mT__17(); 
+
+                }
+                break;
+            case 8 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:52: T__18
+                {
+                mT__18(); 
+
+                }
+                break;
+            case 9 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:58: T__19
+                {
+                mT__19(); 
+
+                }
+                break;
+            case 10 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:64: T__20
+                {
+                mT__20(); 
+
+                }
+                break;
+            case 11 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:70: T__21
+                {
+                mT__21(); 
+
+                }
+                break;
+            case 12 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:76: T__22
+                {
+                mT__22(); 
+
+                }
+                break;
+            case 13 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:82: T__23
+                {
+                mT__23(); 
+
+                }
+                break;
+            case 14 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:88: T__24
+                {
+                mT__24(); 
+
+                }
+                break;
+            case 15 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:94: T__25
+                {
+                mT__25(); 
+
+                }
+                break;
+            case 16 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:100: T__26
+                {
+                mT__26(); 
+
+                }
+                break;
+            case 17 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:106: T__27
+                {
+                mT__27(); 
+
+                }
+                break;
+            case 18 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:112: T__28
+                {
+                mT__28(); 
+
+                }
+                break;
+            case 19 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:118: T__29
+                {
+                mT__29(); 
+
+                }
+                break;
+            case 20 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:124: T__30
+                {
+                mT__30(); 
+
+                }
+                break;
+            case 21 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:130: T__31
+                {
+                mT__31(); 
+
+                }
+                break;
+            case 22 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:136: T__32
+                {
+                mT__32(); 
+
+                }
+                break;
+            case 23 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:142: T__33
+                {
+                mT__33(); 
+
+                }
+                break;
+            case 24 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:148: T__34
+                {
+                mT__34(); 
+
+                }
+                break;
+            case 25 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:154: RULE_ID
+                {
+                mRULE_ID(); 
+
+                }
+                break;
+            case 26 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:162: RULE_INT
+                {
+                mRULE_INT(); 
+
+                }
+                break;
+            case 27 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:171: RULE_STRING
+                {
+                mRULE_STRING(); 
+
+                }
+                break;
+            case 28 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:183: RULE_ML_COMMENT
+                {
+                mRULE_ML_COMMENT(); 
+
+                }
+                break;
+            case 29 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:199: RULE_SL_COMMENT
+                {
+                mRULE_SL_COMMENT(); 
+
+                }
+                break;
+            case 30 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:215: RULE_WS
+                {
+                mRULE_WS(); 
+
+                }
+                break;
+            case 31 :
+                // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1:223: RULE_ANY_OTHER
+                {
+                mRULE_ANY_OTHER(); 
+
+                }
+                break;
+
+        }
+
+    }
+
+
+    protected DFA12 dfa12 = new DFA12(this);
+    static final String DFA12_eotS =
+        "\3\uffff\2\40\2\uffff\1\40\1\45\4\uffff\1\54\2\uffff\1\60\1\62\1"+
+        "\uffff\1\34\3\40\2\uffff\2\34\4\uffff\1\40\1\uffff\1\40\2\uffff"+
+        "\1\40\20\uffff\1\40\1\77\1\40\3\uffff\2\40\1\103\1\104\1\uffff\1"+
+        "\105\1\106\1\40\4\uffff\1\110\1\uffff";
+    static final String DFA12_eofS =
+        "\111\uffff";
+    static final String DFA12_minS =
+        "\1\0\2\uffff\1\162\1\141\2\uffff\1\117\1\101\4\uffff\1\52\2\uffff"+
+        "\2\75\1\uffff\1\75\1\116\1\122\1\117\2\uffff\2\0\4\uffff\1\165\1"+
+        "\uffff\1\154\2\uffff\1\124\20\uffff\1\104\1\60\1\122\3\uffff\1\145"+
+        "\1\163\2\60\1\uffff\2\60\1\145\4\uffff\1\60\1\uffff";
+    static final String DFA12_maxS =
+        "\1\uffff\2\uffff\1\162\1\141\2\uffff\1\117\1\172\4\uffff\1\57\2"+
+        "\uffff\2\75\1\uffff\1\75\1\116\1\122\1\117\2\uffff\2\uffff\4\uffff"+
+        "\1\165\1\uffff\1\154\2\uffff\1\124\20\uffff\1\104\1\172\1\122\3"+
+        "\uffff\1\145\1\163\2\172\1\uffff\2\172\1\145\4\uffff\1\172\1\uffff";
+    static final String DFA12_acceptS =
+        "\1\uffff\1\1\1\2\2\uffff\1\5\1\6\2\uffff\1\11\1\12\1\13\1\14\1\uffff"+
+        "\1\16\1\17\2\uffff\1\22\4\uffff\1\31\1\32\2\uffff\1\36\1\37\1\1"+
+        "\1\2\1\uffff\1\31\1\uffff\1\5\1\6\1\uffff\1\10\1\11\1\12\1\13\1"+
+        "\14\1\34\1\35\1\15\1\16\1\17\1\25\1\20\1\24\1\21\1\22\1\23\3\uffff"+
+        "\1\32\1\33\1\36\4\uffff\1\27\3\uffff\1\7\1\26\1\30\1\3\1\uffff\1"+
+        "\4";
+    static final String DFA12_specialS =
+        "\1\1\30\uffff\1\0\1\2\56\uffff}>";
+    static final String[] DFA12_transitionS = {
+            "\11\34\2\33\2\34\1\33\22\34\1\33\1\23\1\31\2\34\1\16\1\34\1"+
+            "\32\1\11\1\12\1\14\1\17\1\13\1\1\1\2\1\15\12\30\1\6\1\34\1\21"+
+            "\1\22\1\20\1\5\1\34\1\24\14\27\1\7\1\25\10\27\1\26\2\27\3\34"+
+            "\1\10\1\27\1\34\5\27\1\4\15\27\1\3\6\27\uff85\34",
+            "",
+            "",
+            "\1\37",
+            "\1\41",
+            "",
+            "",
+            "\1\44",
+            "\32\40\4\uffff\1\40\1\uffff\32\40",
+            "",
+            "",
+            "",
+            "",
+            "\1\52\4\uffff\1\53",
+            "",
+            "",
+            "\1\57",
+            "\1\61",
+            "",
+            "\1\64",
+            "\1\65",
+            "\1\66",
+            "\1\67",
+            "",
+            "",
+            "\0\71",
+            "\0\71",
+            "",
+            "",
+            "",
+            "",
+            "\1\73",
+            "",
+            "\1\74",
+            "",
+            "",
+            "\1\75",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\76",
+            "\12\40\7\uffff\32\40\4\uffff\1\40\1\uffff\32\40",
+            "\1\100",
+            "",
+            "",
+            "",
+            "\1\101",
+            "\1\102",
+            "\12\40\7\uffff\32\40\4\uffff\1\40\1\uffff\32\40",
+            "\12\40\7\uffff\32\40\4\uffff\1\40\1\uffff\32\40",
+            "",
+            "\12\40\7\uffff\32\40\4\uffff\1\40\1\uffff\32\40",
+            "\12\40\7\uffff\32\40\4\uffff\1\40\1\uffff\32\40",
+            "\1\107",
+            "",
+            "",
+            "",
+            "",
+            "\12\40\7\uffff\32\40\4\uffff\1\40\1\uffff\32\40",
+            ""
+    };
+
+    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 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | 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_25 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA12_25>='\u0000' && LA12_25<='\uFFFF')) ) {s = 57;}
+
+                        else s = 28;
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA12_0 = input.LA(1);
+
+                        s = -1;
+                        if ( (LA12_0=='-') ) {s = 1;}
+
+                        else if ( (LA12_0=='.') ) {s = 2;}
+
+                        else if ( (LA12_0=='t') ) {s = 3;}
+
+                        else if ( (LA12_0=='f') ) {s = 4;}
+
+                        else if ( (LA12_0=='?') ) {s = 5;}
+
+                        else if ( (LA12_0==':') ) {s = 6;}
+
+                        else if ( (LA12_0=='N') ) {s = 7;}
+
+                        else if ( (LA12_0=='^') ) {s = 8;}
+
+                        else if ( (LA12_0=='(') ) {s = 9;}
+
+                        else if ( (LA12_0==')') ) {s = 10;}
+
+                        else if ( (LA12_0==',') ) {s = 11;}
+
+                        else if ( (LA12_0=='*') ) {s = 12;}
+
+                        else if ( (LA12_0=='/') ) {s = 13;}
+
+                        else if ( (LA12_0=='%') ) {s = 14;}
+
+                        else if ( (LA12_0=='+') ) {s = 15;}
+
+                        else if ( (LA12_0=='>') ) {s = 16;}
+
+                        else if ( (LA12_0=='<') ) {s = 17;}
+
+                        else if ( (LA12_0=='=') ) {s = 18;}
+
+                        else if ( (LA12_0=='!') ) {s = 19;}
+
+                        else if ( (LA12_0=='A') ) {s = 20;}
+
+                        else if ( (LA12_0=='O') ) {s = 21;}
+
+                        else if ( (LA12_0=='X') ) {s = 22;}
+
+                        else if ( ((LA12_0>='B' && LA12_0<='M')||(LA12_0>='P' && LA12_0<='W')||(LA12_0>='Y' && LA12_0<='Z')||LA12_0=='_'||(LA12_0>='a' && LA12_0<='e')||(LA12_0>='g' && LA12_0<='s')||(LA12_0>='u' && LA12_0<='z')) ) {s = 23;}
+
+                        else if ( ((LA12_0>='0' && LA12_0<='9')) ) {s = 24;}
+
+                        else if ( (LA12_0=='\"') ) {s = 25;}
+
+                        else if ( (LA12_0=='\'') ) {s = 26;}
+
+                        else if ( ((LA12_0>='\t' && LA12_0<='\n')||LA12_0=='\r'||LA12_0==' ') ) {s = 27;}
+
+                        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<='\uFFFF')) ) {s = 28;}
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA12_26 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA12_26>='\u0000' && LA12_26<='\uFFFF')) ) {s = 57;}
+
+                        else s = 28;
+
+                        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/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslParser.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslParser.java
index 9ebcb66e41f2878d733736b470a3b0a56f15c39d..33e0a2fe26ab9d3ddc49b43a9eaf403f92217147 100644
--- a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslParser.java
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslParser.java
@@ -1,1491 +1,3670 @@
-package org.xtext.example.mydsl.parser.antlr.internal; 
-
-import org.eclipse.xtext.*;
-import org.eclipse.xtext.parser.*;
-import org.eclipse.xtext.parser.impl.*;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.common.util.Enumerator;
-import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
-import org.eclipse.xtext.parser.antlr.XtextTokenStream;
-import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
-import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
-import org.xtext.example.mydsl.services.MyDslGrammarAccess;
-
-
-
-import org.antlr.runtime.*;
-import java.util.Stack;
-import java.util.List;
-import java.util.ArrayList;
-
+package org.xtext.example.mydsl.parser.antlr.internal; 
+
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.parser.*;
+import org.eclipse.xtext.parser.impl.*;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.common.util.Enumerator;
+import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
+import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
+import org.xtext.example.mydsl.services.MyDslGrammarAccess;
+
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
 @SuppressWarnings("all")
-public class InternalMyDslParser extends AbstractInternalAntlrParser {
-    public static final String[] tokenNames = new String[] {
-        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_INT", "RULE_STRING", "RULE_ID", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'('", "')'", "'-'", "'.'", "'+'", "'*'", "'/'", "'%'", "'>'", "'<'", "'='", "'!='", "'<='", "'>='", "'AND'", "'OR'", "'XOR'"
-    };
-    public static final int RULE_ID=6;
-    public static final int T__27=27;
-    public static final int T__26=26;
-    public static final int T__25=25;
-    public static final int T__24=24;
-    public static final int T__23=23;
-    public static final int T__22=22;
-    public static final int RULE_ANY_OTHER=10;
-    public static final int T__21=21;
-    public static final int T__20=20;
-    public static final int RULE_SL_COMMENT=8;
-    public static final int EOF=-1;
-    public static final int RULE_ML_COMMENT=7;
-    public static final int T__19=19;
-    public static final int RULE_STRING=5;
-    public static final int T__16=16;
-    public static final int T__15=15;
-    public static final int T__18=18;
-    public static final int T__17=17;
-    public static final int T__12=12;
-    public static final int T__11=11;
-    public static final int T__14=14;
-    public static final int T__13=13;
-    public static final int RULE_INT=4;
-    public static final int RULE_WS=9;
-
-    // delegates
-    // delegators
-
-
-        public InternalMyDslParser(TokenStream input) {
-            this(input, new RecognizerSharedState());
-        }
-        public InternalMyDslParser(TokenStream input, RecognizerSharedState state) {
-            super(input, state);
-             
-        }
-        
-
-    public String[] getTokenNames() { return InternalMyDslParser.tokenNames; }
-    public String getGrammarFileName() { return "../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g"; }
-
-
-
-     	private MyDslGrammarAccess grammarAccess;
-     	
-        public InternalMyDslParser(TokenStream input, MyDslGrammarAccess grammarAccess) {
-            this(input);
-            this.grammarAccess = grammarAccess;
-            registerRules(grammarAccess.getGrammar());
-        }
-        
-        @Override
-        protected String getFirstRuleName() {
-        	return "Model";	
-       	}
-       	
-       	@Override
-       	protected MyDslGrammarAccess getGrammarAccess() {
-       		return grammarAccess;
-       	}
-
-
-
-    // $ANTLR start "entryRuleModel"
-    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:68:1: entryRuleModel returns [EObject current=null] : iv_ruleModel= ruleModel EOF ;
-    public final EObject entryRuleModel() throws RecognitionException {
-        EObject current = null;
-
-        EObject iv_ruleModel = null;
-
-
-        try {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:69:2: (iv_ruleModel= ruleModel EOF )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:70:2: iv_ruleModel= ruleModel EOF
-            {
-             newCompositeNode(grammarAccess.getModelRule()); 
-            pushFollow(FOLLOW_ruleModel_in_entryRuleModel75);
-            iv_ruleModel=ruleModel();
-
-            state._fsp--;
-
-             current =iv_ruleModel; 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleModel85); 
-
-            }
-
-        }
-         
-            catch (RecognitionException re) { 
-                recover(input,re); 
-                appendSkippedTokens();
-            } 
-        finally {
-        }
-        return current;
-    }
-    // $ANTLR end "entryRuleModel"
-
-
-    // $ANTLR start "ruleModel"
-    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:77:1: ruleModel returns [EObject current=null] : ( (lv_terms_0_0= ruleTerm ) ) ;
-    public final EObject ruleModel() throws RecognitionException {
-        EObject current = null;
-
-        EObject lv_terms_0_0 = null;
-
-
-         enterRule(); 
-            
-        try {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:80:28: ( ( (lv_terms_0_0= ruleTerm ) ) )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:81:1: ( (lv_terms_0_0= ruleTerm ) )
-            {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:81:1: ( (lv_terms_0_0= ruleTerm ) )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:82:1: (lv_terms_0_0= ruleTerm )
-            {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:82:1: (lv_terms_0_0= ruleTerm )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:83:3: lv_terms_0_0= ruleTerm
-            {
-             
-            	        newCompositeNode(grammarAccess.getModelAccess().getTermsTermParserRuleCall_0()); 
-            	    
-            pushFollow(FOLLOW_ruleTerm_in_ruleModel130);
-            lv_terms_0_0=ruleTerm();
-
-            state._fsp--;
-
-
-            	        if (current==null) {
-            	            current = createModelElementForParent(grammarAccess.getModelRule());
-            	        }
-                   		add(
-                   			current, 
-                   			"terms",
-                    		lv_terms_0_0, 
-                    		"Term");
-            	        afterParserOrEnumRuleCall();
-            	    
-
-            }
-
-
-            }
-
-
-            }
-
-             leaveRule(); 
-        }
-         
-            catch (RecognitionException re) { 
-                recover(input,re); 
-                appendSkippedTokens();
-            } 
-        finally {
-        }
-        return current;
-    }
-    // $ANTLR end "ruleModel"
-
-
-    // $ANTLR start "entryRuleTerm"
-    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:107:1: entryRuleTerm returns [EObject current=null] : iv_ruleTerm= ruleTerm EOF ;
-    public final EObject entryRuleTerm() throws RecognitionException {
-        EObject current = null;
-
-        EObject iv_ruleTerm = null;
-
-
-        try {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:108:2: (iv_ruleTerm= ruleTerm EOF )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:109:2: iv_ruleTerm= ruleTerm EOF
-            {
-             newCompositeNode(grammarAccess.getTermRule()); 
-            pushFollow(FOLLOW_ruleTerm_in_entryRuleTerm165);
-            iv_ruleTerm=ruleTerm();
-
-            state._fsp--;
-
-             current =iv_ruleTerm; 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleTerm175); 
-
-            }
-
-        }
-         
-            catch (RecognitionException re) { 
-                recover(input,re); 
-                appendSkippedTokens();
-            } 
-        finally {
-        }
-        return current;
-    }
-    // $ANTLR end "entryRuleTerm"
-
-
-    // $ANTLR start "ruleTerm"
-    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:116:1: ruleTerm returns [EObject current=null] : (this_Types_0= ruleTypes ( () ( (lv_Operations_2_0= ruleOperations ) ) ( (lv_right_3_0= ruleTypes ) ) )* ) ;
-    public final EObject ruleTerm() throws RecognitionException {
-        EObject current = null;
-
-        EObject this_Types_0 = null;
-
-        EObject lv_Operations_2_0 = null;
-
-        EObject lv_right_3_0 = null;
-
-
-         enterRule(); 
-            
-        try {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:119:28: ( (this_Types_0= ruleTypes ( () ( (lv_Operations_2_0= ruleOperations ) ) ( (lv_right_3_0= ruleTypes ) ) )* ) )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:120:1: (this_Types_0= ruleTypes ( () ( (lv_Operations_2_0= ruleOperations ) ) ( (lv_right_3_0= ruleTypes ) ) )* )
-            {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:120:1: (this_Types_0= ruleTypes ( () ( (lv_Operations_2_0= ruleOperations ) ) ( (lv_right_3_0= ruleTypes ) ) )* )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:121:5: this_Types_0= ruleTypes ( () ( (lv_Operations_2_0= ruleOperations ) ) ( (lv_right_3_0= ruleTypes ) ) )*
-            {
-             
-                    newCompositeNode(grammarAccess.getTermAccess().getTypesParserRuleCall_0()); 
-                
-            pushFollow(FOLLOW_ruleTypes_in_ruleTerm222);
-            this_Types_0=ruleTypes();
-
-            state._fsp--;
-
-             
-                    current = this_Types_0; 
-                    afterParserOrEnumRuleCall();
-                
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:129:1: ( () ( (lv_Operations_2_0= ruleOperations ) ) ( (lv_right_3_0= ruleTypes ) ) )*
-            loop1:
-            do {
-                int alt1=2;
-                int LA1_0 = input.LA(1);
-
-                if ( (LA1_0==13||(LA1_0>=15 && LA1_0<=27)) ) {
-                    alt1=1;
-                }
-
-
-                switch (alt1) {
-            	case 1 :
-            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:129:2: () ( (lv_Operations_2_0= ruleOperations ) ) ( (lv_right_3_0= ruleTypes ) )
-            	    {
-            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:129:2: ()
-            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:130:5: 
-            	    {
-
-            	            current = forceCreateModelElementAndSet(
-            	                grammarAccess.getTermAccess().getTermLeftAction_1_0(),
-            	                current);
-            	        
-
-            	    }
-
-            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:135:2: ( (lv_Operations_2_0= ruleOperations ) )
-            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:136:1: (lv_Operations_2_0= ruleOperations )
-            	    {
-            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:136:1: (lv_Operations_2_0= ruleOperations )
-            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:137:3: lv_Operations_2_0= ruleOperations
-            	    {
-            	     
-            	    	        newCompositeNode(grammarAccess.getTermAccess().getOperationsOperationsParserRuleCall_1_1_0()); 
-            	    	    
-            	    pushFollow(FOLLOW_ruleOperations_in_ruleTerm252);
-            	    lv_Operations_2_0=ruleOperations();
-
-            	    state._fsp--;
-
-
-            	    	        if (current==null) {
-            	    	            current = createModelElementForParent(grammarAccess.getTermRule());
-            	    	        }
-            	           		set(
-            	           			current, 
-            	           			"Operations",
-            	            		lv_Operations_2_0, 
-            	            		"Operations");
-            	    	        afterParserOrEnumRuleCall();
-            	    	    
-
-            	    }
-
-
-            	    }
-
-            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:153:2: ( (lv_right_3_0= ruleTypes ) )
-            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:154:1: (lv_right_3_0= ruleTypes )
-            	    {
-            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:154:1: (lv_right_3_0= ruleTypes )
-            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:155:3: lv_right_3_0= ruleTypes
-            	    {
-            	     
-            	    	        newCompositeNode(grammarAccess.getTermAccess().getRightTypesParserRuleCall_1_2_0()); 
-            	    	    
-            	    pushFollow(FOLLOW_ruleTypes_in_ruleTerm273);
-            	    lv_right_3_0=ruleTypes();
-
-            	    state._fsp--;
-
-
-            	    	        if (current==null) {
-            	    	            current = createModelElementForParent(grammarAccess.getTermRule());
-            	    	        }
-            	           		set(
-            	           			current, 
-            	           			"right",
-            	            		lv_right_3_0, 
-            	            		"Types");
-            	    	        afterParserOrEnumRuleCall();
-            	    	    
-
-            	    }
-
-
-            	    }
-
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop1;
-                }
-            } while (true);
-
-
-            }
-
-
-            }
-
-             leaveRule(); 
-        }
-         
-            catch (RecognitionException re) { 
-                recover(input,re); 
-                appendSkippedTokens();
-            } 
-        finally {
-        }
-        return current;
-    }
-    // $ANTLR end "ruleTerm"
-
-
-    // $ANTLR start "entryRuleTypes"
-    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:179:1: entryRuleTypes returns [EObject current=null] : iv_ruleTypes= ruleTypes EOF ;
-    public final EObject entryRuleTypes() throws RecognitionException {
-        EObject current = null;
-
-        EObject iv_ruleTypes = null;
-
-
-        try {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:180:2: (iv_ruleTypes= ruleTypes EOF )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:181:2: iv_ruleTypes= ruleTypes EOF
-            {
-             newCompositeNode(grammarAccess.getTypesRule()); 
-            pushFollow(FOLLOW_ruleTypes_in_entryRuleTypes311);
-            iv_ruleTypes=ruleTypes();
-
-            state._fsp--;
-
-             current =iv_ruleTypes; 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleTypes321); 
-
-            }
-
-        }
-         
-            catch (RecognitionException re) { 
-                recover(input,re); 
-                appendSkippedTokens();
-            } 
-        finally {
-        }
-        return current;
-    }
-    // $ANTLR end "entryRuleTypes"
-
-
-    // $ANTLR start "ruleTypes"
-    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:188:1: ruleTypes returns [EObject current=null] : (this_Arithmetics_0= ruleArithmetics | this_Strings_1= ruleStrings | (otherlv_2= '(' this_Term_3= ruleTerm otherlv_4= ')' ) ) ;
-    public final EObject ruleTypes() throws RecognitionException {
-        EObject current = null;
-
-        Token otherlv_2=null;
-        Token otherlv_4=null;
-        EObject this_Arithmetics_0 = null;
-
-        EObject this_Strings_1 = null;
-
-        EObject this_Term_3 = null;
-
-
-         enterRule(); 
-            
-        try {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:191:28: ( (this_Arithmetics_0= ruleArithmetics | this_Strings_1= ruleStrings | (otherlv_2= '(' this_Term_3= ruleTerm otherlv_4= ')' ) ) )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:192:1: (this_Arithmetics_0= ruleArithmetics | this_Strings_1= ruleStrings | (otherlv_2= '(' this_Term_3= ruleTerm otherlv_4= ')' ) )
-            {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:192:1: (this_Arithmetics_0= ruleArithmetics | this_Strings_1= ruleStrings | (otherlv_2= '(' this_Term_3= ruleTerm otherlv_4= ')' ) )
-            int alt2=3;
-            switch ( input.LA(1) ) {
-            case RULE_INT:
-            case 13:
-                {
-                alt2=1;
-                }
-                break;
-            case RULE_STRING:
-            case RULE_ID:
-                {
-                alt2=2;
-                }
-                break;
-            case 11:
-                {
-                alt2=3;
-                }
-                break;
-            default:
-                NoViableAltException nvae =
-                    new NoViableAltException("", 2, 0, input);
-
-                throw nvae;
-            }
-
-            switch (alt2) {
-                case 1 :
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:193:5: this_Arithmetics_0= ruleArithmetics
-                    {
-                     
-                            newCompositeNode(grammarAccess.getTypesAccess().getArithmeticsParserRuleCall_0()); 
-                        
-                    pushFollow(FOLLOW_ruleArithmetics_in_ruleTypes368);
-                    this_Arithmetics_0=ruleArithmetics();
-
-                    state._fsp--;
-
-                     
-                            current = this_Arithmetics_0; 
-                            afterParserOrEnumRuleCall();
-                        
-
-                    }
-                    break;
-                case 2 :
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:203:5: this_Strings_1= ruleStrings
-                    {
-                     
-                            newCompositeNode(grammarAccess.getTypesAccess().getStringsParserRuleCall_1()); 
-                        
-                    pushFollow(FOLLOW_ruleStrings_in_ruleTypes395);
-                    this_Strings_1=ruleStrings();
-
-                    state._fsp--;
-
-                     
-                            current = this_Strings_1; 
-                            afterParserOrEnumRuleCall();
-                        
-
-                    }
-                    break;
-                case 3 :
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:212:6: (otherlv_2= '(' this_Term_3= ruleTerm otherlv_4= ')' )
-                    {
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:212:6: (otherlv_2= '(' this_Term_3= ruleTerm otherlv_4= ')' )
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:212:8: otherlv_2= '(' this_Term_3= ruleTerm otherlv_4= ')'
-                    {
-                    otherlv_2=(Token)match(input,11,FOLLOW_11_in_ruleTypes413); 
-
-                        	newLeafNode(otherlv_2, grammarAccess.getTypesAccess().getLeftParenthesisKeyword_2_0());
-                        
-                     
-                            newCompositeNode(grammarAccess.getTypesAccess().getTermParserRuleCall_2_1()); 
-                        
-                    pushFollow(FOLLOW_ruleTerm_in_ruleTypes435);
-                    this_Term_3=ruleTerm();
-
-                    state._fsp--;
-
-                     
-                            current = this_Term_3; 
-                            afterParserOrEnumRuleCall();
-                        
-                    otherlv_4=(Token)match(input,12,FOLLOW_12_in_ruleTypes446); 
-
-                        	newLeafNode(otherlv_4, grammarAccess.getTypesAccess().getRightParenthesisKeyword_2_2());
-                        
-
-                    }
-
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-             leaveRule(); 
-        }
-         
-            catch (RecognitionException re) { 
-                recover(input,re); 
-                appendSkippedTokens();
-            } 
-        finally {
-        }
-        return current;
-    }
-    // $ANTLR end "ruleTypes"
-
-
-    // $ANTLR start "entryRuleArithmetics"
-    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:237:1: entryRuleArithmetics returns [EObject current=null] : iv_ruleArithmetics= ruleArithmetics EOF ;
-    public final EObject entryRuleArithmetics() throws RecognitionException {
-        EObject current = null;
-
-        EObject iv_ruleArithmetics = null;
-
-
-        try {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:238:2: (iv_ruleArithmetics= ruleArithmetics EOF )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:239:2: iv_ruleArithmetics= ruleArithmetics EOF
-            {
-             newCompositeNode(grammarAccess.getArithmeticsRule()); 
-            pushFollow(FOLLOW_ruleArithmetics_in_entryRuleArithmetics483);
-            iv_ruleArithmetics=ruleArithmetics();
-
-            state._fsp--;
-
-             current =iv_ruleArithmetics; 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleArithmetics493); 
-
-            }
-
-        }
-         
-            catch (RecognitionException re) { 
-                recover(input,re); 
-                appendSkippedTokens();
-            } 
-        finally {
-        }
-        return current;
-    }
-    // $ANTLR end "entryRuleArithmetics"
-
-
-    // $ANTLR start "ruleArithmetics"
-    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:246:1: ruleArithmetics returns [EObject current=null] : ( () ruleDECIMAL ) ;
-    public final EObject ruleArithmetics() throws RecognitionException {
-        EObject current = null;
-
-         enterRule(); 
-            
-        try {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:249:28: ( ( () ruleDECIMAL ) )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:250:1: ( () ruleDECIMAL )
-            {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:250:1: ( () ruleDECIMAL )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:250:2: () ruleDECIMAL
-            {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:250:2: ()
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:251:5: 
-            {
-
-                    current = forceCreateModelElement(
-                        grammarAccess.getArithmeticsAccess().getExpressionAction_0(),
-                        current);
-                
-
-            }
-
-             
-                    newCompositeNode(grammarAccess.getArithmeticsAccess().getDECIMALParserRuleCall_1()); 
-                
-            pushFollow(FOLLOW_ruleDECIMAL_in_ruleArithmetics543);
-            ruleDECIMAL();
-
-            state._fsp--;
-
-             
-                    afterParserOrEnumRuleCall();
-                
-
-            }
-
-
-            }
-
-             leaveRule(); 
-        }
-         
-            catch (RecognitionException re) { 
-                recover(input,re); 
-                appendSkippedTokens();
-            } 
-        finally {
-        }
-        return current;
-    }
-    // $ANTLR end "ruleArithmetics"
-
-
-    // $ANTLR start "entryRuleStrings"
-    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:272:1: entryRuleStrings returns [EObject current=null] : iv_ruleStrings= ruleStrings EOF ;
-    public final EObject entryRuleStrings() throws RecognitionException {
-        EObject current = null;
-
-        EObject iv_ruleStrings = null;
-
-
-        try {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:273:2: (iv_ruleStrings= ruleStrings EOF )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:274:2: iv_ruleStrings= ruleStrings EOF
-            {
-             newCompositeNode(grammarAccess.getStringsRule()); 
-            pushFollow(FOLLOW_ruleStrings_in_entryRuleStrings578);
-            iv_ruleStrings=ruleStrings();
-
-            state._fsp--;
-
-             current =iv_ruleStrings; 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleStrings588); 
-
-            }
-
-        }
-         
-            catch (RecognitionException re) { 
-                recover(input,re); 
-                appendSkippedTokens();
-            } 
-        finally {
-        }
-        return current;
-    }
-    // $ANTLR end "entryRuleStrings"
-
-
-    // $ANTLR start "ruleStrings"
-    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:281:1: ruleStrings returns [EObject current=null] : ( () ruleE_STRING ) ;
-    public final EObject ruleStrings() throws RecognitionException {
-        EObject current = null;
-
-         enterRule(); 
-            
-        try {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:284:28: ( ( () ruleE_STRING ) )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:285:1: ( () ruleE_STRING )
-            {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:285:1: ( () ruleE_STRING )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:285:2: () ruleE_STRING
-            {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:285:2: ()
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:286:5: 
-            {
-
-                    current = forceCreateModelElement(
-                        grammarAccess.getStringsAccess().getExpressionAction_0(),
-                        current);
-                
-
-            }
-
-             
-                    newCompositeNode(grammarAccess.getStringsAccess().getE_STRINGParserRuleCall_1()); 
-                
-            pushFollow(FOLLOW_ruleE_STRING_in_ruleStrings638);
-            ruleE_STRING();
-
-            state._fsp--;
-
-             
-                    afterParserOrEnumRuleCall();
-                
-
-            }
-
-
-            }
-
-             leaveRule(); 
-        }
-         
-            catch (RecognitionException re) { 
-                recover(input,re); 
-                appendSkippedTokens();
-            } 
-        finally {
-        }
-        return current;
-    }
-    // $ANTLR end "ruleStrings"
-
-
-    // $ANTLR start "entryRuleDECIMAL"
-    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:307:1: entryRuleDECIMAL returns [String current=null] : iv_ruleDECIMAL= ruleDECIMAL EOF ;
-    public final String entryRuleDECIMAL() throws RecognitionException {
-        String current = null;
-
-        AntlrDatatypeRuleToken iv_ruleDECIMAL = null;
-
-
-        try {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:308:2: (iv_ruleDECIMAL= ruleDECIMAL EOF )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:309:2: iv_ruleDECIMAL= ruleDECIMAL EOF
-            {
-             newCompositeNode(grammarAccess.getDECIMALRule()); 
-            pushFollow(FOLLOW_ruleDECIMAL_in_entryRuleDECIMAL674);
-            iv_ruleDECIMAL=ruleDECIMAL();
-
-            state._fsp--;
-
-             current =iv_ruleDECIMAL.getText(); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleDECIMAL685); 
-
-            }
-
-        }
-         
-            catch (RecognitionException re) { 
-                recover(input,re); 
-                appendSkippedTokens();
-            } 
-        finally {
-        }
-        return current;
-    }
-    // $ANTLR end "entryRuleDECIMAL"
-
-
-    // $ANTLR start "ruleDECIMAL"
-    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:316:1: ruleDECIMAL returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (kw= '-' )? this_INT_1= RULE_INT (kw= '.' this_INT_3= RULE_INT )? ) ;
-    public final AntlrDatatypeRuleToken ruleDECIMAL() throws RecognitionException {
-        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
-
-        Token kw=null;
-        Token this_INT_1=null;
-        Token this_INT_3=null;
-
-         enterRule(); 
-            
-        try {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:319:28: ( ( (kw= '-' )? this_INT_1= RULE_INT (kw= '.' this_INT_3= RULE_INT )? ) )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:320:1: ( (kw= '-' )? this_INT_1= RULE_INT (kw= '.' this_INT_3= RULE_INT )? )
-            {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:320:1: ( (kw= '-' )? this_INT_1= RULE_INT (kw= '.' this_INT_3= RULE_INT )? )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:320:2: (kw= '-' )? this_INT_1= RULE_INT (kw= '.' this_INT_3= RULE_INT )?
-            {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:320:2: (kw= '-' )?
-            int alt3=2;
-            int LA3_0 = input.LA(1);
-
-            if ( (LA3_0==13) ) {
-                alt3=1;
-            }
-            switch (alt3) {
-                case 1 :
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:321:2: kw= '-'
-                    {
-                    kw=(Token)match(input,13,FOLLOW_13_in_ruleDECIMAL724); 
-
-                            current.merge(kw);
-                            newLeafNode(kw, grammarAccess.getDECIMALAccess().getHyphenMinusKeyword_0()); 
-                        
-
-                    }
-                    break;
-
-            }
-
-            this_INT_1=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleDECIMAL741); 
-
-            		current.merge(this_INT_1);
-                
-             
-                newLeafNode(this_INT_1, grammarAccess.getDECIMALAccess().getINTTerminalRuleCall_1()); 
-                
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:333:1: (kw= '.' this_INT_3= RULE_INT )?
-            int alt4=2;
-            int LA4_0 = input.LA(1);
-
-            if ( (LA4_0==14) ) {
-                alt4=1;
-            }
-            switch (alt4) {
-                case 1 :
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:334:2: kw= '.' this_INT_3= RULE_INT
-                    {
-                    kw=(Token)match(input,14,FOLLOW_14_in_ruleDECIMAL760); 
-
-                            current.merge(kw);
-                            newLeafNode(kw, grammarAccess.getDECIMALAccess().getFullStopKeyword_2_0()); 
-                        
-                    this_INT_3=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleDECIMAL775); 
-
-                    		current.merge(this_INT_3);
-                        
-                     
-                        newLeafNode(this_INT_3, grammarAccess.getDECIMALAccess().getINTTerminalRuleCall_2_1()); 
-                        
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-
-            }
-
-             leaveRule(); 
-        }
-         
-            catch (RecognitionException re) { 
-                recover(input,re); 
-                appendSkippedTokens();
-            } 
-        finally {
-        }
-        return current;
-    }
-    // $ANTLR end "ruleDECIMAL"
-
-
-    // $ANTLR start "entryRuleE_STRING"
-    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:354:1: entryRuleE_STRING returns [String current=null] : iv_ruleE_STRING= ruleE_STRING EOF ;
-    public final String entryRuleE_STRING() throws RecognitionException {
-        String current = null;
-
-        AntlrDatatypeRuleToken iv_ruleE_STRING = null;
-
-
-        try {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:355:2: (iv_ruleE_STRING= ruleE_STRING EOF )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:356:2: iv_ruleE_STRING= ruleE_STRING EOF
-            {
-             newCompositeNode(grammarAccess.getE_STRINGRule()); 
-            pushFollow(FOLLOW_ruleE_STRING_in_entryRuleE_STRING823);
-            iv_ruleE_STRING=ruleE_STRING();
-
-            state._fsp--;
-
-             current =iv_ruleE_STRING.getText(); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleE_STRING834); 
-
-            }
-
-        }
-         
-            catch (RecognitionException re) { 
-                recover(input,re); 
-                appendSkippedTokens();
-            } 
-        finally {
-        }
-        return current;
-    }
-    // $ANTLR end "entryRuleE_STRING"
-
-
-    // $ANTLR start "ruleE_STRING"
-    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:363:1: ruleE_STRING returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID ) ;
-    public final AntlrDatatypeRuleToken ruleE_STRING() throws RecognitionException {
-        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
-
-        Token this_STRING_0=null;
-        Token this_ID_1=null;
-
-         enterRule(); 
-            
-        try {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:366:28: ( (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID ) )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:367:1: (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID )
-            {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:367:1: (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID )
-            int alt5=2;
-            int LA5_0 = input.LA(1);
-
-            if ( (LA5_0==RULE_STRING) ) {
-                alt5=1;
-            }
-            else if ( (LA5_0==RULE_ID) ) {
-                alt5=2;
-            }
-            else {
-                NoViableAltException nvae =
-                    new NoViableAltException("", 5, 0, input);
-
-                throw nvae;
-            }
-            switch (alt5) {
-                case 1 :
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:367:6: this_STRING_0= RULE_STRING
-                    {
-                    this_STRING_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleE_STRING874); 
-
-                    		current.merge(this_STRING_0);
-                        
-                     
-                        newLeafNode(this_STRING_0, grammarAccess.getE_STRINGAccess().getSTRINGTerminalRuleCall_0()); 
-                        
-
-                    }
-                    break;
-                case 2 :
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:375:10: this_ID_1= RULE_ID
-                    {
-                    this_ID_1=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleE_STRING900); 
-
-                    		current.merge(this_ID_1);
-                        
-                     
-                        newLeafNode(this_ID_1, grammarAccess.getE_STRINGAccess().getIDTerminalRuleCall_1()); 
-                        
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-             leaveRule(); 
-        }
-         
-            catch (RecognitionException re) { 
-                recover(input,re); 
-                appendSkippedTokens();
-            } 
-        finally {
-        }
-        return current;
-    }
-    // $ANTLR end "ruleE_STRING"
-
-
-    // $ANTLR start "entryRuleOperations"
-    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:390:1: entryRuleOperations returns [EObject current=null] : iv_ruleOperations= ruleOperations EOF ;
-    public final EObject entryRuleOperations() throws RecognitionException {
-        EObject current = null;
-
-        EObject iv_ruleOperations = null;
-
-
-        try {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:391:2: (iv_ruleOperations= ruleOperations EOF )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:392:2: iv_ruleOperations= ruleOperations EOF
-            {
-             newCompositeNode(grammarAccess.getOperationsRule()); 
-            pushFollow(FOLLOW_ruleOperations_in_entryRuleOperations945);
-            iv_ruleOperations=ruleOperations();
-
-            state._fsp--;
-
-             current =iv_ruleOperations; 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleOperations955); 
-
-            }
-
-        }
-         
-            catch (RecognitionException re) { 
-                recover(input,re); 
-                appendSkippedTokens();
-            } 
-        finally {
-        }
-        return current;
-    }
-    // $ANTLR end "entryRuleOperations"
-
-
-    // $ANTLR start "ruleOperations"
-    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:399:1: ruleOperations returns [EObject current=null] : ( (lv_termOperations_0_0= ruleOperationsType ) ) ;
-    public final EObject ruleOperations() throws RecognitionException {
-        EObject current = null;
-
-        Enumerator lv_termOperations_0_0 = null;
-
-
-         enterRule(); 
-            
-        try {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:402:28: ( ( (lv_termOperations_0_0= ruleOperationsType ) ) )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:403:1: ( (lv_termOperations_0_0= ruleOperationsType ) )
-            {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:403:1: ( (lv_termOperations_0_0= ruleOperationsType ) )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:404:1: (lv_termOperations_0_0= ruleOperationsType )
-            {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:404:1: (lv_termOperations_0_0= ruleOperationsType )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:405:3: lv_termOperations_0_0= ruleOperationsType
-            {
-             
-            	        newCompositeNode(grammarAccess.getOperationsAccess().getTermOperationsOperationsTypeEnumRuleCall_0()); 
-            	    
-            pushFollow(FOLLOW_ruleOperationsType_in_ruleOperations1000);
-            lv_termOperations_0_0=ruleOperationsType();
-
-            state._fsp--;
-
-
-            	        if (current==null) {
-            	            current = createModelElementForParent(grammarAccess.getOperationsRule());
-            	        }
-                   		set(
-                   			current, 
-                   			"termOperations",
-                    		lv_termOperations_0_0, 
-                    		"OperationsType");
-            	        afterParserOrEnumRuleCall();
-            	    
-
-            }
-
-
-            }
-
-
-            }
-
-             leaveRule(); 
-        }
-         
-            catch (RecognitionException re) { 
-                recover(input,re); 
-                appendSkippedTokens();
-            } 
-        finally {
-        }
-        return current;
-    }
-    // $ANTLR end "ruleOperations"
-
-
-    // $ANTLR start "ruleOperationsType"
-    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:429:1: ruleOperationsType returns [Enumerator current=null] : ( (enumLiteral_0= '+' ) | (enumLiteral_1= '-' ) | (enumLiteral_2= '*' ) | (enumLiteral_3= '/' ) | (enumLiteral_4= '%' ) | (enumLiteral_5= '>' ) | (enumLiteral_6= '<' ) | (enumLiteral_7= '=' ) | (enumLiteral_8= '!=' ) | (enumLiteral_9= '<=' ) | (enumLiteral_10= '>=' ) | (enumLiteral_11= 'AND' ) | (enumLiteral_12= 'OR' ) | (enumLiteral_13= 'XOR' ) ) ;
-    public final Enumerator ruleOperationsType() throws RecognitionException {
-        Enumerator current = null;
-
-        Token enumLiteral_0=null;
-        Token enumLiteral_1=null;
-        Token enumLiteral_2=null;
-        Token enumLiteral_3=null;
-        Token enumLiteral_4=null;
-        Token enumLiteral_5=null;
-        Token enumLiteral_6=null;
-        Token enumLiteral_7=null;
-        Token enumLiteral_8=null;
-        Token enumLiteral_9=null;
-        Token enumLiteral_10=null;
-        Token enumLiteral_11=null;
-        Token enumLiteral_12=null;
-        Token enumLiteral_13=null;
-
-         enterRule(); 
-        try {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:431:28: ( ( (enumLiteral_0= '+' ) | (enumLiteral_1= '-' ) | (enumLiteral_2= '*' ) | (enumLiteral_3= '/' ) | (enumLiteral_4= '%' ) | (enumLiteral_5= '>' ) | (enumLiteral_6= '<' ) | (enumLiteral_7= '=' ) | (enumLiteral_8= '!=' ) | (enumLiteral_9= '<=' ) | (enumLiteral_10= '>=' ) | (enumLiteral_11= 'AND' ) | (enumLiteral_12= 'OR' ) | (enumLiteral_13= 'XOR' ) ) )
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:432:1: ( (enumLiteral_0= '+' ) | (enumLiteral_1= '-' ) | (enumLiteral_2= '*' ) | (enumLiteral_3= '/' ) | (enumLiteral_4= '%' ) | (enumLiteral_5= '>' ) | (enumLiteral_6= '<' ) | (enumLiteral_7= '=' ) | (enumLiteral_8= '!=' ) | (enumLiteral_9= '<=' ) | (enumLiteral_10= '>=' ) | (enumLiteral_11= 'AND' ) | (enumLiteral_12= 'OR' ) | (enumLiteral_13= 'XOR' ) )
-            {
-            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:432:1: ( (enumLiteral_0= '+' ) | (enumLiteral_1= '-' ) | (enumLiteral_2= '*' ) | (enumLiteral_3= '/' ) | (enumLiteral_4= '%' ) | (enumLiteral_5= '>' ) | (enumLiteral_6= '<' ) | (enumLiteral_7= '=' ) | (enumLiteral_8= '!=' ) | (enumLiteral_9= '<=' ) | (enumLiteral_10= '>=' ) | (enumLiteral_11= 'AND' ) | (enumLiteral_12= 'OR' ) | (enumLiteral_13= 'XOR' ) )
-            int alt6=14;
-            switch ( input.LA(1) ) {
-            case 15:
-                {
-                alt6=1;
-                }
-                break;
-            case 13:
-                {
-                alt6=2;
-                }
-                break;
-            case 16:
-                {
-                alt6=3;
-                }
-                break;
-            case 17:
-                {
-                alt6=4;
-                }
-                break;
-            case 18:
-                {
-                alt6=5;
-                }
-                break;
-            case 19:
-                {
-                alt6=6;
-                }
-                break;
-            case 20:
-                {
-                alt6=7;
-                }
-                break;
-            case 21:
-                {
-                alt6=8;
-                }
-                break;
-            case 22:
-                {
-                alt6=9;
-                }
-                break;
-            case 23:
-                {
-                alt6=10;
-                }
-                break;
-            case 24:
-                {
-                alt6=11;
-                }
-                break;
-            case 25:
-                {
-                alt6=12;
-                }
-                break;
-            case 26:
-                {
-                alt6=13;
-                }
-                break;
-            case 27:
-                {
-                alt6=14;
-                }
-                break;
-            default:
-                NoViableAltException nvae =
-                    new NoViableAltException("", 6, 0, input);
-
-                throw nvae;
-            }
-
-            switch (alt6) {
-                case 1 :
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:432:2: (enumLiteral_0= '+' )
-                    {
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:432:2: (enumLiteral_0= '+' )
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:432:4: enumLiteral_0= '+'
-                    {
-                    enumLiteral_0=(Token)match(input,15,FOLLOW_15_in_ruleOperationsType1049); 
-
-                            current = grammarAccess.getOperationsTypeAccess().getADDEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
-                            newLeafNode(enumLiteral_0, grammarAccess.getOperationsTypeAccess().getADDEnumLiteralDeclaration_0()); 
-                        
-
-                    }
-
-
-                    }
-                    break;
-                case 2 :
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:438:6: (enumLiteral_1= '-' )
-                    {
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:438:6: (enumLiteral_1= '-' )
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:438:8: enumLiteral_1= '-'
-                    {
-                    enumLiteral_1=(Token)match(input,13,FOLLOW_13_in_ruleOperationsType1066); 
-
-                            current = grammarAccess.getOperationsTypeAccess().getSUBEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
-                            newLeafNode(enumLiteral_1, grammarAccess.getOperationsTypeAccess().getSUBEnumLiteralDeclaration_1()); 
-                        
-
-                    }
-
-
-                    }
-                    break;
-                case 3 :
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:444:6: (enumLiteral_2= '*' )
-                    {
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:444:6: (enumLiteral_2= '*' )
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:444:8: enumLiteral_2= '*'
-                    {
-                    enumLiteral_2=(Token)match(input,16,FOLLOW_16_in_ruleOperationsType1083); 
-
-                            current = grammarAccess.getOperationsTypeAccess().getMULTEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
-                            newLeafNode(enumLiteral_2, grammarAccess.getOperationsTypeAccess().getMULTEnumLiteralDeclaration_2()); 
-                        
-
-                    }
-
-
-                    }
-                    break;
-                case 4 :
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:450:6: (enumLiteral_3= '/' )
-                    {
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:450:6: (enumLiteral_3= '/' )
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:450:8: enumLiteral_3= '/'
-                    {
-                    enumLiteral_3=(Token)match(input,17,FOLLOW_17_in_ruleOperationsType1100); 
-
-                            current = grammarAccess.getOperationsTypeAccess().getDIVEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
-                            newLeafNode(enumLiteral_3, grammarAccess.getOperationsTypeAccess().getDIVEnumLiteralDeclaration_3()); 
-                        
-
-                    }
-
-
-                    }
-                    break;
-                case 5 :
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:456:6: (enumLiteral_4= '%' )
-                    {
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:456:6: (enumLiteral_4= '%' )
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:456:8: enumLiteral_4= '%'
-                    {
-                    enumLiteral_4=(Token)match(input,18,FOLLOW_18_in_ruleOperationsType1117); 
-
-                            current = grammarAccess.getOperationsTypeAccess().getMODEnumLiteralDeclaration_4().getEnumLiteral().getInstance();
-                            newLeafNode(enumLiteral_4, grammarAccess.getOperationsTypeAccess().getMODEnumLiteralDeclaration_4()); 
-                        
-
-                    }
-
-
-                    }
-                    break;
-                case 6 :
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:462:6: (enumLiteral_5= '>' )
-                    {
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:462:6: (enumLiteral_5= '>' )
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:462:8: enumLiteral_5= '>'
-                    {
-                    enumLiteral_5=(Token)match(input,19,FOLLOW_19_in_ruleOperationsType1134); 
-
-                            current = grammarAccess.getOperationsTypeAccess().getGREATEREnumLiteralDeclaration_5().getEnumLiteral().getInstance();
-                            newLeafNode(enumLiteral_5, grammarAccess.getOperationsTypeAccess().getGREATEREnumLiteralDeclaration_5()); 
-                        
-
-                    }
-
-
-                    }
-                    break;
-                case 7 :
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:468:6: (enumLiteral_6= '<' )
-                    {
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:468:6: (enumLiteral_6= '<' )
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:468:8: enumLiteral_6= '<'
-                    {
-                    enumLiteral_6=(Token)match(input,20,FOLLOW_20_in_ruleOperationsType1151); 
-
-                            current = grammarAccess.getOperationsTypeAccess().getLESSEnumLiteralDeclaration_6().getEnumLiteral().getInstance();
-                            newLeafNode(enumLiteral_6, grammarAccess.getOperationsTypeAccess().getLESSEnumLiteralDeclaration_6()); 
-                        
-
-                    }
-
-
-                    }
-                    break;
-                case 8 :
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:474:6: (enumLiteral_7= '=' )
-                    {
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:474:6: (enumLiteral_7= '=' )
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:474:8: enumLiteral_7= '='
-                    {
-                    enumLiteral_7=(Token)match(input,21,FOLLOW_21_in_ruleOperationsType1168); 
-
-                            current = grammarAccess.getOperationsTypeAccess().getEQUALSEnumLiteralDeclaration_7().getEnumLiteral().getInstance();
-                            newLeafNode(enumLiteral_7, grammarAccess.getOperationsTypeAccess().getEQUALSEnumLiteralDeclaration_7()); 
-                        
-
-                    }
-
-
-                    }
-                    break;
-                case 9 :
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:480:6: (enumLiteral_8= '!=' )
-                    {
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:480:6: (enumLiteral_8= '!=' )
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:480:8: enumLiteral_8= '!='
-                    {
-                    enumLiteral_8=(Token)match(input,22,FOLLOW_22_in_ruleOperationsType1185); 
-
-                            current = grammarAccess.getOperationsTypeAccess().getNOTEQUALEnumLiteralDeclaration_8().getEnumLiteral().getInstance();
-                            newLeafNode(enumLiteral_8, grammarAccess.getOperationsTypeAccess().getNOTEQUALEnumLiteralDeclaration_8()); 
-                        
-
-                    }
-
-
-                    }
-                    break;
-                case 10 :
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:486:6: (enumLiteral_9= '<=' )
-                    {
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:486:6: (enumLiteral_9= '<=' )
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:486:8: enumLiteral_9= '<='
-                    {
-                    enumLiteral_9=(Token)match(input,23,FOLLOW_23_in_ruleOperationsType1202); 
-
-                            current = grammarAccess.getOperationsTypeAccess().getLESSEQUALEnumLiteralDeclaration_9().getEnumLiteral().getInstance();
-                            newLeafNode(enumLiteral_9, grammarAccess.getOperationsTypeAccess().getLESSEQUALEnumLiteralDeclaration_9()); 
-                        
-
-                    }
-
-
-                    }
-                    break;
-                case 11 :
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:492:6: (enumLiteral_10= '>=' )
-                    {
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:492:6: (enumLiteral_10= '>=' )
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:492:8: enumLiteral_10= '>='
-                    {
-                    enumLiteral_10=(Token)match(input,24,FOLLOW_24_in_ruleOperationsType1219); 
-
-                            current = grammarAccess.getOperationsTypeAccess().getGREATEREQUALEnumLiteralDeclaration_10().getEnumLiteral().getInstance();
-                            newLeafNode(enumLiteral_10, grammarAccess.getOperationsTypeAccess().getGREATEREQUALEnumLiteralDeclaration_10()); 
-                        
-
-                    }
-
-
-                    }
-                    break;
-                case 12 :
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:498:6: (enumLiteral_11= 'AND' )
-                    {
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:498:6: (enumLiteral_11= 'AND' )
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:498:8: enumLiteral_11= 'AND'
-                    {
-                    enumLiteral_11=(Token)match(input,25,FOLLOW_25_in_ruleOperationsType1236); 
-
-                            current = grammarAccess.getOperationsTypeAccess().getANDEnumLiteralDeclaration_11().getEnumLiteral().getInstance();
-                            newLeafNode(enumLiteral_11, grammarAccess.getOperationsTypeAccess().getANDEnumLiteralDeclaration_11()); 
-                        
-
-                    }
-
-
-                    }
-                    break;
-                case 13 :
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:504:6: (enumLiteral_12= 'OR' )
-                    {
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:504:6: (enumLiteral_12= 'OR' )
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:504:8: enumLiteral_12= 'OR'
-                    {
-                    enumLiteral_12=(Token)match(input,26,FOLLOW_26_in_ruleOperationsType1253); 
-
-                            current = grammarAccess.getOperationsTypeAccess().getOREnumLiteralDeclaration_12().getEnumLiteral().getInstance();
-                            newLeafNode(enumLiteral_12, grammarAccess.getOperationsTypeAccess().getOREnumLiteralDeclaration_12()); 
-                        
-
-                    }
-
-
-                    }
-                    break;
-                case 14 :
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:510:6: (enumLiteral_13= 'XOR' )
-                    {
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:510:6: (enumLiteral_13= 'XOR' )
-                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:510:8: enumLiteral_13= 'XOR'
-                    {
-                    enumLiteral_13=(Token)match(input,27,FOLLOW_27_in_ruleOperationsType1270); 
-
-                            current = grammarAccess.getOperationsTypeAccess().getXOREnumLiteralDeclaration_13().getEnumLiteral().getInstance();
-                            newLeafNode(enumLiteral_13, grammarAccess.getOperationsTypeAccess().getXOREnumLiteralDeclaration_13()); 
-                        
-
-                    }
-
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-             leaveRule(); 
-        }
-         
-            catch (RecognitionException re) { 
-                recover(input,re); 
-                appendSkippedTokens();
-            } 
-        finally {
-        }
-        return current;
-    }
-    // $ANTLR end "ruleOperationsType"
-
-    // Delegated rules
-
-
- 
-
-    public static final BitSet FOLLOW_ruleModel_in_entryRuleModel75 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleModel85 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleTerm_in_ruleModel130 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleTerm_in_entryRuleTerm165 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleTerm175 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleTypes_in_ruleTerm222 = new BitSet(new long[]{0x000000000FFFA002L});
-    public static final BitSet FOLLOW_ruleOperations_in_ruleTerm252 = new BitSet(new long[]{0x0000000000002870L});
-    public static final BitSet FOLLOW_ruleTypes_in_ruleTerm273 = new BitSet(new long[]{0x000000000FFFA002L});
-    public static final BitSet FOLLOW_ruleTypes_in_entryRuleTypes311 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleTypes321 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleArithmetics_in_ruleTypes368 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleStrings_in_ruleTypes395 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_11_in_ruleTypes413 = new BitSet(new long[]{0x0000000000002870L});
-    public static final BitSet FOLLOW_ruleTerm_in_ruleTypes435 = new BitSet(new long[]{0x0000000000001000L});
-    public static final BitSet FOLLOW_12_in_ruleTypes446 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleArithmetics_in_entryRuleArithmetics483 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleArithmetics493 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleDECIMAL_in_ruleArithmetics543 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleStrings_in_entryRuleStrings578 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleStrings588 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleE_STRING_in_ruleStrings638 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleDECIMAL_in_entryRuleDECIMAL674 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleDECIMAL685 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_13_in_ruleDECIMAL724 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_RULE_INT_in_ruleDECIMAL741 = new BitSet(new long[]{0x0000000000004002L});
-    public static final BitSet FOLLOW_14_in_ruleDECIMAL760 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_RULE_INT_in_ruleDECIMAL775 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleE_STRING_in_entryRuleE_STRING823 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleE_STRING834 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_STRING_in_ruleE_STRING874 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_ID_in_ruleE_STRING900 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleOperations_in_entryRuleOperations945 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleOperations955 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleOperationsType_in_ruleOperations1000 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_15_in_ruleOperationsType1049 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_13_in_ruleOperationsType1066 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_16_in_ruleOperationsType1083 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_17_in_ruleOperationsType1100 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_18_in_ruleOperationsType1117 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_19_in_ruleOperationsType1134 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_20_in_ruleOperationsType1151 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_21_in_ruleOperationsType1168 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_22_in_ruleOperationsType1185 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_23_in_ruleOperationsType1202 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_24_in_ruleOperationsType1219 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_25_in_ruleOperationsType1236 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_26_in_ruleOperationsType1253 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_27_in_ruleOperationsType1270 = new BitSet(new long[]{0x0000000000000002L});
-
+public class InternalMyDslParser extends AbstractInternalAntlrParser {
+    public static final String[] tokenNames = new String[] {
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_INT", "RULE_STRING", "RULE_ID", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'-'", "'.'", "'true'", "'false'", "'?'", "':'", "'NOT'", "'^'", "'('", "')'", "','", "'*'", "'/'", "'%'", "'+'", "'>'", "'<'", "'='", "'!='", "'<='", "'>='", "'AND'", "'OR'", "'XOR'"
+    };
+    public static final int RULE_ID=6;
+    public static final int T__29=29;
+    public static final int T__28=28;
+    public static final int T__27=27;
+    public static final int T__26=26;
+    public static final int T__25=25;
+    public static final int T__24=24;
+    public static final int T__23=23;
+    public static final int T__22=22;
+    public static final int RULE_ANY_OTHER=10;
+    public static final int T__21=21;
+    public static final int T__20=20;
+    public static final int RULE_SL_COMMENT=8;
+    public static final int EOF=-1;
+    public static final int RULE_ML_COMMENT=7;
+    public static final int T__30=30;
+    public static final int T__19=19;
+    public static final int T__31=31;
+    public static final int RULE_STRING=5;
+    public static final int T__32=32;
+    public static final int T__33=33;
+    public static final int T__16=16;
+    public static final int T__34=34;
+    public static final int T__15=15;
+    public static final int T__18=18;
+    public static final int T__17=17;
+    public static final int T__12=12;
+    public static final int T__11=11;
+    public static final int T__14=14;
+    public static final int T__13=13;
+    public static final int RULE_INT=4;
+    public static final int RULE_WS=9;
+
+    // delegates
+    // delegators
+
+
+        public InternalMyDslParser(TokenStream input) {
+            this(input, new RecognizerSharedState());
+        }
+        public InternalMyDslParser(TokenStream input, RecognizerSharedState state) {
+            super(input, state);
+             
+        }
+        
+
+    public String[] getTokenNames() { return InternalMyDslParser.tokenNames; }
+    public String getGrammarFileName() { return "../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g"; }
+
+
+
+     	private MyDslGrammarAccess grammarAccess;
+     	
+        public InternalMyDslParser(TokenStream input, MyDslGrammarAccess grammarAccess) {
+            this(input);
+            this.grammarAccess = grammarAccess;
+            registerRules(grammarAccess.getGrammar());
+        }
+        
+        @Override
+        protected String getFirstRuleName() {
+        	return "Model";	
+       	}
+       	
+       	@Override
+       	protected MyDslGrammarAccess getGrammarAccess() {
+       		return grammarAccess;
+       	}
+
+
+
+    // $ANTLR start "entryRuleModel"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:68:1: entryRuleModel returns [EObject current=null] : iv_ruleModel= ruleModel EOF ;
+    public final EObject entryRuleModel() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleModel = null;
+
+
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:69:2: (iv_ruleModel= ruleModel EOF )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:70:2: iv_ruleModel= ruleModel EOF
+            {
+             newCompositeNode(grammarAccess.getModelRule()); 
+            pushFollow(FOLLOW_ruleModel_in_entryRuleModel75);
+            iv_ruleModel=ruleModel();
+
+            state._fsp--;
+
+             current =iv_ruleModel; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleModel85); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleModel"
+
+
+    // $ANTLR start "ruleModel"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:77:1: ruleModel returns [EObject current=null] : ( (lv_terms_0_0= ruleIfElseExpression ) ) ;
+    public final EObject ruleModel() throws RecognitionException {
+        EObject current = null;
+
+        EObject lv_terms_0_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:80:28: ( ( (lv_terms_0_0= ruleIfElseExpression ) ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:81:1: ( (lv_terms_0_0= ruleIfElseExpression ) )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:81:1: ( (lv_terms_0_0= ruleIfElseExpression ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:82:1: (lv_terms_0_0= ruleIfElseExpression )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:82:1: (lv_terms_0_0= ruleIfElseExpression )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:83:3: lv_terms_0_0= ruleIfElseExpression
+            {
+             
+            	        newCompositeNode(grammarAccess.getModelAccess().getTermsIfElseExpressionParserRuleCall_0()); 
+            	    
+            pushFollow(FOLLOW_ruleIfElseExpression_in_ruleModel130);
+            lv_terms_0_0=ruleIfElseExpression();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getModelRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"terms",
+                    		lv_terms_0_0, 
+                    		"IfElseExpression");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleModel"
+
+
+    // $ANTLR start "entryRuleDouble"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:107:1: entryRuleDouble returns [String current=null] : iv_ruleDouble= ruleDouble EOF ;
+    public final String entryRuleDouble() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_ruleDouble = null;
+
+
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:108:2: (iv_ruleDouble= ruleDouble EOF )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:109:2: iv_ruleDouble= ruleDouble EOF
+            {
+             newCompositeNode(grammarAccess.getDoubleRule()); 
+            pushFollow(FOLLOW_ruleDouble_in_entryRuleDouble166);
+            iv_ruleDouble=ruleDouble();
+
+            state._fsp--;
+
+             current =iv_ruleDouble.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleDouble177); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleDouble"
+
+
+    // $ANTLR start "ruleDouble"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:116:1: ruleDouble returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (kw= '-' )? this_INT_1= RULE_INT kw= '.' this_INT_3= RULE_INT ) ;
+    public final AntlrDatatypeRuleToken ruleDouble() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token kw=null;
+        Token this_INT_1=null;
+        Token this_INT_3=null;
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:119:28: ( ( (kw= '-' )? this_INT_1= RULE_INT kw= '.' this_INT_3= RULE_INT ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:120:1: ( (kw= '-' )? this_INT_1= RULE_INT kw= '.' this_INT_3= RULE_INT )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:120:1: ( (kw= '-' )? this_INT_1= RULE_INT kw= '.' this_INT_3= RULE_INT )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:120:2: (kw= '-' )? this_INT_1= RULE_INT kw= '.' this_INT_3= RULE_INT
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:120:2: (kw= '-' )?
+            int alt1=2;
+            int LA1_0 = input.LA(1);
+
+            if ( (LA1_0==11) ) {
+                alt1=1;
+            }
+            switch (alt1) {
+                case 1 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:121:2: kw= '-'
+                    {
+                    kw=(Token)match(input,11,FOLLOW_11_in_ruleDouble216); 
+
+                            current.merge(kw);
+                            newLeafNode(kw, grammarAccess.getDoubleAccess().getHyphenMinusKeyword_0()); 
+                        
+
+                    }
+                    break;
+
+            }
+
+            this_INT_1=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleDouble233); 
+
+            		current.merge(this_INT_1);
+                
+             
+                newLeafNode(this_INT_1, grammarAccess.getDoubleAccess().getINTTerminalRuleCall_1()); 
+                
+            kw=(Token)match(input,12,FOLLOW_12_in_ruleDouble251); 
+
+                    current.merge(kw);
+                    newLeafNode(kw, grammarAccess.getDoubleAccess().getFullStopKeyword_2()); 
+                
+            this_INT_3=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleDouble266); 
+
+            		current.merge(this_INT_3);
+                
+             
+                newLeafNode(this_INT_3, grammarAccess.getDoubleAccess().getINTTerminalRuleCall_3()); 
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleDouble"
+
+
+    // $ANTLR start "entryRuleInteger"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:154:1: entryRuleInteger returns [String current=null] : iv_ruleInteger= ruleInteger EOF ;
+    public final String entryRuleInteger() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_ruleInteger = null;
+
+
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:155:2: (iv_ruleInteger= ruleInteger EOF )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:156:2: iv_ruleInteger= ruleInteger EOF
+            {
+             newCompositeNode(grammarAccess.getIntegerRule()); 
+            pushFollow(FOLLOW_ruleInteger_in_entryRuleInteger312);
+            iv_ruleInteger=ruleInteger();
+
+            state._fsp--;
+
+             current =iv_ruleInteger.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleInteger323); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleInteger"
+
+
+    // $ANTLR start "ruleInteger"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:163:1: ruleInteger returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (kw= '-' )? this_INT_1= RULE_INT ) ;
+    public final AntlrDatatypeRuleToken ruleInteger() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token kw=null;
+        Token this_INT_1=null;
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:166:28: ( ( (kw= '-' )? this_INT_1= RULE_INT ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:167:1: ( (kw= '-' )? this_INT_1= RULE_INT )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:167:1: ( (kw= '-' )? this_INT_1= RULE_INT )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:167:2: (kw= '-' )? this_INT_1= RULE_INT
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:167:2: (kw= '-' )?
+            int alt2=2;
+            int LA2_0 = input.LA(1);
+
+            if ( (LA2_0==11) ) {
+                alt2=1;
+            }
+            switch (alt2) {
+                case 1 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:168:2: kw= '-'
+                    {
+                    kw=(Token)match(input,11,FOLLOW_11_in_ruleInteger362); 
+
+                            current.merge(kw);
+                            newLeafNode(kw, grammarAccess.getIntegerAccess().getHyphenMinusKeyword_0()); 
+                        
+
+                    }
+                    break;
+
+            }
+
+            this_INT_1=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleInteger379); 
+
+            		current.merge(this_INT_1);
+                
+             
+                newLeafNode(this_INT_1, grammarAccess.getIntegerAccess().getINTTerminalRuleCall_1()); 
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleInteger"
+
+
+    // $ANTLR start "entryRuleEString"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:188:1: entryRuleEString returns [String current=null] : iv_ruleEString= ruleEString EOF ;
+    public final String entryRuleEString() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_ruleEString = null;
+
+
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:189:2: (iv_ruleEString= ruleEString EOF )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:190:2: iv_ruleEString= ruleEString EOF
+            {
+             newCompositeNode(grammarAccess.getEStringRule()); 
+            pushFollow(FOLLOW_ruleEString_in_entryRuleEString425);
+            iv_ruleEString=ruleEString();
+
+            state._fsp--;
+
+             current =iv_ruleEString.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleEString436); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleEString"
+
+
+    // $ANTLR start "ruleEString"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:197:1: ruleEString returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID ) ;
+    public final AntlrDatatypeRuleToken ruleEString() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_STRING_0=null;
+        Token this_ID_1=null;
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:200:28: ( (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:201:1: (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:201:1: (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID )
+            int alt3=2;
+            int LA3_0 = input.LA(1);
+
+            if ( (LA3_0==RULE_STRING) ) {
+                alt3=1;
+            }
+            else if ( (LA3_0==RULE_ID) ) {
+                alt3=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 3, 0, input);
+
+                throw nvae;
+            }
+            switch (alt3) {
+                case 1 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:201:6: this_STRING_0= RULE_STRING
+                    {
+                    this_STRING_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleEString476); 
+
+                    		current.merge(this_STRING_0);
+                        
+                     
+                        newLeafNode(this_STRING_0, grammarAccess.getEStringAccess().getSTRINGTerminalRuleCall_0()); 
+                        
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:209:10: this_ID_1= RULE_ID
+                    {
+                    this_ID_1=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleEString502); 
+
+                    		current.merge(this_ID_1);
+                        
+                     
+                        newLeafNode(this_ID_1, grammarAccess.getEStringAccess().getIDTerminalRuleCall_1()); 
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleEString"
+
+
+    // $ANTLR start "entryRuleEBoolean"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:224:1: entryRuleEBoolean returns [String current=null] : iv_ruleEBoolean= ruleEBoolean EOF ;
+    public final String entryRuleEBoolean() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_ruleEBoolean = null;
+
+
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:225:2: (iv_ruleEBoolean= ruleEBoolean EOF )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:226:2: iv_ruleEBoolean= ruleEBoolean EOF
+            {
+             newCompositeNode(grammarAccess.getEBooleanRule()); 
+            pushFollow(FOLLOW_ruleEBoolean_in_entryRuleEBoolean548);
+            iv_ruleEBoolean=ruleEBoolean();
+
+            state._fsp--;
+
+             current =iv_ruleEBoolean.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleEBoolean559); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleEBoolean"
+
+
+    // $ANTLR start "ruleEBoolean"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:233:1: ruleEBoolean returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'true' | kw= 'false' ) ;
+    public final AntlrDatatypeRuleToken ruleEBoolean() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token kw=null;
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:236:28: ( (kw= 'true' | kw= 'false' ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:237:1: (kw= 'true' | kw= 'false' )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:237:1: (kw= 'true' | kw= 'false' )
+            int alt4=2;
+            int LA4_0 = input.LA(1);
+
+            if ( (LA4_0==13) ) {
+                alt4=1;
+            }
+            else if ( (LA4_0==14) ) {
+                alt4=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 4, 0, input);
+
+                throw nvae;
+            }
+            switch (alt4) {
+                case 1 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:238:2: kw= 'true'
+                    {
+                    kw=(Token)match(input,13,FOLLOW_13_in_ruleEBoolean597); 
+
+                            current.merge(kw);
+                            newLeafNode(kw, grammarAccess.getEBooleanAccess().getTrueKeyword_0()); 
+                        
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:245:2: kw= 'false'
+                    {
+                    kw=(Token)match(input,14,FOLLOW_14_in_ruleEBoolean616); 
+
+                            current.merge(kw);
+                            newLeafNode(kw, grammarAccess.getEBooleanAccess().getFalseKeyword_1()); 
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleEBoolean"
+
+
+    // $ANTLR start "entryRuleRootExpression"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:258:1: entryRuleRootExpression returns [EObject current=null] : iv_ruleRootExpression= ruleRootExpression EOF ;
+    public final EObject entryRuleRootExpression() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleRootExpression = null;
+
+
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:259:2: (iv_ruleRootExpression= ruleRootExpression EOF )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:260:2: iv_ruleRootExpression= ruleRootExpression EOF
+            {
+             newCompositeNode(grammarAccess.getRootExpressionRule()); 
+            pushFollow(FOLLOW_ruleRootExpression_in_entryRuleRootExpression656);
+            iv_ruleRootExpression=ruleRootExpression();
+
+            state._fsp--;
+
+             current =iv_ruleRootExpression; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRootExpression666); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleRootExpression"
+
+
+    // $ANTLR start "ruleRootExpression"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:267:1: ruleRootExpression returns [EObject current=null] : this_IfElseExpression_0= ruleIfElseExpression ;
+    public final EObject ruleRootExpression() throws RecognitionException {
+        EObject current = null;
+
+        EObject this_IfElseExpression_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:270:28: (this_IfElseExpression_0= ruleIfElseExpression )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:272:5: this_IfElseExpression_0= ruleIfElseExpression
+            {
+             
+                    newCompositeNode(grammarAccess.getRootExpressionAccess().getIfElseExpressionParserRuleCall()); 
+                
+            pushFollow(FOLLOW_ruleIfElseExpression_in_ruleRootExpression712);
+            this_IfElseExpression_0=ruleIfElseExpression();
+
+            state._fsp--;
+
+             
+                    current = this_IfElseExpression_0; 
+                    afterParserOrEnumRuleCall();
+                
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleRootExpression"
+
+
+    // $ANTLR start "entryRuleIfElseExpression"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:288:1: entryRuleIfElseExpression returns [EObject current=null] : iv_ruleIfElseExpression= ruleIfElseExpression EOF ;
+    public final EObject entryRuleIfElseExpression() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleIfElseExpression = null;
+
+
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:289:2: (iv_ruleIfElseExpression= ruleIfElseExpression EOF )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:290:2: iv_ruleIfElseExpression= ruleIfElseExpression EOF
+            {
+             newCompositeNode(grammarAccess.getIfElseExpressionRule()); 
+            pushFollow(FOLLOW_ruleIfElseExpression_in_entryRuleIfElseExpression746);
+            iv_ruleIfElseExpression=ruleIfElseExpression();
+
+            state._fsp--;
+
+             current =iv_ruleIfElseExpression; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleIfElseExpression756); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleIfElseExpression"
+
+
+    // $ANTLR start "ruleIfElseExpression"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:297:1: ruleIfElseExpression returns [EObject current=null] : (this_BinaryBooleanExpression_0= ruleBinaryBooleanExpression ( () otherlv_2= '?' ( (lv_trueExp_3_0= ruleIfElseExpression ) ) otherlv_4= ':' ( (lv_falseExp_5_0= ruleIfElseExpression ) ) )? ) ;
+    public final EObject ruleIfElseExpression() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_2=null;
+        Token otherlv_4=null;
+        EObject this_BinaryBooleanExpression_0 = null;
+
+        EObject lv_trueExp_3_0 = null;
+
+        EObject lv_falseExp_5_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:300:28: ( (this_BinaryBooleanExpression_0= ruleBinaryBooleanExpression ( () otherlv_2= '?' ( (lv_trueExp_3_0= ruleIfElseExpression ) ) otherlv_4= ':' ( (lv_falseExp_5_0= ruleIfElseExpression ) ) )? ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:301:1: (this_BinaryBooleanExpression_0= ruleBinaryBooleanExpression ( () otherlv_2= '?' ( (lv_trueExp_3_0= ruleIfElseExpression ) ) otherlv_4= ':' ( (lv_falseExp_5_0= ruleIfElseExpression ) ) )? )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:301:1: (this_BinaryBooleanExpression_0= ruleBinaryBooleanExpression ( () otherlv_2= '?' ( (lv_trueExp_3_0= ruleIfElseExpression ) ) otherlv_4= ':' ( (lv_falseExp_5_0= ruleIfElseExpression ) ) )? )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:302:5: this_BinaryBooleanExpression_0= ruleBinaryBooleanExpression ( () otherlv_2= '?' ( (lv_trueExp_3_0= ruleIfElseExpression ) ) otherlv_4= ':' ( (lv_falseExp_5_0= ruleIfElseExpression ) ) )?
+            {
+             
+                    newCompositeNode(grammarAccess.getIfElseExpressionAccess().getBinaryBooleanExpressionParserRuleCall_0()); 
+                
+            pushFollow(FOLLOW_ruleBinaryBooleanExpression_in_ruleIfElseExpression803);
+            this_BinaryBooleanExpression_0=ruleBinaryBooleanExpression();
+
+            state._fsp--;
+
+             
+                    current = this_BinaryBooleanExpression_0; 
+                    afterParserOrEnumRuleCall();
+                
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:310:1: ( () otherlv_2= '?' ( (lv_trueExp_3_0= ruleIfElseExpression ) ) otherlv_4= ':' ( (lv_falseExp_5_0= ruleIfElseExpression ) ) )?
+            int alt5=2;
+            int LA5_0 = input.LA(1);
+
+            if ( (LA5_0==15) ) {
+                alt5=1;
+            }
+            switch (alt5) {
+                case 1 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:310:2: () otherlv_2= '?' ( (lv_trueExp_3_0= ruleIfElseExpression ) ) otherlv_4= ':' ( (lv_falseExp_5_0= ruleIfElseExpression ) )
+                    {
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:310:2: ()
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:311:5: 
+                    {
+
+                            current = forceCreateModelElementAndSet(
+                                grammarAccess.getIfElseExpressionAccess().getIfElseExpressionConditionAction_1_0(),
+                                current);
+                        
+
+                    }
+
+                    otherlv_2=(Token)match(input,15,FOLLOW_15_in_ruleIfElseExpression824); 
+
+                        	newLeafNode(otherlv_2, grammarAccess.getIfElseExpressionAccess().getQuestionMarkKeyword_1_1());
+                        
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:320:1: ( (lv_trueExp_3_0= ruleIfElseExpression ) )
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:321:1: (lv_trueExp_3_0= ruleIfElseExpression )
+                    {
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:321:1: (lv_trueExp_3_0= ruleIfElseExpression )
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:322:3: lv_trueExp_3_0= ruleIfElseExpression
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getIfElseExpressionAccess().getTrueExpIfElseExpressionParserRuleCall_1_2_0()); 
+                    	    
+                    pushFollow(FOLLOW_ruleIfElseExpression_in_ruleIfElseExpression845);
+                    lv_trueExp_3_0=ruleIfElseExpression();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getIfElseExpressionRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"trueExp",
+                            		lv_trueExp_3_0, 
+                            		"IfElseExpression");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    otherlv_4=(Token)match(input,16,FOLLOW_16_in_ruleIfElseExpression857); 
+
+                        	newLeafNode(otherlv_4, grammarAccess.getIfElseExpressionAccess().getColonKeyword_1_3());
+                        
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:342:1: ( (lv_falseExp_5_0= ruleIfElseExpression ) )
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:343:1: (lv_falseExp_5_0= ruleIfElseExpression )
+                    {
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:343:1: (lv_falseExp_5_0= ruleIfElseExpression )
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:344:3: lv_falseExp_5_0= ruleIfElseExpression
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getIfElseExpressionAccess().getFalseExpIfElseExpressionParserRuleCall_1_4_0()); 
+                    	    
+                    pushFollow(FOLLOW_ruleIfElseExpression_in_ruleIfElseExpression878);
+                    lv_falseExp_5_0=ruleIfElseExpression();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getIfElseExpressionRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"falseExp",
+                            		lv_falseExp_5_0, 
+                            		"IfElseExpression");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleIfElseExpression"
+
+
+    // $ANTLR start "entryRuleBinaryBooleanExpression"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:368:1: entryRuleBinaryBooleanExpression returns [EObject current=null] : iv_ruleBinaryBooleanExpression= ruleBinaryBooleanExpression EOF ;
+    public final EObject entryRuleBinaryBooleanExpression() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleBinaryBooleanExpression = null;
+
+
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:369:2: (iv_ruleBinaryBooleanExpression= ruleBinaryBooleanExpression EOF )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:370:2: iv_ruleBinaryBooleanExpression= ruleBinaryBooleanExpression EOF
+            {
+             newCompositeNode(grammarAccess.getBinaryBooleanExpressionRule()); 
+            pushFollow(FOLLOW_ruleBinaryBooleanExpression_in_entryRuleBinaryBooleanExpression916);
+            iv_ruleBinaryBooleanExpression=ruleBinaryBooleanExpression();
+
+            state._fsp--;
+
+             current =iv_ruleBinaryBooleanExpression; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleBinaryBooleanExpression926); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleBinaryBooleanExpression"
+
+
+    // $ANTLR start "ruleBinaryBooleanExpression"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:377:1: ruleBinaryBooleanExpression returns [EObject current=null] : (this_UnaryBooleanExpression_0= ruleUnaryBooleanExpression ( () ( (lv_operation_2_0= ruleBooleanOperation ) ) ( (lv_right_3_0= ruleUnaryBooleanExpression ) ) )* ) ;
+    public final EObject ruleBinaryBooleanExpression() throws RecognitionException {
+        EObject current = null;
+
+        EObject this_UnaryBooleanExpression_0 = null;
+
+        Enumerator lv_operation_2_0 = null;
+
+        EObject lv_right_3_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:380:28: ( (this_UnaryBooleanExpression_0= ruleUnaryBooleanExpression ( () ( (lv_operation_2_0= ruleBooleanOperation ) ) ( (lv_right_3_0= ruleUnaryBooleanExpression ) ) )* ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:381:1: (this_UnaryBooleanExpression_0= ruleUnaryBooleanExpression ( () ( (lv_operation_2_0= ruleBooleanOperation ) ) ( (lv_right_3_0= ruleUnaryBooleanExpression ) ) )* )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:381:1: (this_UnaryBooleanExpression_0= ruleUnaryBooleanExpression ( () ( (lv_operation_2_0= ruleBooleanOperation ) ) ( (lv_right_3_0= ruleUnaryBooleanExpression ) ) )* )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:382:5: this_UnaryBooleanExpression_0= ruleUnaryBooleanExpression ( () ( (lv_operation_2_0= ruleBooleanOperation ) ) ( (lv_right_3_0= ruleUnaryBooleanExpression ) ) )*
+            {
+             
+                    newCompositeNode(grammarAccess.getBinaryBooleanExpressionAccess().getUnaryBooleanExpressionParserRuleCall_0()); 
+                
+            pushFollow(FOLLOW_ruleUnaryBooleanExpression_in_ruleBinaryBooleanExpression973);
+            this_UnaryBooleanExpression_0=ruleUnaryBooleanExpression();
+
+            state._fsp--;
+
+             
+                    current = this_UnaryBooleanExpression_0; 
+                    afterParserOrEnumRuleCall();
+                
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:390:1: ( () ( (lv_operation_2_0= ruleBooleanOperation ) ) ( (lv_right_3_0= ruleUnaryBooleanExpression ) ) )*
+            loop6:
+            do {
+                int alt6=2;
+                int LA6_0 = input.LA(1);
+
+                if ( ((LA6_0>=32 && LA6_0<=34)) ) {
+                    alt6=1;
+                }
+
+
+                switch (alt6) {
+            	case 1 :
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:390:2: () ( (lv_operation_2_0= ruleBooleanOperation ) ) ( (lv_right_3_0= ruleUnaryBooleanExpression ) )
+            	    {
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:390:2: ()
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:391:5: 
+            	    {
+
+            	            current = forceCreateModelElementAndSet(
+            	                grammarAccess.getBinaryBooleanExpressionAccess().getBinaryBooleanExpressionLeftAction_1_0(),
+            	                current);
+            	        
+
+            	    }
+
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:396:2: ( (lv_operation_2_0= ruleBooleanOperation ) )
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:397:1: (lv_operation_2_0= ruleBooleanOperation )
+            	    {
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:397:1: (lv_operation_2_0= ruleBooleanOperation )
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:398:3: lv_operation_2_0= ruleBooleanOperation
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getBinaryBooleanExpressionAccess().getOperationBooleanOperationEnumRuleCall_1_1_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleBooleanOperation_in_ruleBinaryBooleanExpression1003);
+            	    lv_operation_2_0=ruleBooleanOperation();
+
+            	    state._fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = createModelElementForParent(grammarAccess.getBinaryBooleanExpressionRule());
+            	    	        }
+            	           		set(
+            	           			current, 
+            	           			"operation",
+            	            		lv_operation_2_0, 
+            	            		"BooleanOperation");
+            	    	        afterParserOrEnumRuleCall();
+            	    	    
+
+            	    }
+
+
+            	    }
+
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:414:2: ( (lv_right_3_0= ruleUnaryBooleanExpression ) )
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:415:1: (lv_right_3_0= ruleUnaryBooleanExpression )
+            	    {
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:415:1: (lv_right_3_0= ruleUnaryBooleanExpression )
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:416:3: lv_right_3_0= ruleUnaryBooleanExpression
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getBinaryBooleanExpressionAccess().getRightUnaryBooleanExpressionParserRuleCall_1_2_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleUnaryBooleanExpression_in_ruleBinaryBooleanExpression1024);
+            	    lv_right_3_0=ruleUnaryBooleanExpression();
+
+            	    state._fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = createModelElementForParent(grammarAccess.getBinaryBooleanExpressionRule());
+            	    	        }
+            	           		set(
+            	           			current, 
+            	           			"right",
+            	            		lv_right_3_0, 
+            	            		"UnaryBooleanExpression");
+            	    	        afterParserOrEnumRuleCall();
+            	    	    
+
+            	    }
+
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop6;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleBinaryBooleanExpression"
+
+
+    // $ANTLR start "entryRuleUnaryBooleanExpression"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:440:1: entryRuleUnaryBooleanExpression returns [EObject current=null] : iv_ruleUnaryBooleanExpression= ruleUnaryBooleanExpression EOF ;
+    public final EObject entryRuleUnaryBooleanExpression() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleUnaryBooleanExpression = null;
+
+
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:441:2: (iv_ruleUnaryBooleanExpression= ruleUnaryBooleanExpression EOF )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:442:2: iv_ruleUnaryBooleanExpression= ruleUnaryBooleanExpression EOF
+            {
+             newCompositeNode(grammarAccess.getUnaryBooleanExpressionRule()); 
+            pushFollow(FOLLOW_ruleUnaryBooleanExpression_in_entryRuleUnaryBooleanExpression1062);
+            iv_ruleUnaryBooleanExpression=ruleUnaryBooleanExpression();
+
+            state._fsp--;
+
+             current =iv_ruleUnaryBooleanExpression; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleUnaryBooleanExpression1072); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleUnaryBooleanExpression"
+
+
+    // $ANTLR start "ruleUnaryBooleanExpression"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:449:1: ruleUnaryBooleanExpression returns [EObject current=null] : ( (otherlv_0= 'NOT' this_Comparison_1= ruleComparison () ) | this_Comparison_3= ruleComparison ) ;
+    public final EObject ruleUnaryBooleanExpression() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        EObject this_Comparison_1 = null;
+
+        EObject this_Comparison_3 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:452:28: ( ( (otherlv_0= 'NOT' this_Comparison_1= ruleComparison () ) | this_Comparison_3= ruleComparison ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:453:1: ( (otherlv_0= 'NOT' this_Comparison_1= ruleComparison () ) | this_Comparison_3= ruleComparison )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:453:1: ( (otherlv_0= 'NOT' this_Comparison_1= ruleComparison () ) | this_Comparison_3= ruleComparison )
+            int alt7=2;
+            int LA7_0 = input.LA(1);
+
+            if ( (LA7_0==17) ) {
+                alt7=1;
+            }
+            else if ( ((LA7_0>=RULE_INT && LA7_0<=RULE_ID)||LA7_0==11||(LA7_0>=13 && LA7_0<=14)||LA7_0==19) ) {
+                alt7=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 7, 0, input);
+
+                throw nvae;
+            }
+            switch (alt7) {
+                case 1 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:453:2: (otherlv_0= 'NOT' this_Comparison_1= ruleComparison () )
+                    {
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:453:2: (otherlv_0= 'NOT' this_Comparison_1= ruleComparison () )
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:453:4: otherlv_0= 'NOT' this_Comparison_1= ruleComparison ()
+                    {
+                    otherlv_0=(Token)match(input,17,FOLLOW_17_in_ruleUnaryBooleanExpression1110); 
+
+                        	newLeafNode(otherlv_0, grammarAccess.getUnaryBooleanExpressionAccess().getNOTKeyword_0_0());
+                        
+                     
+                            newCompositeNode(grammarAccess.getUnaryBooleanExpressionAccess().getComparisonParserRuleCall_0_1()); 
+                        
+                    pushFollow(FOLLOW_ruleComparison_in_ruleUnaryBooleanExpression1132);
+                    this_Comparison_1=ruleComparison();
+
+                    state._fsp--;
+
+                     
+                            current = this_Comparison_1; 
+                            afterParserOrEnumRuleCall();
+                        
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:466:1: ()
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:467:5: 
+                    {
+
+                            current = forceCreateModelElementAndSet(
+                                grammarAccess.getUnaryBooleanExpressionAccess().getUnaryBooleanExpressionInnerAction_0_2(),
+                                current);
+                        
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:474:5: this_Comparison_3= ruleComparison
+                    {
+                     
+                            newCompositeNode(grammarAccess.getUnaryBooleanExpressionAccess().getComparisonParserRuleCall_1()); 
+                        
+                    pushFollow(FOLLOW_ruleComparison_in_ruleUnaryBooleanExpression1169);
+                    this_Comparison_3=ruleComparison();
+
+                    state._fsp--;
+
+                     
+                            current = this_Comparison_3; 
+                            afterParserOrEnumRuleCall();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleUnaryBooleanExpression"
+
+
+    // $ANTLR start "entryRuleComparison"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:490:1: entryRuleComparison returns [EObject current=null] : iv_ruleComparison= ruleComparison EOF ;
+    public final EObject entryRuleComparison() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleComparison = null;
+
+
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:491:2: (iv_ruleComparison= ruleComparison EOF )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:492:2: iv_ruleComparison= ruleComparison EOF
+            {
+             newCompositeNode(grammarAccess.getComparisonRule()); 
+            pushFollow(FOLLOW_ruleComparison_in_entryRuleComparison1204);
+            iv_ruleComparison=ruleComparison();
+
+            state._fsp--;
+
+             current =iv_ruleComparison; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleComparison1214); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleComparison"
+
+
+    // $ANTLR start "ruleComparison"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:499:1: ruleComparison returns [EObject current=null] : (this_Term_0= ruleTerm ( () ( (lv_operation_2_0= ruleCompareOperation ) ) ( (lv_right_3_0= ruleTerm ) ) )* ) ;
+    public final EObject ruleComparison() throws RecognitionException {
+        EObject current = null;
+
+        EObject this_Term_0 = null;
+
+        Enumerator lv_operation_2_0 = null;
+
+        EObject lv_right_3_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:502:28: ( (this_Term_0= ruleTerm ( () ( (lv_operation_2_0= ruleCompareOperation ) ) ( (lv_right_3_0= ruleTerm ) ) )* ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:503:1: (this_Term_0= ruleTerm ( () ( (lv_operation_2_0= ruleCompareOperation ) ) ( (lv_right_3_0= ruleTerm ) ) )* )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:503:1: (this_Term_0= ruleTerm ( () ( (lv_operation_2_0= ruleCompareOperation ) ) ( (lv_right_3_0= ruleTerm ) ) )* )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:504:5: this_Term_0= ruleTerm ( () ( (lv_operation_2_0= ruleCompareOperation ) ) ( (lv_right_3_0= ruleTerm ) ) )*
+            {
+             
+                    newCompositeNode(grammarAccess.getComparisonAccess().getTermParserRuleCall_0()); 
+                
+            pushFollow(FOLLOW_ruleTerm_in_ruleComparison1261);
+            this_Term_0=ruleTerm();
+
+            state._fsp--;
+
+             
+                    current = this_Term_0; 
+                    afterParserOrEnumRuleCall();
+                
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:512:1: ( () ( (lv_operation_2_0= ruleCompareOperation ) ) ( (lv_right_3_0= ruleTerm ) ) )*
+            loop8:
+            do {
+                int alt8=2;
+                int LA8_0 = input.LA(1);
+
+                if ( ((LA8_0>=26 && LA8_0<=31)) ) {
+                    alt8=1;
+                }
+
+
+                switch (alt8) {
+            	case 1 :
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:512:2: () ( (lv_operation_2_0= ruleCompareOperation ) ) ( (lv_right_3_0= ruleTerm ) )
+            	    {
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:512:2: ()
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:513:5: 
+            	    {
+
+            	            current = forceCreateModelElementAndSet(
+            	                grammarAccess.getComparisonAccess().getComparisonLeftAction_1_0(),
+            	                current);
+            	        
+
+            	    }
+
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:518:2: ( (lv_operation_2_0= ruleCompareOperation ) )
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:519:1: (lv_operation_2_0= ruleCompareOperation )
+            	    {
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:519:1: (lv_operation_2_0= ruleCompareOperation )
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:520:3: lv_operation_2_0= ruleCompareOperation
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getComparisonAccess().getOperationCompareOperationEnumRuleCall_1_1_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleCompareOperation_in_ruleComparison1291);
+            	    lv_operation_2_0=ruleCompareOperation();
+
+            	    state._fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = createModelElementForParent(grammarAccess.getComparisonRule());
+            	    	        }
+            	           		set(
+            	           			current, 
+            	           			"operation",
+            	            		lv_operation_2_0, 
+            	            		"CompareOperation");
+            	    	        afterParserOrEnumRuleCall();
+            	    	    
+
+            	    }
+
+
+            	    }
+
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:536:2: ( (lv_right_3_0= ruleTerm ) )
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:537:1: (lv_right_3_0= ruleTerm )
+            	    {
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:537:1: (lv_right_3_0= ruleTerm )
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:538:3: lv_right_3_0= ruleTerm
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getComparisonAccess().getRightTermParserRuleCall_1_2_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleTerm_in_ruleComparison1312);
+            	    lv_right_3_0=ruleTerm();
+
+            	    state._fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = createModelElementForParent(grammarAccess.getComparisonRule());
+            	    	        }
+            	           		set(
+            	           			current, 
+            	           			"right",
+            	            		lv_right_3_0, 
+            	            		"Term");
+            	    	        afterParserOrEnumRuleCall();
+            	    	    
+
+            	    }
+
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop8;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleComparison"
+
+
+    // $ANTLR start "entryRuleTerm"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:562:1: entryRuleTerm returns [EObject current=null] : iv_ruleTerm= ruleTerm EOF ;
+    public final EObject entryRuleTerm() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleTerm = null;
+
+
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:563:2: (iv_ruleTerm= ruleTerm EOF )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:564:2: iv_ruleTerm= ruleTerm EOF
+            {
+             newCompositeNode(grammarAccess.getTermRule()); 
+            pushFollow(FOLLOW_ruleTerm_in_entryRuleTerm1350);
+            iv_ruleTerm=ruleTerm();
+
+            state._fsp--;
+
+             current =iv_ruleTerm; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleTerm1360); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleTerm"
+
+
+    // $ANTLR start "ruleTerm"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:571:1: ruleTerm returns [EObject current=null] : (this_Product_0= ruleProduct ( () ( (lv_operation_2_0= ruleTermOperation ) ) ( (lv_right_3_0= ruleProduct ) ) )* ) ;
+    public final EObject ruleTerm() throws RecognitionException {
+        EObject current = null;
+
+        EObject this_Product_0 = null;
+
+        Enumerator lv_operation_2_0 = null;
+
+        EObject lv_right_3_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:574:28: ( (this_Product_0= ruleProduct ( () ( (lv_operation_2_0= ruleTermOperation ) ) ( (lv_right_3_0= ruleProduct ) ) )* ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:575:1: (this_Product_0= ruleProduct ( () ( (lv_operation_2_0= ruleTermOperation ) ) ( (lv_right_3_0= ruleProduct ) ) )* )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:575:1: (this_Product_0= ruleProduct ( () ( (lv_operation_2_0= ruleTermOperation ) ) ( (lv_right_3_0= ruleProduct ) ) )* )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:576:5: this_Product_0= ruleProduct ( () ( (lv_operation_2_0= ruleTermOperation ) ) ( (lv_right_3_0= ruleProduct ) ) )*
+            {
+             
+                    newCompositeNode(grammarAccess.getTermAccess().getProductParserRuleCall_0()); 
+                
+            pushFollow(FOLLOW_ruleProduct_in_ruleTerm1407);
+            this_Product_0=ruleProduct();
+
+            state._fsp--;
+
+             
+                    current = this_Product_0; 
+                    afterParserOrEnumRuleCall();
+                
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:584:1: ( () ( (lv_operation_2_0= ruleTermOperation ) ) ( (lv_right_3_0= ruleProduct ) ) )*
+            loop9:
+            do {
+                int alt9=2;
+                int LA9_0 = input.LA(1);
+
+                if ( (LA9_0==11||LA9_0==25) ) {
+                    alt9=1;
+                }
+
+
+                switch (alt9) {
+            	case 1 :
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:584:2: () ( (lv_operation_2_0= ruleTermOperation ) ) ( (lv_right_3_0= ruleProduct ) )
+            	    {
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:584:2: ()
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:585:5: 
+            	    {
+
+            	            current = forceCreateModelElementAndSet(
+            	                grammarAccess.getTermAccess().getTermLeftAction_1_0(),
+            	                current);
+            	        
+
+            	    }
+
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:590:2: ( (lv_operation_2_0= ruleTermOperation ) )
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:591:1: (lv_operation_2_0= ruleTermOperation )
+            	    {
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:591:1: (lv_operation_2_0= ruleTermOperation )
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:592:3: lv_operation_2_0= ruleTermOperation
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getTermAccess().getOperationTermOperationEnumRuleCall_1_1_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleTermOperation_in_ruleTerm1437);
+            	    lv_operation_2_0=ruleTermOperation();
+
+            	    state._fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = createModelElementForParent(grammarAccess.getTermRule());
+            	    	        }
+            	           		set(
+            	           			current, 
+            	           			"operation",
+            	            		lv_operation_2_0, 
+            	            		"TermOperation");
+            	    	        afterParserOrEnumRuleCall();
+            	    	    
+
+            	    }
+
+
+            	    }
+
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:608:2: ( (lv_right_3_0= ruleProduct ) )
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:609:1: (lv_right_3_0= ruleProduct )
+            	    {
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:609:1: (lv_right_3_0= ruleProduct )
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:610:3: lv_right_3_0= ruleProduct
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getTermAccess().getRightProductParserRuleCall_1_2_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleProduct_in_ruleTerm1458);
+            	    lv_right_3_0=ruleProduct();
+
+            	    state._fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = createModelElementForParent(grammarAccess.getTermRule());
+            	    	        }
+            	           		set(
+            	           			current, 
+            	           			"right",
+            	            		lv_right_3_0, 
+            	            		"Product");
+            	    	        afterParserOrEnumRuleCall();
+            	    	    
+
+            	    }
+
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop9;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleTerm"
+
+
+    // $ANTLR start "entryRuleProduct"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:634:1: entryRuleProduct returns [EObject current=null] : iv_ruleProduct= ruleProduct EOF ;
+    public final EObject entryRuleProduct() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleProduct = null;
+
+
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:635:2: (iv_ruleProduct= ruleProduct EOF )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:636:2: iv_ruleProduct= ruleProduct EOF
+            {
+             newCompositeNode(grammarAccess.getProductRule()); 
+            pushFollow(FOLLOW_ruleProduct_in_entryRuleProduct1496);
+            iv_ruleProduct=ruleProduct();
+
+            state._fsp--;
+
+             current =iv_ruleProduct; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleProduct1506); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleProduct"
+
+
+    // $ANTLR start "ruleProduct"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:643:1: ruleProduct returns [EObject current=null] : (this_Power_0= rulePower ( () ( (lv_operation_2_0= ruleProductOperation ) ) ( (lv_right_3_0= rulePower ) ) )* ) ;
+    public final EObject ruleProduct() throws RecognitionException {
+        EObject current = null;
+
+        EObject this_Power_0 = null;
+
+        Enumerator lv_operation_2_0 = null;
+
+        EObject lv_right_3_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:646:28: ( (this_Power_0= rulePower ( () ( (lv_operation_2_0= ruleProductOperation ) ) ( (lv_right_3_0= rulePower ) ) )* ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:647:1: (this_Power_0= rulePower ( () ( (lv_operation_2_0= ruleProductOperation ) ) ( (lv_right_3_0= rulePower ) ) )* )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:647:1: (this_Power_0= rulePower ( () ( (lv_operation_2_0= ruleProductOperation ) ) ( (lv_right_3_0= rulePower ) ) )* )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:648:5: this_Power_0= rulePower ( () ( (lv_operation_2_0= ruleProductOperation ) ) ( (lv_right_3_0= rulePower ) ) )*
+            {
+             
+                    newCompositeNode(grammarAccess.getProductAccess().getPowerParserRuleCall_0()); 
+                
+            pushFollow(FOLLOW_rulePower_in_ruleProduct1553);
+            this_Power_0=rulePower();
+
+            state._fsp--;
+
+             
+                    current = this_Power_0; 
+                    afterParserOrEnumRuleCall();
+                
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:656:1: ( () ( (lv_operation_2_0= ruleProductOperation ) ) ( (lv_right_3_0= rulePower ) ) )*
+            loop10:
+            do {
+                int alt10=2;
+                int LA10_0 = input.LA(1);
+
+                if ( ((LA10_0>=22 && LA10_0<=24)) ) {
+                    alt10=1;
+                }
+
+
+                switch (alt10) {
+            	case 1 :
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:656:2: () ( (lv_operation_2_0= ruleProductOperation ) ) ( (lv_right_3_0= rulePower ) )
+            	    {
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:656:2: ()
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:657:5: 
+            	    {
+
+            	            current = forceCreateModelElementAndSet(
+            	                grammarAccess.getProductAccess().getProductLeftAction_1_0(),
+            	                current);
+            	        
+
+            	    }
+
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:662:2: ( (lv_operation_2_0= ruleProductOperation ) )
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:663:1: (lv_operation_2_0= ruleProductOperation )
+            	    {
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:663:1: (lv_operation_2_0= ruleProductOperation )
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:664:3: lv_operation_2_0= ruleProductOperation
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getProductAccess().getOperationProductOperationEnumRuleCall_1_1_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleProductOperation_in_ruleProduct1583);
+            	    lv_operation_2_0=ruleProductOperation();
+
+            	    state._fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = createModelElementForParent(grammarAccess.getProductRule());
+            	    	        }
+            	           		set(
+            	           			current, 
+            	           			"operation",
+            	            		lv_operation_2_0, 
+            	            		"ProductOperation");
+            	    	        afterParserOrEnumRuleCall();
+            	    	    
+
+            	    }
+
+
+            	    }
+
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:680:2: ( (lv_right_3_0= rulePower ) )
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:681:1: (lv_right_3_0= rulePower )
+            	    {
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:681:1: (lv_right_3_0= rulePower )
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:682:3: lv_right_3_0= rulePower
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getProductAccess().getRightPowerParserRuleCall_1_2_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_rulePower_in_ruleProduct1604);
+            	    lv_right_3_0=rulePower();
+
+            	    state._fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = createModelElementForParent(grammarAccess.getProductRule());
+            	    	        }
+            	           		set(
+            	           			current, 
+            	           			"right",
+            	            		lv_right_3_0, 
+            	            		"Power");
+            	    	        afterParserOrEnumRuleCall();
+            	    	    
+
+            	    }
+
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop10;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleProduct"
+
+
+    // $ANTLR start "entryRulePower"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:706:1: entryRulePower returns [EObject current=null] : iv_rulePower= rulePower EOF ;
+    public final EObject entryRulePower() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_rulePower = null;
+
+
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:707:2: (iv_rulePower= rulePower EOF )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:708:2: iv_rulePower= rulePower EOF
+            {
+             newCompositeNode(grammarAccess.getPowerRule()); 
+            pushFollow(FOLLOW_rulePower_in_entryRulePower1642);
+            iv_rulePower=rulePower();
+
+            state._fsp--;
+
+             current =iv_rulePower; 
+            match(input,EOF,FOLLOW_EOF_in_entryRulePower1652); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRulePower"
+
+
+    // $ANTLR start "rulePower"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:715:1: rulePower returns [EObject current=null] : (this_Atom_0= ruleAtom ( () otherlv_2= '^' ( (lv_exponent_3_0= ruleAtom ) ) )* ) ;
+    public final EObject rulePower() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_2=null;
+        EObject this_Atom_0 = null;
+
+        EObject lv_exponent_3_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:718:28: ( (this_Atom_0= ruleAtom ( () otherlv_2= '^' ( (lv_exponent_3_0= ruleAtom ) ) )* ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:719:1: (this_Atom_0= ruleAtom ( () otherlv_2= '^' ( (lv_exponent_3_0= ruleAtom ) ) )* )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:719:1: (this_Atom_0= ruleAtom ( () otherlv_2= '^' ( (lv_exponent_3_0= ruleAtom ) ) )* )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:720:5: this_Atom_0= ruleAtom ( () otherlv_2= '^' ( (lv_exponent_3_0= ruleAtom ) ) )*
+            {
+             
+                    newCompositeNode(grammarAccess.getPowerAccess().getAtomParserRuleCall_0()); 
+                
+            pushFollow(FOLLOW_ruleAtom_in_rulePower1699);
+            this_Atom_0=ruleAtom();
+
+            state._fsp--;
+
+             
+                    current = this_Atom_0; 
+                    afterParserOrEnumRuleCall();
+                
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:728:1: ( () otherlv_2= '^' ( (lv_exponent_3_0= ruleAtom ) ) )*
+            loop11:
+            do {
+                int alt11=2;
+                int LA11_0 = input.LA(1);
+
+                if ( (LA11_0==18) ) {
+                    alt11=1;
+                }
+
+
+                switch (alt11) {
+            	case 1 :
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:728:2: () otherlv_2= '^' ( (lv_exponent_3_0= ruleAtom ) )
+            	    {
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:728:2: ()
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:729:5: 
+            	    {
+
+            	            current = forceCreateModelElementAndSet(
+            	                grammarAccess.getPowerAccess().getPowerBaseAction_1_0(),
+            	                current);
+            	        
+
+            	    }
+
+            	    otherlv_2=(Token)match(input,18,FOLLOW_18_in_rulePower1720); 
+
+            	        	newLeafNode(otherlv_2, grammarAccess.getPowerAccess().getCircumflexAccentKeyword_1_1());
+            	        
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:738:1: ( (lv_exponent_3_0= ruleAtom ) )
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:739:1: (lv_exponent_3_0= ruleAtom )
+            	    {
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:739:1: (lv_exponent_3_0= ruleAtom )
+            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:740:3: lv_exponent_3_0= ruleAtom
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getPowerAccess().getExponentAtomParserRuleCall_1_2_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleAtom_in_rulePower1741);
+            	    lv_exponent_3_0=ruleAtom();
+
+            	    state._fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = createModelElementForParent(grammarAccess.getPowerRule());
+            	    	        }
+            	           		set(
+            	           			current, 
+            	           			"exponent",
+            	            		lv_exponent_3_0, 
+            	            		"Atom");
+            	    	        afterParserOrEnumRuleCall();
+            	    	    
+
+            	    }
+
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop11;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "rulePower"
+
+
+    // $ANTLR start "entryRuleAtom"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:764:1: entryRuleAtom returns [EObject current=null] : iv_ruleAtom= ruleAtom EOF ;
+    public final EObject entryRuleAtom() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleAtom = null;
+
+
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:765:2: (iv_ruleAtom= ruleAtom EOF )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:766:2: iv_ruleAtom= ruleAtom EOF
+            {
+             newCompositeNode(grammarAccess.getAtomRule()); 
+            pushFollow(FOLLOW_ruleAtom_in_entryRuleAtom1779);
+            iv_ruleAtom=ruleAtom();
+
+            state._fsp--;
+
+             current =iv_ruleAtom; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleAtom1789); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleAtom"
+
+
+    // $ANTLR start "ruleAtom"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:773:1: ruleAtom returns [EObject current=null] : (this_Literal_0= ruleLiteral | (otherlv_1= '(' this_RootExpression_2= ruleRootExpression otherlv_3= ')' ) | this_Function_4= ruleFunction ) ;
+    public final EObject ruleAtom() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_1=null;
+        Token otherlv_3=null;
+        EObject this_Literal_0 = null;
+
+        EObject this_RootExpression_2 = null;
+
+        EObject this_Function_4 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:776:28: ( (this_Literal_0= ruleLiteral | (otherlv_1= '(' this_RootExpression_2= ruleRootExpression otherlv_3= ')' ) | this_Function_4= ruleFunction ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:777:1: (this_Literal_0= ruleLiteral | (otherlv_1= '(' this_RootExpression_2= ruleRootExpression otherlv_3= ')' ) | this_Function_4= ruleFunction )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:777:1: (this_Literal_0= ruleLiteral | (otherlv_1= '(' this_RootExpression_2= ruleRootExpression otherlv_3= ')' ) | this_Function_4= ruleFunction )
+            int alt12=3;
+            switch ( input.LA(1) ) {
+            case RULE_INT:
+            case RULE_STRING:
+            case 11:
+            case 13:
+            case 14:
+                {
+                alt12=1;
+                }
+                break;
+            case RULE_ID:
+                {
+                int LA12_2 = input.LA(2);
+
+                if ( (LA12_2==19) ) {
+                    alt12=3;
+                }
+                else if ( (LA12_2==EOF||LA12_2==11||(LA12_2>=15 && LA12_2<=16)||LA12_2==18||(LA12_2>=20 && LA12_2<=34)) ) {
+                    alt12=1;
+                }
+                else {
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 12, 2, input);
+
+                    throw nvae;
+                }
+                }
+                break;
+            case 19:
+                {
+                alt12=2;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 12, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt12) {
+                case 1 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:778:5: this_Literal_0= ruleLiteral
+                    {
+                     
+                            newCompositeNode(grammarAccess.getAtomAccess().getLiteralParserRuleCall_0()); 
+                        
+                    pushFollow(FOLLOW_ruleLiteral_in_ruleAtom1836);
+                    this_Literal_0=ruleLiteral();
+
+                    state._fsp--;
+
+                     
+                            current = this_Literal_0; 
+                            afterParserOrEnumRuleCall();
+                        
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:787:6: (otherlv_1= '(' this_RootExpression_2= ruleRootExpression otherlv_3= ')' )
+                    {
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:787:6: (otherlv_1= '(' this_RootExpression_2= ruleRootExpression otherlv_3= ')' )
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:787:8: otherlv_1= '(' this_RootExpression_2= ruleRootExpression otherlv_3= ')'
+                    {
+                    otherlv_1=(Token)match(input,19,FOLLOW_19_in_ruleAtom1854); 
+
+                        	newLeafNode(otherlv_1, grammarAccess.getAtomAccess().getLeftParenthesisKeyword_1_0());
+                        
+                     
+                            newCompositeNode(grammarAccess.getAtomAccess().getRootExpressionParserRuleCall_1_1()); 
+                        
+                    pushFollow(FOLLOW_ruleRootExpression_in_ruleAtom1876);
+                    this_RootExpression_2=ruleRootExpression();
+
+                    state._fsp--;
+
+                     
+                            current = this_RootExpression_2; 
+                            afterParserOrEnumRuleCall();
+                        
+                    otherlv_3=(Token)match(input,20,FOLLOW_20_in_ruleAtom1887); 
+
+                        	newLeafNode(otherlv_3, grammarAccess.getAtomAccess().getRightParenthesisKeyword_1_2());
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:806:5: this_Function_4= ruleFunction
+                    {
+                     
+                            newCompositeNode(grammarAccess.getAtomAccess().getFunctionParserRuleCall_2()); 
+                        
+                    pushFollow(FOLLOW_ruleFunction_in_ruleAtom1916);
+                    this_Function_4=ruleFunction();
+
+                    state._fsp--;
+
+                     
+                            current = this_Function_4; 
+                            afterParserOrEnumRuleCall();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleAtom"
+
+
+    // $ANTLR start "entryRuleFunction"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:822:1: entryRuleFunction returns [EObject current=null] : iv_ruleFunction= ruleFunction EOF ;
+    public final EObject entryRuleFunction() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleFunction = null;
+
+
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:823:2: (iv_ruleFunction= ruleFunction EOF )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:824:2: iv_ruleFunction= ruleFunction EOF
+            {
+             newCompositeNode(grammarAccess.getFunctionRule()); 
+            pushFollow(FOLLOW_ruleFunction_in_entryRuleFunction1951);
+            iv_ruleFunction=ruleFunction();
+
+            state._fsp--;
+
+             current =iv_ruleFunction; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleFunction1961); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleFunction"
+
+
+    // $ANTLR start "ruleFunction"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:831:1: ruleFunction returns [EObject current=null] : ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '(' ( ( (lv_parameters_2_0= ruleRootExpression ) ) (otherlv_3= ',' ( (lv_parameters_4_0= ruleRootExpression ) ) )* )? otherlv_5= ')' ) ;
+    public final EObject ruleFunction() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_name_0_0=null;
+        Token otherlv_1=null;
+        Token otherlv_3=null;
+        Token otherlv_5=null;
+        EObject lv_parameters_2_0 = null;
+
+        EObject lv_parameters_4_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:834:28: ( ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '(' ( ( (lv_parameters_2_0= ruleRootExpression ) ) (otherlv_3= ',' ( (lv_parameters_4_0= ruleRootExpression ) ) )* )? otherlv_5= ')' ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:835:1: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '(' ( ( (lv_parameters_2_0= ruleRootExpression ) ) (otherlv_3= ',' ( (lv_parameters_4_0= ruleRootExpression ) ) )* )? otherlv_5= ')' )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:835:1: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '(' ( ( (lv_parameters_2_0= ruleRootExpression ) ) (otherlv_3= ',' ( (lv_parameters_4_0= ruleRootExpression ) ) )* )? otherlv_5= ')' )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:835:2: ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '(' ( ( (lv_parameters_2_0= ruleRootExpression ) ) (otherlv_3= ',' ( (lv_parameters_4_0= ruleRootExpression ) ) )* )? otherlv_5= ')'
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:835:2: ( (lv_name_0_0= RULE_ID ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:836:1: (lv_name_0_0= RULE_ID )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:836:1: (lv_name_0_0= RULE_ID )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:837:3: lv_name_0_0= RULE_ID
+            {
+            lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleFunction2003); 
+
+            			newLeafNode(lv_name_0_0, grammarAccess.getFunctionAccess().getNameIDTerminalRuleCall_0_0()); 
+            		
+
+            	        if (current==null) {
+            	            current = createModelElement(grammarAccess.getFunctionRule());
+            	        }
+                   		setWithLastConsumed(
+                   			current, 
+                   			"name",
+                    		lv_name_0_0, 
+                    		"ID");
+            	    
+
+            }
+
+
+            }
+
+            otherlv_1=(Token)match(input,19,FOLLOW_19_in_ruleFunction2020); 
+
+                	newLeafNode(otherlv_1, grammarAccess.getFunctionAccess().getLeftParenthesisKeyword_1());
+                
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:857:1: ( ( (lv_parameters_2_0= ruleRootExpression ) ) (otherlv_3= ',' ( (lv_parameters_4_0= ruleRootExpression ) ) )* )?
+            int alt14=2;
+            int LA14_0 = input.LA(1);
+
+            if ( ((LA14_0>=RULE_INT && LA14_0<=RULE_ID)||LA14_0==11||(LA14_0>=13 && LA14_0<=14)||LA14_0==17||LA14_0==19) ) {
+                alt14=1;
+            }
+            switch (alt14) {
+                case 1 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:857:2: ( (lv_parameters_2_0= ruleRootExpression ) ) (otherlv_3= ',' ( (lv_parameters_4_0= ruleRootExpression ) ) )*
+                    {
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:857:2: ( (lv_parameters_2_0= ruleRootExpression ) )
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:858:1: (lv_parameters_2_0= ruleRootExpression )
+                    {
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:858:1: (lv_parameters_2_0= ruleRootExpression )
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:859:3: lv_parameters_2_0= ruleRootExpression
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getFunctionAccess().getParametersRootExpressionParserRuleCall_2_0_0()); 
+                    	    
+                    pushFollow(FOLLOW_ruleRootExpression_in_ruleFunction2042);
+                    lv_parameters_2_0=ruleRootExpression();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getFunctionRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"parameters",
+                            		lv_parameters_2_0, 
+                            		"RootExpression");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:875:2: (otherlv_3= ',' ( (lv_parameters_4_0= ruleRootExpression ) ) )*
+                    loop13:
+                    do {
+                        int alt13=2;
+                        int LA13_0 = input.LA(1);
+
+                        if ( (LA13_0==21) ) {
+                            alt13=1;
+                        }
+
+
+                        switch (alt13) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:875:4: otherlv_3= ',' ( (lv_parameters_4_0= ruleRootExpression ) )
+                    	    {
+                    	    otherlv_3=(Token)match(input,21,FOLLOW_21_in_ruleFunction2055); 
+
+                    	        	newLeafNode(otherlv_3, grammarAccess.getFunctionAccess().getCommaKeyword_2_1_0());
+                    	        
+                    	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:879:1: ( (lv_parameters_4_0= ruleRootExpression ) )
+                    	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:880:1: (lv_parameters_4_0= ruleRootExpression )
+                    	    {
+                    	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:880:1: (lv_parameters_4_0= ruleRootExpression )
+                    	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:881:3: lv_parameters_4_0= ruleRootExpression
+                    	    {
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getFunctionAccess().getParametersRootExpressionParserRuleCall_2_1_1_0()); 
+                    	    	    
+                    	    pushFollow(FOLLOW_ruleRootExpression_in_ruleFunction2076);
+                    	    lv_parameters_4_0=ruleRootExpression();
+
+                    	    state._fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = createModelElementForParent(grammarAccess.getFunctionRule());
+                    	    	        }
+                    	           		add(
+                    	           			current, 
+                    	           			"parameters",
+                    	            		lv_parameters_4_0, 
+                    	            		"RootExpression");
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop13;
+                        }
+                    } while (true);
+
+
+                    }
+                    break;
+
+            }
+
+            otherlv_5=(Token)match(input,20,FOLLOW_20_in_ruleFunction2092); 
+
+                	newLeafNode(otherlv_5, grammarAccess.getFunctionAccess().getRightParenthesisKeyword_3());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleFunction"
+
+
+    // $ANTLR start "entryRuleLiteral"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:909:1: entryRuleLiteral returns [EObject current=null] : iv_ruleLiteral= ruleLiteral EOF ;
+    public final EObject entryRuleLiteral() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleLiteral = null;
+
+
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:910:2: (iv_ruleLiteral= ruleLiteral EOF )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:911:2: iv_ruleLiteral= ruleLiteral EOF
+            {
+             newCompositeNode(grammarAccess.getLiteralRule()); 
+            pushFollow(FOLLOW_ruleLiteral_in_entryRuleLiteral2128);
+            iv_ruleLiteral=ruleLiteral();
+
+            state._fsp--;
+
+             current =iv_ruleLiteral; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleLiteral2138); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleLiteral"
+
+
+    // $ANTLR start "ruleLiteral"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:918:1: ruleLiteral returns [EObject current=null] : (this_NumberLiteral_0= ruleNumberLiteral | this_BooleanLiteral_1= ruleBooleanLiteral | this_FormalParameter_2= ruleFormalParameter ) ;
+    public final EObject ruleLiteral() throws RecognitionException {
+        EObject current = null;
+
+        EObject this_NumberLiteral_0 = null;
+
+        EObject this_BooleanLiteral_1 = null;
+
+        EObject this_FormalParameter_2 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:921:28: ( (this_NumberLiteral_0= ruleNumberLiteral | this_BooleanLiteral_1= ruleBooleanLiteral | this_FormalParameter_2= ruleFormalParameter ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:922:1: (this_NumberLiteral_0= ruleNumberLiteral | this_BooleanLiteral_1= ruleBooleanLiteral | this_FormalParameter_2= ruleFormalParameter )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:922:1: (this_NumberLiteral_0= ruleNumberLiteral | this_BooleanLiteral_1= ruleBooleanLiteral | this_FormalParameter_2= ruleFormalParameter )
+            int alt15=3;
+            switch ( input.LA(1) ) {
+            case RULE_INT:
+            case 11:
+                {
+                alt15=1;
+                }
+                break;
+            case 13:
+            case 14:
+                {
+                alt15=2;
+                }
+                break;
+            case RULE_STRING:
+            case RULE_ID:
+                {
+                alt15=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 15, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt15) {
+                case 1 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:923:5: this_NumberLiteral_0= ruleNumberLiteral
+                    {
+                     
+                            newCompositeNode(grammarAccess.getLiteralAccess().getNumberLiteralParserRuleCall_0()); 
+                        
+                    pushFollow(FOLLOW_ruleNumberLiteral_in_ruleLiteral2185);
+                    this_NumberLiteral_0=ruleNumberLiteral();
+
+                    state._fsp--;
+
+                     
+                            current = this_NumberLiteral_0; 
+                            afterParserOrEnumRuleCall();
+                        
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:933:5: this_BooleanLiteral_1= ruleBooleanLiteral
+                    {
+                     
+                            newCompositeNode(grammarAccess.getLiteralAccess().getBooleanLiteralParserRuleCall_1()); 
+                        
+                    pushFollow(FOLLOW_ruleBooleanLiteral_in_ruleLiteral2212);
+                    this_BooleanLiteral_1=ruleBooleanLiteral();
+
+                    state._fsp--;
+
+                     
+                            current = this_BooleanLiteral_1; 
+                            afterParserOrEnumRuleCall();
+                        
+
+                    }
+                    break;
+                case 3 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:943:5: this_FormalParameter_2= ruleFormalParameter
+                    {
+                     
+                            newCompositeNode(grammarAccess.getLiteralAccess().getFormalParameterParserRuleCall_2()); 
+                        
+                    pushFollow(FOLLOW_ruleFormalParameter_in_ruleLiteral2239);
+                    this_FormalParameter_2=ruleFormalParameter();
+
+                    state._fsp--;
+
+                     
+                            current = this_FormalParameter_2; 
+                            afterParserOrEnumRuleCall();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleLiteral"
+
+
+    // $ANTLR start "entryRuleFormalParameter"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:959:1: entryRuleFormalParameter returns [EObject current=null] : iv_ruleFormalParameter= ruleFormalParameter EOF ;
+    public final EObject entryRuleFormalParameter() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleFormalParameter = null;
+
+
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:960:2: (iv_ruleFormalParameter= ruleFormalParameter EOF )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:961:2: iv_ruleFormalParameter= ruleFormalParameter EOF
+            {
+             newCompositeNode(grammarAccess.getFormalParameterRule()); 
+            pushFollow(FOLLOW_ruleFormalParameter_in_entryRuleFormalParameter2274);
+            iv_ruleFormalParameter=ruleFormalParameter();
+
+            state._fsp--;
+
+             current =iv_ruleFormalParameter; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleFormalParameter2284); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleFormalParameter"
+
+
+    // $ANTLR start "ruleFormalParameter"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:968:1: ruleFormalParameter returns [EObject current=null] : ( (lv_value_0_0= ruleEString ) ) ;
+    public final EObject ruleFormalParameter() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_value_0_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:971:28: ( ( (lv_value_0_0= ruleEString ) ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:972:1: ( (lv_value_0_0= ruleEString ) )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:972:1: ( (lv_value_0_0= ruleEString ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:973:1: (lv_value_0_0= ruleEString )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:973:1: (lv_value_0_0= ruleEString )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:974:3: lv_value_0_0= ruleEString
+            {
+             
+            	        newCompositeNode(grammarAccess.getFormalParameterAccess().getValueEStringParserRuleCall_0()); 
+            	    
+            pushFollow(FOLLOW_ruleEString_in_ruleFormalParameter2329);
+            lv_value_0_0=ruleEString();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getFormalParameterRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"value",
+                    		lv_value_0_0, 
+                    		"EString");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleFormalParameter"
+
+
+    // $ANTLR start "entryRuleBooleanLiteral"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:998:1: entryRuleBooleanLiteral returns [EObject current=null] : iv_ruleBooleanLiteral= ruleBooleanLiteral EOF ;
+    public final EObject entryRuleBooleanLiteral() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleBooleanLiteral = null;
+
+
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:999:2: (iv_ruleBooleanLiteral= ruleBooleanLiteral EOF )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1000:2: iv_ruleBooleanLiteral= ruleBooleanLiteral EOF
+            {
+             newCompositeNode(grammarAccess.getBooleanLiteralRule()); 
+            pushFollow(FOLLOW_ruleBooleanLiteral_in_entryRuleBooleanLiteral2364);
+            iv_ruleBooleanLiteral=ruleBooleanLiteral();
+
+            state._fsp--;
+
+             current =iv_ruleBooleanLiteral; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleBooleanLiteral2374); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleBooleanLiteral"
+
+
+    // $ANTLR start "ruleBooleanLiteral"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1007:1: ruleBooleanLiteral returns [EObject current=null] : ( (lv_value_0_0= ruleEBoolean ) ) ;
+    public final EObject ruleBooleanLiteral() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_value_0_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1010:28: ( ( (lv_value_0_0= ruleEBoolean ) ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1011:1: ( (lv_value_0_0= ruleEBoolean ) )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1011:1: ( (lv_value_0_0= ruleEBoolean ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1012:1: (lv_value_0_0= ruleEBoolean )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1012:1: (lv_value_0_0= ruleEBoolean )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1013:3: lv_value_0_0= ruleEBoolean
+            {
+             
+            	        newCompositeNode(grammarAccess.getBooleanLiteralAccess().getValueEBooleanParserRuleCall_0()); 
+            	    
+            pushFollow(FOLLOW_ruleEBoolean_in_ruleBooleanLiteral2419);
+            lv_value_0_0=ruleEBoolean();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getBooleanLiteralRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"value",
+                    		lv_value_0_0, 
+                    		"EBoolean");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleBooleanLiteral"
+
+
+    // $ANTLR start "entryRuleNumberLiteral"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1037:1: entryRuleNumberLiteral returns [EObject current=null] : iv_ruleNumberLiteral= ruleNumberLiteral EOF ;
+    public final EObject entryRuleNumberLiteral() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleNumberLiteral = null;
+
+
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1038:2: (iv_ruleNumberLiteral= ruleNumberLiteral EOF )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1039:2: iv_ruleNumberLiteral= ruleNumberLiteral EOF
+            {
+             newCompositeNode(grammarAccess.getNumberLiteralRule()); 
+            pushFollow(FOLLOW_ruleNumberLiteral_in_entryRuleNumberLiteral2454);
+            iv_ruleNumberLiteral=ruleNumberLiteral();
+
+            state._fsp--;
+
+             current =iv_ruleNumberLiteral; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleNumberLiteral2464); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleNumberLiteral"
+
+
+    // $ANTLR start "ruleNumberLiteral"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1046:1: ruleNumberLiteral returns [EObject current=null] : (this_IntLiteral_0= ruleIntLiteral | this_DoubleLiteral_1= ruleDoubleLiteral ) ;
+    public final EObject ruleNumberLiteral() throws RecognitionException {
+        EObject current = null;
+
+        EObject this_IntLiteral_0 = null;
+
+        EObject this_DoubleLiteral_1 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1049:28: ( (this_IntLiteral_0= ruleIntLiteral | this_DoubleLiteral_1= ruleDoubleLiteral ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1050:1: (this_IntLiteral_0= ruleIntLiteral | this_DoubleLiteral_1= ruleDoubleLiteral )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1050:1: (this_IntLiteral_0= ruleIntLiteral | this_DoubleLiteral_1= ruleDoubleLiteral )
+            int alt16=2;
+            int LA16_0 = input.LA(1);
+
+            if ( (LA16_0==11) ) {
+                int LA16_1 = input.LA(2);
+
+                if ( (LA16_1==RULE_INT) ) {
+                    int LA16_2 = input.LA(3);
+
+                    if ( (LA16_2==12) ) {
+                        alt16=2;
+                    }
+                    else if ( (LA16_2==EOF||LA16_2==11||(LA16_2>=15 && LA16_2<=16)||LA16_2==18||(LA16_2>=20 && LA16_2<=34)) ) {
+                        alt16=1;
+                    }
+                    else {
+                        NoViableAltException nvae =
+                            new NoViableAltException("", 16, 2, input);
+
+                        throw nvae;
+                    }
+                }
+                else {
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 16, 1, input);
+
+                    throw nvae;
+                }
+            }
+            else if ( (LA16_0==RULE_INT) ) {
+                int LA16_2 = input.LA(2);
+
+                if ( (LA16_2==12) ) {
+                    alt16=2;
+                }
+                else if ( (LA16_2==EOF||LA16_2==11||(LA16_2>=15 && LA16_2<=16)||LA16_2==18||(LA16_2>=20 && LA16_2<=34)) ) {
+                    alt16=1;
+                }
+                else {
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 16, 2, input);
+
+                    throw nvae;
+                }
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 16, 0, input);
+
+                throw nvae;
+            }
+            switch (alt16) {
+                case 1 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1051:5: this_IntLiteral_0= ruleIntLiteral
+                    {
+                     
+                            newCompositeNode(grammarAccess.getNumberLiteralAccess().getIntLiteralParserRuleCall_0()); 
+                        
+                    pushFollow(FOLLOW_ruleIntLiteral_in_ruleNumberLiteral2511);
+                    this_IntLiteral_0=ruleIntLiteral();
+
+                    state._fsp--;
+
+                     
+                            current = this_IntLiteral_0; 
+                            afterParserOrEnumRuleCall();
+                        
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1061:5: this_DoubleLiteral_1= ruleDoubleLiteral
+                    {
+                     
+                            newCompositeNode(grammarAccess.getNumberLiteralAccess().getDoubleLiteralParserRuleCall_1()); 
+                        
+                    pushFollow(FOLLOW_ruleDoubleLiteral_in_ruleNumberLiteral2538);
+                    this_DoubleLiteral_1=ruleDoubleLiteral();
+
+                    state._fsp--;
+
+                     
+                            current = this_DoubleLiteral_1; 
+                            afterParserOrEnumRuleCall();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleNumberLiteral"
+
+
+    // $ANTLR start "entryRuleIntLiteral"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1077:1: entryRuleIntLiteral returns [EObject current=null] : iv_ruleIntLiteral= ruleIntLiteral EOF ;
+    public final EObject entryRuleIntLiteral() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleIntLiteral = null;
+
+
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1078:2: (iv_ruleIntLiteral= ruleIntLiteral EOF )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1079:2: iv_ruleIntLiteral= ruleIntLiteral EOF
+            {
+             newCompositeNode(grammarAccess.getIntLiteralRule()); 
+            pushFollow(FOLLOW_ruleIntLiteral_in_entryRuleIntLiteral2573);
+            iv_ruleIntLiteral=ruleIntLiteral();
+
+            state._fsp--;
+
+             current =iv_ruleIntLiteral; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleIntLiteral2583); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleIntLiteral"
+
+
+    // $ANTLR start "ruleIntLiteral"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1086:1: ruleIntLiteral returns [EObject current=null] : ( (lv_value_0_0= ruleInteger ) ) ;
+    public final EObject ruleIntLiteral() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_value_0_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1089:28: ( ( (lv_value_0_0= ruleInteger ) ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1090:1: ( (lv_value_0_0= ruleInteger ) )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1090:1: ( (lv_value_0_0= ruleInteger ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1091:1: (lv_value_0_0= ruleInteger )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1091:1: (lv_value_0_0= ruleInteger )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1092:3: lv_value_0_0= ruleInteger
+            {
+             
+            	        newCompositeNode(grammarAccess.getIntLiteralAccess().getValueIntegerParserRuleCall_0()); 
+            	    
+            pushFollow(FOLLOW_ruleInteger_in_ruleIntLiteral2628);
+            lv_value_0_0=ruleInteger();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getIntLiteralRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"value",
+                    		lv_value_0_0, 
+                    		"Integer");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleIntLiteral"
+
+
+    // $ANTLR start "entryRuleDoubleLiteral"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1116:1: entryRuleDoubleLiteral returns [EObject current=null] : iv_ruleDoubleLiteral= ruleDoubleLiteral EOF ;
+    public final EObject entryRuleDoubleLiteral() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleDoubleLiteral = null;
+
+
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1117:2: (iv_ruleDoubleLiteral= ruleDoubleLiteral EOF )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1118:2: iv_ruleDoubleLiteral= ruleDoubleLiteral EOF
+            {
+             newCompositeNode(grammarAccess.getDoubleLiteralRule()); 
+            pushFollow(FOLLOW_ruleDoubleLiteral_in_entryRuleDoubleLiteral2663);
+            iv_ruleDoubleLiteral=ruleDoubleLiteral();
+
+            state._fsp--;
+
+             current =iv_ruleDoubleLiteral; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleDoubleLiteral2673); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleDoubleLiteral"
+
+
+    // $ANTLR start "ruleDoubleLiteral"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1125:1: ruleDoubleLiteral returns [EObject current=null] : ( (lv_value_0_0= ruleDouble ) ) ;
+    public final EObject ruleDoubleLiteral() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_value_0_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1128:28: ( ( (lv_value_0_0= ruleDouble ) ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1129:1: ( (lv_value_0_0= ruleDouble ) )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1129:1: ( (lv_value_0_0= ruleDouble ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1130:1: (lv_value_0_0= ruleDouble )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1130:1: (lv_value_0_0= ruleDouble )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1131:3: lv_value_0_0= ruleDouble
+            {
+             
+            	        newCompositeNode(grammarAccess.getDoubleLiteralAccess().getValueDoubleParserRuleCall_0()); 
+            	    
+            pushFollow(FOLLOW_ruleDouble_in_ruleDoubleLiteral2718);
+            lv_value_0_0=ruleDouble();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getDoubleLiteralRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"value",
+                    		lv_value_0_0, 
+                    		"Double");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleDoubleLiteral"
+
+
+    // $ANTLR start "ruleProductOperation"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1155:1: ruleProductOperation returns [Enumerator current=null] : ( (enumLiteral_0= '*' ) | (enumLiteral_1= '/' ) | (enumLiteral_2= '%' ) ) ;
+    public final Enumerator ruleProductOperation() throws RecognitionException {
+        Enumerator current = null;
+
+        Token enumLiteral_0=null;
+        Token enumLiteral_1=null;
+        Token enumLiteral_2=null;
+
+         enterRule(); 
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1157:28: ( ( (enumLiteral_0= '*' ) | (enumLiteral_1= '/' ) | (enumLiteral_2= '%' ) ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1158:1: ( (enumLiteral_0= '*' ) | (enumLiteral_1= '/' ) | (enumLiteral_2= '%' ) )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1158:1: ( (enumLiteral_0= '*' ) | (enumLiteral_1= '/' ) | (enumLiteral_2= '%' ) )
+            int alt17=3;
+            switch ( input.LA(1) ) {
+            case 22:
+                {
+                alt17=1;
+                }
+                break;
+            case 23:
+                {
+                alt17=2;
+                }
+                break;
+            case 24:
+                {
+                alt17=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 17, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt17) {
+                case 1 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1158:2: (enumLiteral_0= '*' )
+                    {
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1158:2: (enumLiteral_0= '*' )
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1158:4: enumLiteral_0= '*'
+                    {
+                    enumLiteral_0=(Token)match(input,22,FOLLOW_22_in_ruleProductOperation2767); 
+
+                            current = grammarAccess.getProductOperationAccess().getMULTEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_0, grammarAccess.getProductOperationAccess().getMULTEnumLiteralDeclaration_0()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1164:6: (enumLiteral_1= '/' )
+                    {
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1164:6: (enumLiteral_1= '/' )
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1164:8: enumLiteral_1= '/'
+                    {
+                    enumLiteral_1=(Token)match(input,23,FOLLOW_23_in_ruleProductOperation2784); 
+
+                            current = grammarAccess.getProductOperationAccess().getDIVEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_1, grammarAccess.getProductOperationAccess().getDIVEnumLiteralDeclaration_1()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1170:6: (enumLiteral_2= '%' )
+                    {
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1170:6: (enumLiteral_2= '%' )
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1170:8: enumLiteral_2= '%'
+                    {
+                    enumLiteral_2=(Token)match(input,24,FOLLOW_24_in_ruleProductOperation2801); 
+
+                            current = grammarAccess.getProductOperationAccess().getMODEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_2, grammarAccess.getProductOperationAccess().getMODEnumLiteralDeclaration_2()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleProductOperation"
+
+
+    // $ANTLR start "ruleTermOperation"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1180:1: ruleTermOperation returns [Enumerator current=null] : ( (enumLiteral_0= '+' ) | (enumLiteral_1= '-' ) ) ;
+    public final Enumerator ruleTermOperation() throws RecognitionException {
+        Enumerator current = null;
+
+        Token enumLiteral_0=null;
+        Token enumLiteral_1=null;
+
+         enterRule(); 
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1182:28: ( ( (enumLiteral_0= '+' ) | (enumLiteral_1= '-' ) ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1183:1: ( (enumLiteral_0= '+' ) | (enumLiteral_1= '-' ) )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1183:1: ( (enumLiteral_0= '+' ) | (enumLiteral_1= '-' ) )
+            int alt18=2;
+            int LA18_0 = input.LA(1);
+
+            if ( (LA18_0==25) ) {
+                alt18=1;
+            }
+            else if ( (LA18_0==11) ) {
+                alt18=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 18, 0, input);
+
+                throw nvae;
+            }
+            switch (alt18) {
+                case 1 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1183:2: (enumLiteral_0= '+' )
+                    {
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1183:2: (enumLiteral_0= '+' )
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1183:4: enumLiteral_0= '+'
+                    {
+                    enumLiteral_0=(Token)match(input,25,FOLLOW_25_in_ruleTermOperation2846); 
+
+                            current = grammarAccess.getTermOperationAccess().getADDEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_0, grammarAccess.getTermOperationAccess().getADDEnumLiteralDeclaration_0()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1189:6: (enumLiteral_1= '-' )
+                    {
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1189:6: (enumLiteral_1= '-' )
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1189:8: enumLiteral_1= '-'
+                    {
+                    enumLiteral_1=(Token)match(input,11,FOLLOW_11_in_ruleTermOperation2863); 
+
+                            current = grammarAccess.getTermOperationAccess().getSUBEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_1, grammarAccess.getTermOperationAccess().getSUBEnumLiteralDeclaration_1()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleTermOperation"
+
+
+    // $ANTLR start "ruleCompareOperation"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1199:1: ruleCompareOperation returns [Enumerator current=null] : ( (enumLiteral_0= '>' ) | (enumLiteral_1= '<' ) | (enumLiteral_2= '=' ) | (enumLiteral_3= '!=' ) | (enumLiteral_4= '<=' ) | (enumLiteral_5= '>=' ) ) ;
+    public final Enumerator ruleCompareOperation() throws RecognitionException {
+        Enumerator current = null;
+
+        Token enumLiteral_0=null;
+        Token enumLiteral_1=null;
+        Token enumLiteral_2=null;
+        Token enumLiteral_3=null;
+        Token enumLiteral_4=null;
+        Token enumLiteral_5=null;
+
+         enterRule(); 
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1201:28: ( ( (enumLiteral_0= '>' ) | (enumLiteral_1= '<' ) | (enumLiteral_2= '=' ) | (enumLiteral_3= '!=' ) | (enumLiteral_4= '<=' ) | (enumLiteral_5= '>=' ) ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1202:1: ( (enumLiteral_0= '>' ) | (enumLiteral_1= '<' ) | (enumLiteral_2= '=' ) | (enumLiteral_3= '!=' ) | (enumLiteral_4= '<=' ) | (enumLiteral_5= '>=' ) )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1202:1: ( (enumLiteral_0= '>' ) | (enumLiteral_1= '<' ) | (enumLiteral_2= '=' ) | (enumLiteral_3= '!=' ) | (enumLiteral_4= '<=' ) | (enumLiteral_5= '>=' ) )
+            int alt19=6;
+            switch ( input.LA(1) ) {
+            case 26:
+                {
+                alt19=1;
+                }
+                break;
+            case 27:
+                {
+                alt19=2;
+                }
+                break;
+            case 28:
+                {
+                alt19=3;
+                }
+                break;
+            case 29:
+                {
+                alt19=4;
+                }
+                break;
+            case 30:
+                {
+                alt19=5;
+                }
+                break;
+            case 31:
+                {
+                alt19=6;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 19, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt19) {
+                case 1 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1202:2: (enumLiteral_0= '>' )
+                    {
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1202:2: (enumLiteral_0= '>' )
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1202:4: enumLiteral_0= '>'
+                    {
+                    enumLiteral_0=(Token)match(input,26,FOLLOW_26_in_ruleCompareOperation2908); 
+
+                            current = grammarAccess.getCompareOperationAccess().getGREATEREnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_0, grammarAccess.getCompareOperationAccess().getGREATEREnumLiteralDeclaration_0()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1208:6: (enumLiteral_1= '<' )
+                    {
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1208:6: (enumLiteral_1= '<' )
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1208:8: enumLiteral_1= '<'
+                    {
+                    enumLiteral_1=(Token)match(input,27,FOLLOW_27_in_ruleCompareOperation2925); 
+
+                            current = grammarAccess.getCompareOperationAccess().getLESSEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_1, grammarAccess.getCompareOperationAccess().getLESSEnumLiteralDeclaration_1()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1214:6: (enumLiteral_2= '=' )
+                    {
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1214:6: (enumLiteral_2= '=' )
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1214:8: enumLiteral_2= '='
+                    {
+                    enumLiteral_2=(Token)match(input,28,FOLLOW_28_in_ruleCompareOperation2942); 
+
+                            current = grammarAccess.getCompareOperationAccess().getEQUALSEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_2, grammarAccess.getCompareOperationAccess().getEQUALSEnumLiteralDeclaration_2()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1220:6: (enumLiteral_3= '!=' )
+                    {
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1220:6: (enumLiteral_3= '!=' )
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1220:8: enumLiteral_3= '!='
+                    {
+                    enumLiteral_3=(Token)match(input,29,FOLLOW_29_in_ruleCompareOperation2959); 
+
+                            current = grammarAccess.getCompareOperationAccess().getNOTEQUALEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_3, grammarAccess.getCompareOperationAccess().getNOTEQUALEnumLiteralDeclaration_3()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 5 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1226:6: (enumLiteral_4= '<=' )
+                    {
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1226:6: (enumLiteral_4= '<=' )
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1226:8: enumLiteral_4= '<='
+                    {
+                    enumLiteral_4=(Token)match(input,30,FOLLOW_30_in_ruleCompareOperation2976); 
+
+                            current = grammarAccess.getCompareOperationAccess().getLESSEQUALEnumLiteralDeclaration_4().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_4, grammarAccess.getCompareOperationAccess().getLESSEQUALEnumLiteralDeclaration_4()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 6 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1232:6: (enumLiteral_5= '>=' )
+                    {
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1232:6: (enumLiteral_5= '>=' )
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1232:8: enumLiteral_5= '>='
+                    {
+                    enumLiteral_5=(Token)match(input,31,FOLLOW_31_in_ruleCompareOperation2993); 
+
+                            current = grammarAccess.getCompareOperationAccess().getGREATEREQUALEnumLiteralDeclaration_5().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_5, grammarAccess.getCompareOperationAccess().getGREATEREQUALEnumLiteralDeclaration_5()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleCompareOperation"
+
+
+    // $ANTLR start "ruleBooleanOperation"
+    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1242:1: ruleBooleanOperation returns [Enumerator current=null] : ( (enumLiteral_0= 'AND' ) | (enumLiteral_1= 'OR' ) | (enumLiteral_2= 'XOR' ) ) ;
+    public final Enumerator ruleBooleanOperation() throws RecognitionException {
+        Enumerator current = null;
+
+        Token enumLiteral_0=null;
+        Token enumLiteral_1=null;
+        Token enumLiteral_2=null;
+
+         enterRule(); 
+        try {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1244:28: ( ( (enumLiteral_0= 'AND' ) | (enumLiteral_1= 'OR' ) | (enumLiteral_2= 'XOR' ) ) )
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1245:1: ( (enumLiteral_0= 'AND' ) | (enumLiteral_1= 'OR' ) | (enumLiteral_2= 'XOR' ) )
+            {
+            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1245:1: ( (enumLiteral_0= 'AND' ) | (enumLiteral_1= 'OR' ) | (enumLiteral_2= 'XOR' ) )
+            int alt20=3;
+            switch ( input.LA(1) ) {
+            case 32:
+                {
+                alt20=1;
+                }
+                break;
+            case 33:
+                {
+                alt20=2;
+                }
+                break;
+            case 34:
+                {
+                alt20=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 20, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt20) {
+                case 1 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1245:2: (enumLiteral_0= 'AND' )
+                    {
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1245:2: (enumLiteral_0= 'AND' )
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1245:4: enumLiteral_0= 'AND'
+                    {
+                    enumLiteral_0=(Token)match(input,32,FOLLOW_32_in_ruleBooleanOperation3038); 
+
+                            current = grammarAccess.getBooleanOperationAccess().getANDEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_0, grammarAccess.getBooleanOperationAccess().getANDEnumLiteralDeclaration_0()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1251:6: (enumLiteral_1= 'OR' )
+                    {
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1251:6: (enumLiteral_1= 'OR' )
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1251:8: enumLiteral_1= 'OR'
+                    {
+                    enumLiteral_1=(Token)match(input,33,FOLLOW_33_in_ruleBooleanOperation3055); 
+
+                            current = grammarAccess.getBooleanOperationAccess().getOREnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_1, grammarAccess.getBooleanOperationAccess().getOREnumLiteralDeclaration_1()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1257:6: (enumLiteral_2= 'XOR' )
+                    {
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1257:6: (enumLiteral_2= 'XOR' )
+                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1257:8: enumLiteral_2= 'XOR'
+                    {
+                    enumLiteral_2=(Token)match(input,34,FOLLOW_34_in_ruleBooleanOperation3072); 
+
+                            current = grammarAccess.getBooleanOperationAccess().getXOREnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_2, grammarAccess.getBooleanOperationAccess().getXOREnumLiteralDeclaration_2()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleBooleanOperation"
+
+    // Delegated rules
+
+
+ 
+
+    public static final BitSet FOLLOW_ruleModel_in_entryRuleModel75 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleModel85 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleIfElseExpression_in_ruleModel130 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDouble_in_entryRuleDouble166 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleDouble177 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_11_in_ruleDouble216 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_INT_in_ruleDouble233 = new BitSet(new long[]{0x0000000000001000L});
+    public static final BitSet FOLLOW_12_in_ruleDouble251 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_INT_in_ruleDouble266 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleInteger_in_entryRuleInteger312 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleInteger323 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_11_in_ruleInteger362 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_INT_in_ruleInteger379 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleEString_in_entryRuleEString425 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleEString436 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_STRING_in_ruleEString476 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleEString502 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleEBoolean_in_entryRuleEBoolean548 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleEBoolean559 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_ruleEBoolean597 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_14_in_ruleEBoolean616 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRootExpression_in_entryRuleRootExpression656 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRootExpression666 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleIfElseExpression_in_ruleRootExpression712 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleIfElseExpression_in_entryRuleIfElseExpression746 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleIfElseExpression756 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleBinaryBooleanExpression_in_ruleIfElseExpression803 = new BitSet(new long[]{0x0000000000008002L});
+    public static final BitSet FOLLOW_15_in_ruleIfElseExpression824 = new BitSet(new long[]{0x00000000000A6870L});
+    public static final BitSet FOLLOW_ruleIfElseExpression_in_ruleIfElseExpression845 = new BitSet(new long[]{0x0000000000010000L});
+    public static final BitSet FOLLOW_16_in_ruleIfElseExpression857 = new BitSet(new long[]{0x00000000000A6870L});
+    public static final BitSet FOLLOW_ruleIfElseExpression_in_ruleIfElseExpression878 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleBinaryBooleanExpression_in_entryRuleBinaryBooleanExpression916 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleBinaryBooleanExpression926 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleUnaryBooleanExpression_in_ruleBinaryBooleanExpression973 = new BitSet(new long[]{0x0000000700000002L});
+    public static final BitSet FOLLOW_ruleBooleanOperation_in_ruleBinaryBooleanExpression1003 = new BitSet(new long[]{0x00000000000A6870L});
+    public static final BitSet FOLLOW_ruleUnaryBooleanExpression_in_ruleBinaryBooleanExpression1024 = new BitSet(new long[]{0x0000000700000002L});
+    public static final BitSet FOLLOW_ruleUnaryBooleanExpression_in_entryRuleUnaryBooleanExpression1062 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleUnaryBooleanExpression1072 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_ruleUnaryBooleanExpression1110 = new BitSet(new long[]{0x00000000000A6870L});
+    public static final BitSet FOLLOW_ruleComparison_in_ruleUnaryBooleanExpression1132 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleComparison_in_ruleUnaryBooleanExpression1169 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleComparison_in_entryRuleComparison1204 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleComparison1214 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleTerm_in_ruleComparison1261 = new BitSet(new long[]{0x00000000FC000002L});
+    public static final BitSet FOLLOW_ruleCompareOperation_in_ruleComparison1291 = new BitSet(new long[]{0x00000000000A6870L});
+    public static final BitSet FOLLOW_ruleTerm_in_ruleComparison1312 = new BitSet(new long[]{0x00000000FC000002L});
+    public static final BitSet FOLLOW_ruleTerm_in_entryRuleTerm1350 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleTerm1360 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleProduct_in_ruleTerm1407 = new BitSet(new long[]{0x0000000002000802L});
+    public static final BitSet FOLLOW_ruleTermOperation_in_ruleTerm1437 = new BitSet(new long[]{0x00000000000A6870L});
+    public static final BitSet FOLLOW_ruleProduct_in_ruleTerm1458 = new BitSet(new long[]{0x0000000002000802L});
+    public static final BitSet FOLLOW_ruleProduct_in_entryRuleProduct1496 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleProduct1506 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulePower_in_ruleProduct1553 = new BitSet(new long[]{0x0000000001C00002L});
+    public static final BitSet FOLLOW_ruleProductOperation_in_ruleProduct1583 = new BitSet(new long[]{0x00000000000A6870L});
+    public static final BitSet FOLLOW_rulePower_in_ruleProduct1604 = new BitSet(new long[]{0x0000000001C00002L});
+    public static final BitSet FOLLOW_rulePower_in_entryRulePower1642 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulePower1652 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleAtom_in_rulePower1699 = new BitSet(new long[]{0x0000000000040002L});
+    public static final BitSet FOLLOW_18_in_rulePower1720 = new BitSet(new long[]{0x00000000000A6870L});
+    public static final BitSet FOLLOW_ruleAtom_in_rulePower1741 = new BitSet(new long[]{0x0000000000040002L});
+    public static final BitSet FOLLOW_ruleAtom_in_entryRuleAtom1779 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleAtom1789 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleLiteral_in_ruleAtom1836 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_19_in_ruleAtom1854 = new BitSet(new long[]{0x00000000000A6870L});
+    public static final BitSet FOLLOW_ruleRootExpression_in_ruleAtom1876 = new BitSet(new long[]{0x0000000000100000L});
+    public static final BitSet FOLLOW_20_in_ruleAtom1887 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleFunction_in_ruleAtom1916 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleFunction_in_entryRuleFunction1951 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleFunction1961 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleFunction2003 = new BitSet(new long[]{0x0000000000080000L});
+    public static final BitSet FOLLOW_19_in_ruleFunction2020 = new BitSet(new long[]{0x00000000001A6870L});
+    public static final BitSet FOLLOW_ruleRootExpression_in_ruleFunction2042 = new BitSet(new long[]{0x0000000000300000L});
+    public static final BitSet FOLLOW_21_in_ruleFunction2055 = new BitSet(new long[]{0x00000000000A6870L});
+    public static final BitSet FOLLOW_ruleRootExpression_in_ruleFunction2076 = new BitSet(new long[]{0x0000000000300000L});
+    public static final BitSet FOLLOW_20_in_ruleFunction2092 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleLiteral_in_entryRuleLiteral2128 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleLiteral2138 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleNumberLiteral_in_ruleLiteral2185 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleBooleanLiteral_in_ruleLiteral2212 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleFormalParameter_in_ruleLiteral2239 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleFormalParameter_in_entryRuleFormalParameter2274 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleFormalParameter2284 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleEString_in_ruleFormalParameter2329 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleBooleanLiteral_in_entryRuleBooleanLiteral2364 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleBooleanLiteral2374 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleEBoolean_in_ruleBooleanLiteral2419 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleNumberLiteral_in_entryRuleNumberLiteral2454 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleNumberLiteral2464 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleIntLiteral_in_ruleNumberLiteral2511 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDoubleLiteral_in_ruleNumberLiteral2538 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleIntLiteral_in_entryRuleIntLiteral2573 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleIntLiteral2583 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleInteger_in_ruleIntLiteral2628 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDoubleLiteral_in_entryRuleDoubleLiteral2663 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleDoubleLiteral2673 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDouble_in_ruleDoubleLiteral2718 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_22_in_ruleProductOperation2767 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_ruleProductOperation2784 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_24_in_ruleProductOperation2801 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_25_in_ruleTermOperation2846 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_11_in_ruleTermOperation2863 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_26_in_ruleCompareOperation2908 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_27_in_ruleCompareOperation2925 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_ruleCompareOperation2942 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_29_in_ruleCompareOperation2959 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_30_in_ruleCompareOperation2976 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_31_in_ruleCompareOperation2993 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_32_in_ruleBooleanOperation3038 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_33_in_ruleBooleanOperation3055 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_34_in_ruleBooleanOperation3072 = new BitSet(new long[]{0x0000000000000002L});
+
 }
\ No newline at end of file
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/serializer/MyDslSemanticSequencer.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/serializer/MyDslSemanticSequencer.java
index 434cb75e21f71afdc24b0999140c822b16a3d59d..d6fb536445af22a0201ac6f820f1a53482f64376 100644
--- a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/serializer/MyDslSemanticSequencer.java
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/serializer/MyDslSemanticSequencer.java
@@ -13,91 +13,533 @@ import org.eclipse.xtext.serializer.sequencer.ISemanticNodeProvider.INodesForEOb
 import org.eclipse.xtext.serializer.sequencer.ISemanticSequencer;
 import org.eclipse.xtext.serializer.sequencer.ITransientValueService;
 import org.eclipse.xtext.serializer.sequencer.ITransientValueService.ValueTransient;
-import org.xtext.example.mydsl.myDsl.Expression;
+import org.xtext.example.mydsl.myDsl.BinaryBooleanExpression;
+import org.xtext.example.mydsl.myDsl.BooleanLiteral;
+import org.xtext.example.mydsl.myDsl.Comparison;
+import org.xtext.example.mydsl.myDsl.DoubleLiteral;
+import org.xtext.example.mydsl.myDsl.FormalParameter;
+import org.xtext.example.mydsl.myDsl.Function;
+import org.xtext.example.mydsl.myDsl.IfElseExpression;
+import org.xtext.example.mydsl.myDsl.IntLiteral;
 import org.xtext.example.mydsl.myDsl.Model;
 import org.xtext.example.mydsl.myDsl.MyDslPackage;
+import org.xtext.example.mydsl.myDsl.Power;
+import org.xtext.example.mydsl.myDsl.Product;
 import org.xtext.example.mydsl.myDsl.Term;
+import org.xtext.example.mydsl.myDsl.UnaryBooleanExpression;
 import org.xtext.example.mydsl.services.MyDslGrammarAccess;
 
-@SuppressWarnings("all")
-public class MyDslSemanticSequencer extends AbstractDelegatingSemanticSequencer {
-
-	@Inject
-	private MyDslGrammarAccess grammarAccess;
-	
-	public void createSequence(EObject context, EObject semanticObject) {
-		if(semanticObject.eClass().getEPackage() == MyDslPackage.eINSTANCE) switch(semanticObject.eClass().getClassifierID()) {
-			case MyDslPackage.EXPRESSION:
-				if(context == grammarAccess.getArithmeticsRule() ||
-				   context == grammarAccess.getStringsRule() ||
-				   context == grammarAccess.getTermRule() ||
-				   context == grammarAccess.getTermAccess().getTermLeftAction_1_0() ||
-				   context == grammarAccess.getTypesRule()) {
-					sequence_Arithmetics_Strings(context, (Expression) semanticObject); 
-					return; 
-				}
-				else if(context == grammarAccess.getOperationsRule()) {
-					sequence_Operations(context, (Expression) semanticObject); 
-					return; 
-				}
-				else break;
-			case MyDslPackage.MODEL:
-				if(context == grammarAccess.getModelRule()) {
-					sequence_Model(context, (Model) semanticObject); 
-					return; 
-				}
-				else break;
-			case MyDslPackage.TERM:
-				if(context == grammarAccess.getTermRule() ||
-				   context == grammarAccess.getTermAccess().getTermLeftAction_1_0() ||
-				   context == grammarAccess.getTypesRule()) {
-					sequence_Term(context, (Term) semanticObject); 
-					return; 
-				}
-				else break;
-			}
-		if (errorAcceptor != null) errorAcceptor.accept(diagnosticProvider.createInvalidContextOrTypeDiagnostic(semanticObject, context));
-	}
-	
-	/**
-	 * Constraint:
-	 *     {Expression}
-	 */
-	protected void sequence_Arithmetics_Strings(EObject context, Expression semanticObject) {
-		genericSequencer.createSequence(context, semanticObject);
-	}
-	
-	
-	/**
-	 * Constraint:
-	 *     terms+=Term
-	 */
-	protected void sequence_Model(EObject context, Model semanticObject) {
-		genericSequencer.createSequence(context, semanticObject);
-	}
-	
-	
-	/**
-	 * Constraint:
-	 *     termOperations=OperationsType
-	 */
-	protected void sequence_Operations(EObject context, Expression semanticObject) {
-		if(errorAcceptor != null) {
-			if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.EXPRESSION__TERM_OPERATIONS) == ValueTransient.YES)
-				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.EXPRESSION__TERM_OPERATIONS));
-		}
-		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
-		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
-		feeder.accept(grammarAccess.getOperationsAccess().getTermOperationsOperationsTypeEnumRuleCall_0(), semanticObject.getTermOperations());
-		feeder.finish();
-	}
-	
-	
-	/**
-	 * Constraint:
-	 *     (left=Term_Term_1_0 Operations=Operations right=Types)
-	 */
-	protected void sequence_Term(EObject context, Term semanticObject) {
-		genericSequencer.createSequence(context, semanticObject);
-	}
-}
+@SuppressWarnings("all")
+public class MyDslSemanticSequencer extends AbstractDelegatingSemanticSequencer {
+
+	@Inject
+	private MyDslGrammarAccess grammarAccess;
+	
+	public void createSequence(EObject context, EObject semanticObject) {
+		if(semanticObject.eClass().getEPackage() == MyDslPackage.eINSTANCE) switch(semanticObject.eClass().getClassifierID()) {
+			case MyDslPackage.BINARY_BOOLEAN_EXPRESSION:
+				if(context == grammarAccess.getAtomRule() ||
+				   context == grammarAccess.getBinaryBooleanExpressionRule() ||
+				   context == grammarAccess.getBinaryBooleanExpressionAccess().getBinaryBooleanExpressionLeftAction_1_0() ||
+				   context == grammarAccess.getComparisonRule() ||
+				   context == grammarAccess.getComparisonAccess().getComparisonLeftAction_1_0() ||
+				   context == grammarAccess.getIfElseExpressionRule() ||
+				   context == grammarAccess.getIfElseExpressionAccess().getIfElseExpressionConditionAction_1_0() ||
+				   context == grammarAccess.getPowerRule() ||
+				   context == grammarAccess.getPowerAccess().getPowerBaseAction_1_0() ||
+				   context == grammarAccess.getProductRule() ||
+				   context == grammarAccess.getProductAccess().getProductLeftAction_1_0() ||
+				   context == grammarAccess.getRootExpressionRule() ||
+				   context == grammarAccess.getTermRule() ||
+				   context == grammarAccess.getTermAccess().getTermLeftAction_1_0() ||
+				   context == grammarAccess.getUnaryBooleanExpressionRule() ||
+				   context == grammarAccess.getUnaryBooleanExpressionAccess().getUnaryBooleanExpressionInnerAction_0_2()) {
+					sequence_BinaryBooleanExpression(context, (BinaryBooleanExpression) semanticObject); 
+					return; 
+				}
+				else break;
+			case MyDslPackage.BOOLEAN_LITERAL:
+				if(context == grammarAccess.getAtomRule() ||
+				   context == grammarAccess.getBinaryBooleanExpressionRule() ||
+				   context == grammarAccess.getBinaryBooleanExpressionAccess().getBinaryBooleanExpressionLeftAction_1_0() ||
+				   context == grammarAccess.getBooleanLiteralRule() ||
+				   context == grammarAccess.getComparisonRule() ||
+				   context == grammarAccess.getComparisonAccess().getComparisonLeftAction_1_0() ||
+				   context == grammarAccess.getIfElseExpressionRule() ||
+				   context == grammarAccess.getIfElseExpressionAccess().getIfElseExpressionConditionAction_1_0() ||
+				   context == grammarAccess.getLiteralRule() ||
+				   context == grammarAccess.getPowerRule() ||
+				   context == grammarAccess.getPowerAccess().getPowerBaseAction_1_0() ||
+				   context == grammarAccess.getProductRule() ||
+				   context == grammarAccess.getProductAccess().getProductLeftAction_1_0() ||
+				   context == grammarAccess.getRootExpressionRule() ||
+				   context == grammarAccess.getTermRule() ||
+				   context == grammarAccess.getTermAccess().getTermLeftAction_1_0() ||
+				   context == grammarAccess.getUnaryBooleanExpressionRule() ||
+				   context == grammarAccess.getUnaryBooleanExpressionAccess().getUnaryBooleanExpressionInnerAction_0_2()) {
+					sequence_BooleanLiteral(context, (BooleanLiteral) semanticObject); 
+					return; 
+				}
+				else break;
+			case MyDslPackage.COMPARISON:
+				if(context == grammarAccess.getAtomRule() ||
+				   context == grammarAccess.getBinaryBooleanExpressionRule() ||
+				   context == grammarAccess.getBinaryBooleanExpressionAccess().getBinaryBooleanExpressionLeftAction_1_0() ||
+				   context == grammarAccess.getComparisonRule() ||
+				   context == grammarAccess.getComparisonAccess().getComparisonLeftAction_1_0() ||
+				   context == grammarAccess.getIfElseExpressionRule() ||
+				   context == grammarAccess.getIfElseExpressionAccess().getIfElseExpressionConditionAction_1_0() ||
+				   context == grammarAccess.getPowerRule() ||
+				   context == grammarAccess.getPowerAccess().getPowerBaseAction_1_0() ||
+				   context == grammarAccess.getProductRule() ||
+				   context == grammarAccess.getProductAccess().getProductLeftAction_1_0() ||
+				   context == grammarAccess.getRootExpressionRule() ||
+				   context == grammarAccess.getTermRule() ||
+				   context == grammarAccess.getTermAccess().getTermLeftAction_1_0() ||
+				   context == grammarAccess.getUnaryBooleanExpressionRule() ||
+				   context == grammarAccess.getUnaryBooleanExpressionAccess().getUnaryBooleanExpressionInnerAction_0_2()) {
+					sequence_Comparison(context, (Comparison) semanticObject); 
+					return; 
+				}
+				else break;
+			case MyDslPackage.DOUBLE_LITERAL:
+				if(context == grammarAccess.getAtomRule() ||
+				   context == grammarAccess.getBinaryBooleanExpressionRule() ||
+				   context == grammarAccess.getBinaryBooleanExpressionAccess().getBinaryBooleanExpressionLeftAction_1_0() ||
+				   context == grammarAccess.getComparisonRule() ||
+				   context == grammarAccess.getComparisonAccess().getComparisonLeftAction_1_0() ||
+				   context == grammarAccess.getDoubleLiteralRule() ||
+				   context == grammarAccess.getIfElseExpressionRule() ||
+				   context == grammarAccess.getIfElseExpressionAccess().getIfElseExpressionConditionAction_1_0() ||
+				   context == grammarAccess.getLiteralRule() ||
+				   context == grammarAccess.getNumberLiteralRule() ||
+				   context == grammarAccess.getPowerRule() ||
+				   context == grammarAccess.getPowerAccess().getPowerBaseAction_1_0() ||
+				   context == grammarAccess.getProductRule() ||
+				   context == grammarAccess.getProductAccess().getProductLeftAction_1_0() ||
+				   context == grammarAccess.getRootExpressionRule() ||
+				   context == grammarAccess.getTermRule() ||
+				   context == grammarAccess.getTermAccess().getTermLeftAction_1_0() ||
+				   context == grammarAccess.getUnaryBooleanExpressionRule() ||
+				   context == grammarAccess.getUnaryBooleanExpressionAccess().getUnaryBooleanExpressionInnerAction_0_2()) {
+					sequence_DoubleLiteral(context, (DoubleLiteral) semanticObject); 
+					return; 
+				}
+				else break;
+			case MyDslPackage.FORMAL_PARAMETER:
+				if(context == grammarAccess.getAtomRule() ||
+				   context == grammarAccess.getBinaryBooleanExpressionRule() ||
+				   context == grammarAccess.getBinaryBooleanExpressionAccess().getBinaryBooleanExpressionLeftAction_1_0() ||
+				   context == grammarAccess.getComparisonRule() ||
+				   context == grammarAccess.getComparisonAccess().getComparisonLeftAction_1_0() ||
+				   context == grammarAccess.getFormalParameterRule() ||
+				   context == grammarAccess.getIfElseExpressionRule() ||
+				   context == grammarAccess.getIfElseExpressionAccess().getIfElseExpressionConditionAction_1_0() ||
+				   context == grammarAccess.getLiteralRule() ||
+				   context == grammarAccess.getPowerRule() ||
+				   context == grammarAccess.getPowerAccess().getPowerBaseAction_1_0() ||
+				   context == grammarAccess.getProductRule() ||
+				   context == grammarAccess.getProductAccess().getProductLeftAction_1_0() ||
+				   context == grammarAccess.getRootExpressionRule() ||
+				   context == grammarAccess.getTermRule() ||
+				   context == grammarAccess.getTermAccess().getTermLeftAction_1_0() ||
+				   context == grammarAccess.getUnaryBooleanExpressionRule() ||
+				   context == grammarAccess.getUnaryBooleanExpressionAccess().getUnaryBooleanExpressionInnerAction_0_2()) {
+					sequence_FormalParameter(context, (FormalParameter) semanticObject); 
+					return; 
+				}
+				else break;
+			case MyDslPackage.FUNCTION:
+				if(context == grammarAccess.getAtomRule() ||
+				   context == grammarAccess.getBinaryBooleanExpressionRule() ||
+				   context == grammarAccess.getBinaryBooleanExpressionAccess().getBinaryBooleanExpressionLeftAction_1_0() ||
+				   context == grammarAccess.getComparisonRule() ||
+				   context == grammarAccess.getComparisonAccess().getComparisonLeftAction_1_0() ||
+				   context == grammarAccess.getFunctionRule() ||
+				   context == grammarAccess.getIfElseExpressionRule() ||
+				   context == grammarAccess.getIfElseExpressionAccess().getIfElseExpressionConditionAction_1_0() ||
+				   context == grammarAccess.getPowerRule() ||
+				   context == grammarAccess.getPowerAccess().getPowerBaseAction_1_0() ||
+				   context == grammarAccess.getProductRule() ||
+				   context == grammarAccess.getProductAccess().getProductLeftAction_1_0() ||
+				   context == grammarAccess.getRootExpressionRule() ||
+				   context == grammarAccess.getTermRule() ||
+				   context == grammarAccess.getTermAccess().getTermLeftAction_1_0() ||
+				   context == grammarAccess.getUnaryBooleanExpressionRule() ||
+				   context == grammarAccess.getUnaryBooleanExpressionAccess().getUnaryBooleanExpressionInnerAction_0_2()) {
+					sequence_Function(context, (Function) semanticObject); 
+					return; 
+				}
+				else break;
+			case MyDslPackage.IF_ELSE_EXPRESSION:
+				if(context == grammarAccess.getAtomRule() ||
+				   context == grammarAccess.getBinaryBooleanExpressionRule() ||
+				   context == grammarAccess.getBinaryBooleanExpressionAccess().getBinaryBooleanExpressionLeftAction_1_0() ||
+				   context == grammarAccess.getComparisonRule() ||
+				   context == grammarAccess.getComparisonAccess().getComparisonLeftAction_1_0() ||
+				   context == grammarAccess.getIfElseExpressionRule() ||
+				   context == grammarAccess.getIfElseExpressionAccess().getIfElseExpressionConditionAction_1_0() ||
+				   context == grammarAccess.getPowerRule() ||
+				   context == grammarAccess.getPowerAccess().getPowerBaseAction_1_0() ||
+				   context == grammarAccess.getProductRule() ||
+				   context == grammarAccess.getProductAccess().getProductLeftAction_1_0() ||
+				   context == grammarAccess.getRootExpressionRule() ||
+				   context == grammarAccess.getTermRule() ||
+				   context == grammarAccess.getTermAccess().getTermLeftAction_1_0() ||
+				   context == grammarAccess.getUnaryBooleanExpressionRule() ||
+				   context == grammarAccess.getUnaryBooleanExpressionAccess().getUnaryBooleanExpressionInnerAction_0_2()) {
+					sequence_IfElseExpression(context, (IfElseExpression) semanticObject); 
+					return; 
+				}
+				else break;
+			case MyDslPackage.INT_LITERAL:
+				if(context == grammarAccess.getAtomRule() ||
+				   context == grammarAccess.getBinaryBooleanExpressionRule() ||
+				   context == grammarAccess.getBinaryBooleanExpressionAccess().getBinaryBooleanExpressionLeftAction_1_0() ||
+				   context == grammarAccess.getComparisonRule() ||
+				   context == grammarAccess.getComparisonAccess().getComparisonLeftAction_1_0() ||
+				   context == grammarAccess.getIfElseExpressionRule() ||
+				   context == grammarAccess.getIfElseExpressionAccess().getIfElseExpressionConditionAction_1_0() ||
+				   context == grammarAccess.getIntLiteralRule() ||
+				   context == grammarAccess.getLiteralRule() ||
+				   context == grammarAccess.getNumberLiteralRule() ||
+				   context == grammarAccess.getPowerRule() ||
+				   context == grammarAccess.getPowerAccess().getPowerBaseAction_1_0() ||
+				   context == grammarAccess.getProductRule() ||
+				   context == grammarAccess.getProductAccess().getProductLeftAction_1_0() ||
+				   context == grammarAccess.getRootExpressionRule() ||
+				   context == grammarAccess.getTermRule() ||
+				   context == grammarAccess.getTermAccess().getTermLeftAction_1_0() ||
+				   context == grammarAccess.getUnaryBooleanExpressionRule() ||
+				   context == grammarAccess.getUnaryBooleanExpressionAccess().getUnaryBooleanExpressionInnerAction_0_2()) {
+					sequence_IntLiteral(context, (IntLiteral) semanticObject); 
+					return; 
+				}
+				else break;
+			case MyDslPackage.MODEL:
+				if(context == grammarAccess.getModelRule()) {
+					sequence_Model(context, (Model) semanticObject); 
+					return; 
+				}
+				else break;
+			case MyDslPackage.POWER:
+				if(context == grammarAccess.getAtomRule() ||
+				   context == grammarAccess.getBinaryBooleanExpressionRule() ||
+				   context == grammarAccess.getBinaryBooleanExpressionAccess().getBinaryBooleanExpressionLeftAction_1_0() ||
+				   context == grammarAccess.getComparisonRule() ||
+				   context == grammarAccess.getComparisonAccess().getComparisonLeftAction_1_0() ||
+				   context == grammarAccess.getIfElseExpressionRule() ||
+				   context == grammarAccess.getIfElseExpressionAccess().getIfElseExpressionConditionAction_1_0() ||
+				   context == grammarAccess.getPowerRule() ||
+				   context == grammarAccess.getPowerAccess().getPowerBaseAction_1_0() ||
+				   context == grammarAccess.getProductRule() ||
+				   context == grammarAccess.getProductAccess().getProductLeftAction_1_0() ||
+				   context == grammarAccess.getRootExpressionRule() ||
+				   context == grammarAccess.getTermRule() ||
+				   context == grammarAccess.getTermAccess().getTermLeftAction_1_0() ||
+				   context == grammarAccess.getUnaryBooleanExpressionRule() ||
+				   context == grammarAccess.getUnaryBooleanExpressionAccess().getUnaryBooleanExpressionInnerAction_0_2()) {
+					sequence_Power(context, (Power) semanticObject); 
+					return; 
+				}
+				else break;
+			case MyDslPackage.PRODUCT:
+				if(context == grammarAccess.getAtomRule() ||
+				   context == grammarAccess.getBinaryBooleanExpressionRule() ||
+				   context == grammarAccess.getBinaryBooleanExpressionAccess().getBinaryBooleanExpressionLeftAction_1_0() ||
+				   context == grammarAccess.getComparisonRule() ||
+				   context == grammarAccess.getComparisonAccess().getComparisonLeftAction_1_0() ||
+				   context == grammarAccess.getIfElseExpressionRule() ||
+				   context == grammarAccess.getIfElseExpressionAccess().getIfElseExpressionConditionAction_1_0() ||
+				   context == grammarAccess.getPowerRule() ||
+				   context == grammarAccess.getPowerAccess().getPowerBaseAction_1_0() ||
+				   context == grammarAccess.getProductRule() ||
+				   context == grammarAccess.getProductAccess().getProductLeftAction_1_0() ||
+				   context == grammarAccess.getRootExpressionRule() ||
+				   context == grammarAccess.getTermRule() ||
+				   context == grammarAccess.getTermAccess().getTermLeftAction_1_0() ||
+				   context == grammarAccess.getUnaryBooleanExpressionRule() ||
+				   context == grammarAccess.getUnaryBooleanExpressionAccess().getUnaryBooleanExpressionInnerAction_0_2()) {
+					sequence_Product(context, (Product) semanticObject); 
+					return; 
+				}
+				else break;
+			case MyDslPackage.TERM:
+				if(context == grammarAccess.getAtomRule() ||
+				   context == grammarAccess.getBinaryBooleanExpressionRule() ||
+				   context == grammarAccess.getBinaryBooleanExpressionAccess().getBinaryBooleanExpressionLeftAction_1_0() ||
+				   context == grammarAccess.getComparisonRule() ||
+				   context == grammarAccess.getComparisonAccess().getComparisonLeftAction_1_0() ||
+				   context == grammarAccess.getIfElseExpressionRule() ||
+				   context == grammarAccess.getIfElseExpressionAccess().getIfElseExpressionConditionAction_1_0() ||
+				   context == grammarAccess.getPowerRule() ||
+				   context == grammarAccess.getPowerAccess().getPowerBaseAction_1_0() ||
+				   context == grammarAccess.getProductRule() ||
+				   context == grammarAccess.getProductAccess().getProductLeftAction_1_0() ||
+				   context == grammarAccess.getRootExpressionRule() ||
+				   context == grammarAccess.getTermRule() ||
+				   context == grammarAccess.getTermAccess().getTermLeftAction_1_0() ||
+				   context == grammarAccess.getUnaryBooleanExpressionRule() ||
+				   context == grammarAccess.getUnaryBooleanExpressionAccess().getUnaryBooleanExpressionInnerAction_0_2()) {
+					sequence_Term(context, (Term) semanticObject); 
+					return; 
+				}
+				else break;
+			case MyDslPackage.UNARY_BOOLEAN_EXPRESSION:
+				if(context == grammarAccess.getAtomRule() ||
+				   context == grammarAccess.getBinaryBooleanExpressionRule() ||
+				   context == grammarAccess.getBinaryBooleanExpressionAccess().getBinaryBooleanExpressionLeftAction_1_0() ||
+				   context == grammarAccess.getComparisonRule() ||
+				   context == grammarAccess.getComparisonAccess().getComparisonLeftAction_1_0() ||
+				   context == grammarAccess.getIfElseExpressionRule() ||
+				   context == grammarAccess.getIfElseExpressionAccess().getIfElseExpressionConditionAction_1_0() ||
+				   context == grammarAccess.getPowerRule() ||
+				   context == grammarAccess.getPowerAccess().getPowerBaseAction_1_0() ||
+				   context == grammarAccess.getProductRule() ||
+				   context == grammarAccess.getProductAccess().getProductLeftAction_1_0() ||
+				   context == grammarAccess.getRootExpressionRule() ||
+				   context == grammarAccess.getTermRule() ||
+				   context == grammarAccess.getTermAccess().getTermLeftAction_1_0() ||
+				   context == grammarAccess.getUnaryBooleanExpressionRule() ||
+				   context == grammarAccess.getUnaryBooleanExpressionAccess().getUnaryBooleanExpressionInnerAction_0_2()) {
+					sequence_UnaryBooleanExpression(context, (UnaryBooleanExpression) semanticObject); 
+					return; 
+				}
+				else break;
+			}
+		if (errorAcceptor != null) errorAcceptor.accept(diagnosticProvider.createInvalidContextOrTypeDiagnostic(semanticObject, context));
+	}
+	
+	/**
+	 * Constraint:
+	 *     (left=BinaryBooleanExpression_BinaryBooleanExpression_1_0 operation=BooleanOperation right=UnaryBooleanExpression)
+	 */
+	protected void sequence_BinaryBooleanExpression(EObject context, BinaryBooleanExpression semanticObject) {
+		if(errorAcceptor != null) {
+			if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.BINARY_BOOLEAN_EXPRESSION__LEFT) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.BINARY_BOOLEAN_EXPRESSION__LEFT));
+			if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.BINARY_BOOLEAN_EXPRESSION__OPERATION) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.BINARY_BOOLEAN_EXPRESSION__OPERATION));
+			if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.BINARY_BOOLEAN_EXPRESSION__RIGHT) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.BINARY_BOOLEAN_EXPRESSION__RIGHT));
+		}
+		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
+		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
+		feeder.accept(grammarAccess.getBinaryBooleanExpressionAccess().getBinaryBooleanExpressionLeftAction_1_0(), semanticObject.getLeft());
+		feeder.accept(grammarAccess.getBinaryBooleanExpressionAccess().getOperationBooleanOperationEnumRuleCall_1_1_0(), semanticObject.getOperation());
+		feeder.accept(grammarAccess.getBinaryBooleanExpressionAccess().getRightUnaryBooleanExpressionParserRuleCall_1_2_0(), semanticObject.getRight());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     value=EBoolean
+	 */
+	protected void sequence_BooleanLiteral(EObject context, BooleanLiteral semanticObject) {
+		if(errorAcceptor != null) {
+			if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.BOOLEAN_LITERAL__VALUE) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.BOOLEAN_LITERAL__VALUE));
+		}
+		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
+		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
+		feeder.accept(grammarAccess.getBooleanLiteralAccess().getValueEBooleanParserRuleCall_0(), semanticObject.isValue());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     (left=Comparison_Comparison_1_0 operation=CompareOperation right=Term)
+	 */
+	protected void sequence_Comparison(EObject context, Comparison semanticObject) {
+		if(errorAcceptor != null) {
+			if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.COMPARISON__LEFT) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.COMPARISON__LEFT));
+			if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.COMPARISON__OPERATION) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.COMPARISON__OPERATION));
+			if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.COMPARISON__RIGHT) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.COMPARISON__RIGHT));
+		}
+		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
+		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
+		feeder.accept(grammarAccess.getComparisonAccess().getComparisonLeftAction_1_0(), semanticObject.getLeft());
+		feeder.accept(grammarAccess.getComparisonAccess().getOperationCompareOperationEnumRuleCall_1_1_0(), semanticObject.getOperation());
+		feeder.accept(grammarAccess.getComparisonAccess().getRightTermParserRuleCall_1_2_0(), semanticObject.getRight());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     value=Double
+	 */
+	protected void sequence_DoubleLiteral(EObject context, DoubleLiteral semanticObject) {
+		if(errorAcceptor != null) {
+			if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.DOUBLE_LITERAL__VALUE) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.DOUBLE_LITERAL__VALUE));
+		}
+		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
+		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
+		feeder.accept(grammarAccess.getDoubleLiteralAccess().getValueDoubleParserRuleCall_0(), semanticObject.getValue());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     value=EString
+	 */
+	protected void sequence_FormalParameter(EObject context, FormalParameter semanticObject) {
+		if(errorAcceptor != null) {
+			if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.FORMAL_PARAMETER__VALUE) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.FORMAL_PARAMETER__VALUE));
+		}
+		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
+		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
+		feeder.accept(grammarAccess.getFormalParameterAccess().getValueEStringParserRuleCall_0(), semanticObject.getValue());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     (name=ID (parameters+=RootExpression parameters+=RootExpression*)?)
+	 */
+	protected void sequence_Function(EObject context, Function semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     (condition=IfElseExpression_IfElseExpression_1_0 trueExp=IfElseExpression falseExp=IfElseExpression)
+	 */
+	protected void sequence_IfElseExpression(EObject context, IfElseExpression semanticObject) {
+		if(errorAcceptor != null) {
+			if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.IF_ELSE_EXPRESSION__CONDITION) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.IF_ELSE_EXPRESSION__CONDITION));
+			if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.IF_ELSE_EXPRESSION__TRUE_EXP) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.IF_ELSE_EXPRESSION__TRUE_EXP));
+			if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.IF_ELSE_EXPRESSION__FALSE_EXP) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.IF_ELSE_EXPRESSION__FALSE_EXP));
+		}
+		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
+		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
+		feeder.accept(grammarAccess.getIfElseExpressionAccess().getIfElseExpressionConditionAction_1_0(), semanticObject.getCondition());
+		feeder.accept(grammarAccess.getIfElseExpressionAccess().getTrueExpIfElseExpressionParserRuleCall_1_2_0(), semanticObject.getTrueExp());
+		feeder.accept(grammarAccess.getIfElseExpressionAccess().getFalseExpIfElseExpressionParserRuleCall_1_4_0(), semanticObject.getFalseExp());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     value=Integer
+	 */
+	protected void sequence_IntLiteral(EObject context, IntLiteral semanticObject) {
+		if(errorAcceptor != null) {
+			if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.INT_LITERAL__VALUE) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.INT_LITERAL__VALUE));
+		}
+		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
+		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
+		feeder.accept(grammarAccess.getIntLiteralAccess().getValueIntegerParserRuleCall_0(), semanticObject.getValue());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     terms=IfElseExpression
+	 */
+	protected void sequence_Model(EObject context, Model semanticObject) {
+		if(errorAcceptor != null) {
+			if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.MODEL__TERMS) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.MODEL__TERMS));
+		}
+		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
+		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
+		feeder.accept(grammarAccess.getModelAccess().getTermsIfElseExpressionParserRuleCall_0(), semanticObject.getTerms());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     (base=Power_Power_1_0 exponent=Atom)
+	 */
+	protected void sequence_Power(EObject context, Power semanticObject) {
+		if(errorAcceptor != null) {
+			if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.POWER__BASE) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.POWER__BASE));
+			if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.POWER__EXPONENT) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.POWER__EXPONENT));
+		}
+		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
+		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
+		feeder.accept(grammarAccess.getPowerAccess().getPowerBaseAction_1_0(), semanticObject.getBase());
+		feeder.accept(grammarAccess.getPowerAccess().getExponentAtomParserRuleCall_1_2_0(), semanticObject.getExponent());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     (left=Product_Product_1_0 operation=ProductOperation right=Power)
+	 */
+	protected void sequence_Product(EObject context, Product semanticObject) {
+		if(errorAcceptor != null) {
+			if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.PRODUCT__LEFT) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.PRODUCT__LEFT));
+			if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.PRODUCT__OPERATION) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.PRODUCT__OPERATION));
+			if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.PRODUCT__RIGHT) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.PRODUCT__RIGHT));
+		}
+		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
+		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
+		feeder.accept(grammarAccess.getProductAccess().getProductLeftAction_1_0(), semanticObject.getLeft());
+		feeder.accept(grammarAccess.getProductAccess().getOperationProductOperationEnumRuleCall_1_1_0(), semanticObject.getOperation());
+		feeder.accept(grammarAccess.getProductAccess().getRightPowerParserRuleCall_1_2_0(), semanticObject.getRight());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     (left=Term_Term_1_0 operation=TermOperation right=Product)
+	 */
+	protected void sequence_Term(EObject context, Term semanticObject) {
+		if(errorAcceptor != null) {
+			if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.TERM__LEFT) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.TERM__LEFT));
+			if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.TERM__OPERATION) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.TERM__OPERATION));
+			if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.TERM__RIGHT) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.TERM__RIGHT));
+		}
+		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
+		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
+		feeder.accept(grammarAccess.getTermAccess().getTermLeftAction_1_0(), semanticObject.getLeft());
+		feeder.accept(grammarAccess.getTermAccess().getOperationTermOperationEnumRuleCall_1_1_0(), semanticObject.getOperation());
+		feeder.accept(grammarAccess.getTermAccess().getRightProductParserRuleCall_1_2_0(), semanticObject.getRight());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     inner=UnaryBooleanExpression_UnaryBooleanExpression_0_2
+	 */
+	protected void sequence_UnaryBooleanExpression(EObject context, UnaryBooleanExpression semanticObject) {
+		if(errorAcceptor != null) {
+			if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.UNARY_BOOLEAN_EXPRESSION__INNER) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.UNARY_BOOLEAN_EXPRESSION__INNER));
+		}
+		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
+		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
+		feeder.accept(grammarAccess.getUnaryBooleanExpressionAccess().getUnaryBooleanExpressionInnerAction_0_2(), semanticObject.getInner());
+		feeder.finish();
+	}
+}
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/serializer/MyDslSyntacticSequencer.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/serializer/MyDslSyntacticSequencer.java
index dce60187010f1cb355e58fbe0b2f72ee7c486e95..6353eaa9dcb5842c1e460c118187224e189ab4a2 100644
--- a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/serializer/MyDslSyntacticSequencer.java
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/serializer/MyDslSyntacticSequencer.java
@@ -13,76 +13,54 @@ import org.eclipse.xtext.serializer.analysis.ISyntacticSequencerPDAProvider.ISyn
 import org.eclipse.xtext.serializer.sequencer.AbstractSyntacticSequencer;
 import org.xtext.example.mydsl.services.MyDslGrammarAccess;
 
-@SuppressWarnings("all")
-public class MyDslSyntacticSequencer extends AbstractSyntacticSequencer {
-
-	protected MyDslGrammarAccess grammarAccess;
-	protected AbstractElementAlias match_Types_LeftParenthesisKeyword_2_0_a;
-	protected AbstractElementAlias match_Types_LeftParenthesisKeyword_2_0_p;
-	
-	@Inject
-	protected void init(IGrammarAccess access) {
-		grammarAccess = (MyDslGrammarAccess) access;
-		match_Types_LeftParenthesisKeyword_2_0_a = new TokenAlias(true, true, grammarAccess.getTypesAccess().getLeftParenthesisKeyword_2_0());
-		match_Types_LeftParenthesisKeyword_2_0_p = new TokenAlias(true, false, grammarAccess.getTypesAccess().getLeftParenthesisKeyword_2_0());
-	}
-	
-	@Override
-	protected String getUnassignedRuleCallToken(EObject semanticObject, RuleCall ruleCall, INode node) {
-		if(ruleCall.getRule() == grammarAccess.getDECIMALRule())
-			return getDECIMALToken(semanticObject, ruleCall, node);
-		else if(ruleCall.getRule() == grammarAccess.getE_STRINGRule())
-			return getE_STRINGToken(semanticObject, ruleCall, node);
-		return "";
-	}
-	
-	/**
-	 * DECIMAL returns ecore::EBigDecimal : '-'? INT ('.' INT)? ;
-	 */
-	protected String getDECIMALToken(EObject semanticObject, RuleCall ruleCall, INode node) {
-		if (node != null)
-			return getTokenText(node);
-		return "";
-	}
-	
-	/**
-	 * E_STRING returns ecore::EString:
-	 * 	STRING | ID;
-	 */
-	protected String getE_STRINGToken(EObject semanticObject, RuleCall ruleCall, INode node) {
-		if (node != null)
-			return getTokenText(node);
-		return "\"\"";
-	}
-	
-	@Override
-	protected void emitUnassignedTokens(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
-		if (transition.getAmbiguousSyntaxes().isEmpty()) return;
-		List<INode> transitionNodes = collectNodes(fromNode, toNode);
-		for (AbstractElementAlias syntax : transition.getAmbiguousSyntaxes()) {
-			List<INode> syntaxNodes = getNodesFor(transitionNodes, syntax);
-			if(match_Types_LeftParenthesisKeyword_2_0_a.equals(syntax))
-				emit_Types_LeftParenthesisKeyword_2_0_a(semanticObject, getLastNavigableState(), syntaxNodes);
-			else if(match_Types_LeftParenthesisKeyword_2_0_p.equals(syntax))
-				emit_Types_LeftParenthesisKeyword_2_0_p(semanticObject, getLastNavigableState(), syntaxNodes);
-			else acceptNodes(getLastNavigableState(), syntaxNodes);
-		}
-	}
-
-	/**
-	 * Syntax:
-	 *     '('*
-	 */
-	protected void emit_Types_LeftParenthesisKeyword_2_0_a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
-		acceptNodes(transition, nodes);
-	}
-	
-	/**
-	 * Syntax:
-	 *     '('+
-	 */
-	protected void emit_Types_LeftParenthesisKeyword_2_0_p(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
-		acceptNodes(transition, nodes);
-	}
-	
-}
+@SuppressWarnings("all")
+public class MyDslSyntacticSequencer extends AbstractSyntacticSequencer {
+
+	protected MyDslGrammarAccess grammarAccess;
+	protected AbstractElementAlias match_Atom_LeftParenthesisKeyword_1_0_a;
+	protected AbstractElementAlias match_Atom_LeftParenthesisKeyword_1_0_p;
+	
+	@Inject
+	protected void init(IGrammarAccess access) {
+		grammarAccess = (MyDslGrammarAccess) access;
+		match_Atom_LeftParenthesisKeyword_1_0_a = new TokenAlias(true, true, grammarAccess.getAtomAccess().getLeftParenthesisKeyword_1_0());
+		match_Atom_LeftParenthesisKeyword_1_0_p = new TokenAlias(true, false, grammarAccess.getAtomAccess().getLeftParenthesisKeyword_1_0());
+	}
+	
+	@Override
+	protected String getUnassignedRuleCallToken(EObject semanticObject, RuleCall ruleCall, INode node) {
+		return "";
+	}
+	
+	
+	@Override
+	protected void emitUnassignedTokens(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
+		if (transition.getAmbiguousSyntaxes().isEmpty()) return;
+		List<INode> transitionNodes = collectNodes(fromNode, toNode);
+		for (AbstractElementAlias syntax : transition.getAmbiguousSyntaxes()) {
+			List<INode> syntaxNodes = getNodesFor(transitionNodes, syntax);
+			if(match_Atom_LeftParenthesisKeyword_1_0_a.equals(syntax))
+				emit_Atom_LeftParenthesisKeyword_1_0_a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_Atom_LeftParenthesisKeyword_1_0_p.equals(syntax))
+				emit_Atom_LeftParenthesisKeyword_1_0_p(semanticObject, getLastNavigableState(), syntaxNodes);
+			else acceptNodes(getLastNavigableState(), syntaxNodes);
+		}
+	}
+
+	/**
+	 * Syntax:
+	 *     '('*
+	 */
+	protected void emit_Atom_LeftParenthesisKeyword_1_0_a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     '('+
+	 */
+	protected void emit_Atom_LeftParenthesisKeyword_1_0_p(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+}
diff --git a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/services/MyDslGrammarAccess.java b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/services/MyDslGrammarAccess.java
index 4afddd6e71a5f660db7f80454845b029978126ba..8f633c595471278a914bac38b1ddd2c02a76833b 100644
--- a/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/services/MyDslGrammarAccess.java
+++ b/org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/services/MyDslGrammarAccess.java
@@ -22,254 +22,654 @@ public class MyDslGrammarAccess extends AbstractGrammarElementFinder {
 	public class ModelElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Model");
 		private final Assignment cTermsAssignment = (Assignment)rule.eContents().get(1);
-		private final RuleCall cTermsTermParserRuleCall_0 = (RuleCall)cTermsAssignment.eContents().get(0);
+		private final RuleCall cTermsIfElseExpressionParserRuleCall_0 = (RuleCall)cTermsAssignment.eContents().get(0);
 		
 		//Model:
-		//
-		//	terms+=Term;
+		//	terms=IfElseExpression;
 		public ParserRule getRule() { return rule; }
 
-		//terms+=Term
+		//terms=IfElseExpression
 		public Assignment getTermsAssignment() { return cTermsAssignment; }
 
+		//IfElseExpression
+		public RuleCall getTermsIfElseExpressionParserRuleCall_0() { return cTermsIfElseExpressionParserRuleCall_0; }
+	}
+
+	public class DoubleElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Double");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cHyphenMinusKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final RuleCall cINTTerminalRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
+		private final Keyword cFullStopKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final RuleCall cINTTerminalRuleCall_3 = (RuleCall)cGroup.eContents().get(3);
+		
+		//Double returns ecore::EBigDecimal:
+		//	"-"? INT "." // (('e'|'E') '-'? INT)?
+		//
+		//	INT;
+		public ParserRule getRule() { return rule; }
+
+		//"-"? INT "." // (('e'|'E') '-'? INT)?
+		//
+		//INT
+		public Group getGroup() { return cGroup; }
+
+		//"-"?
+		public Keyword getHyphenMinusKeyword_0() { return cHyphenMinusKeyword_0; }
+
+		//INT
+		public RuleCall getINTTerminalRuleCall_1() { return cINTTerminalRuleCall_1; }
+
+		//"."
+		public Keyword getFullStopKeyword_2() { return cFullStopKeyword_2; }
+
+		//// (('e'|'E') '-'? INT)?
+		//
+		//INT
+		public RuleCall getINTTerminalRuleCall_3() { return cINTTerminalRuleCall_3; }
+	}
+
+	public class IntegerElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Integer");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cHyphenMinusKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final RuleCall cINTTerminalRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
+		
+		//Integer returns ecore::EBigInteger:
+		//	"-"? INT;
+		public ParserRule getRule() { return rule; }
+
+		//"-"? INT
+		public Group getGroup() { return cGroup; }
+
+		//"-"?
+		public Keyword getHyphenMinusKeyword_0() { return cHyphenMinusKeyword_0; }
+
+		//INT
+		public RuleCall getINTTerminalRuleCall_1() { return cINTTerminalRuleCall_1; }
+	}
+
+	public class EStringElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "EString");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cSTRINGTerminalRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cIDTerminalRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		
+		//EString returns ecore::EString:
+		//	STRING | ID;
+		public ParserRule getRule() { return rule; }
+
+		//STRING | ID
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//STRING
+		public RuleCall getSTRINGTerminalRuleCall_0() { return cSTRINGTerminalRuleCall_0; }
+
+		//ID
+		public RuleCall getIDTerminalRuleCall_1() { return cIDTerminalRuleCall_1; }
+	}
+
+	public class EBooleanElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "EBoolean");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final Keyword cTrueKeyword_0 = (Keyword)cAlternatives.eContents().get(0);
+		private final Keyword cFalseKeyword_1 = (Keyword)cAlternatives.eContents().get(1);
+		
+		//EBoolean returns ecore::EBoolean:
+		//	"true" | "false";
+		public ParserRule getRule() { return rule; }
+
+		//"true" | "false"
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//"true"
+		public Keyword getTrueKeyword_0() { return cTrueKeyword_0; }
+
+		//"false"
+		public Keyword getFalseKeyword_1() { return cFalseKeyword_1; }
+	}
+
+	public class RootExpressionElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "RootExpression");
+		private final RuleCall cIfElseExpressionParserRuleCall = (RuleCall)rule.eContents().get(1);
+		
+		//RootExpression returns Expression:
+		//	IfElseExpression;
+		public ParserRule getRule() { return rule; }
+
+		//IfElseExpression
+		public RuleCall getIfElseExpressionParserRuleCall() { return cIfElseExpressionParserRuleCall; }
+	}
+
+	public class IfElseExpressionElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "IfElseExpression");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cBinaryBooleanExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Action cIfElseExpressionConditionAction_1_0 = (Action)cGroup_1.eContents().get(0);
+		private final Keyword cQuestionMarkKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
+		private final Assignment cTrueExpAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
+		private final RuleCall cTrueExpIfElseExpressionParserRuleCall_1_2_0 = (RuleCall)cTrueExpAssignment_1_2.eContents().get(0);
+		private final Keyword cColonKeyword_1_3 = (Keyword)cGroup_1.eContents().get(3);
+		private final Assignment cFalseExpAssignment_1_4 = (Assignment)cGroup_1.eContents().get(4);
+		private final RuleCall cFalseExpIfElseExpressionParserRuleCall_1_4_0 = (RuleCall)cFalseExpAssignment_1_4.eContents().get(0);
+		
+		//IfElseExpression returns Expression:
+		//	BinaryBooleanExpression ({IfElseExpression.condition=current} "?" trueExp=IfElseExpression ":"
+		//	falseExp=IfElseExpression)?;
+		public ParserRule getRule() { return rule; }
+
+		//BinaryBooleanExpression ({IfElseExpression.condition=current} "?" trueExp=IfElseExpression ":"
+		//falseExp=IfElseExpression)?
+		public Group getGroup() { return cGroup; }
+
+		//BinaryBooleanExpression
+		public RuleCall getBinaryBooleanExpressionParserRuleCall_0() { return cBinaryBooleanExpressionParserRuleCall_0; }
+
+		//({IfElseExpression.condition=current} "?" trueExp=IfElseExpression ":" falseExp=IfElseExpression)?
+		public Group getGroup_1() { return cGroup_1; }
+
+		//{IfElseExpression.condition=current}
+		public Action getIfElseExpressionConditionAction_1_0() { return cIfElseExpressionConditionAction_1_0; }
+
+		//"?"
+		public Keyword getQuestionMarkKeyword_1_1() { return cQuestionMarkKeyword_1_1; }
+
+		//trueExp=IfElseExpression
+		public Assignment getTrueExpAssignment_1_2() { return cTrueExpAssignment_1_2; }
+
+		//IfElseExpression
+		public RuleCall getTrueExpIfElseExpressionParserRuleCall_1_2_0() { return cTrueExpIfElseExpressionParserRuleCall_1_2_0; }
+
+		//":"
+		public Keyword getColonKeyword_1_3() { return cColonKeyword_1_3; }
+
+		//falseExp=IfElseExpression
+		public Assignment getFalseExpAssignment_1_4() { return cFalseExpAssignment_1_4; }
+
+		//IfElseExpression
+		public RuleCall getFalseExpIfElseExpressionParserRuleCall_1_4_0() { return cFalseExpIfElseExpressionParserRuleCall_1_4_0; }
+	}
+
+	public class BinaryBooleanExpressionElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "BinaryBooleanExpression");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cUnaryBooleanExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Action cBinaryBooleanExpressionLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
+		private final Assignment cOperationAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
+		private final RuleCall cOperationBooleanOperationEnumRuleCall_1_1_0 = (RuleCall)cOperationAssignment_1_1.eContents().get(0);
+		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
+		private final RuleCall cRightUnaryBooleanExpressionParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
+		
+		//BinaryBooleanExpression returns Expression:
+		//	UnaryBooleanExpression ({BinaryBooleanExpression.left=current} operation=BooleanOperation
+		//	right=UnaryBooleanExpression)*;
+		public ParserRule getRule() { return rule; }
+
+		//UnaryBooleanExpression ({BinaryBooleanExpression.left=current} operation=BooleanOperation right=UnaryBooleanExpression)*
+		public Group getGroup() { return cGroup; }
+
+		//UnaryBooleanExpression
+		public RuleCall getUnaryBooleanExpressionParserRuleCall_0() { return cUnaryBooleanExpressionParserRuleCall_0; }
+
+		//({BinaryBooleanExpression.left=current} operation=BooleanOperation right=UnaryBooleanExpression)*
+		public Group getGroup_1() { return cGroup_1; }
+
+		//{BinaryBooleanExpression.left=current}
+		public Action getBinaryBooleanExpressionLeftAction_1_0() { return cBinaryBooleanExpressionLeftAction_1_0; }
+
+		//operation=BooleanOperation
+		public Assignment getOperationAssignment_1_1() { return cOperationAssignment_1_1; }
+
+		//BooleanOperation
+		public RuleCall getOperationBooleanOperationEnumRuleCall_1_1_0() { return cOperationBooleanOperationEnumRuleCall_1_1_0; }
+
+		//right=UnaryBooleanExpression
+		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
+
+		//UnaryBooleanExpression
+		public RuleCall getRightUnaryBooleanExpressionParserRuleCall_1_2_0() { return cRightUnaryBooleanExpressionParserRuleCall_1_2_0; }
+	}
+
+	public class UnaryBooleanExpressionElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "UnaryBooleanExpression");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
+		private final Keyword cNOTKeyword_0_0 = (Keyword)cGroup_0.eContents().get(0);
+		private final RuleCall cComparisonParserRuleCall_0_1 = (RuleCall)cGroup_0.eContents().get(1);
+		private final Action cUnaryBooleanExpressionInnerAction_0_2 = (Action)cGroup_0.eContents().get(2);
+		private final RuleCall cComparisonParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		
+		//UnaryBooleanExpression returns Expression:
+		//	"NOT" Comparison {UnaryBooleanExpression.inner=current} | Comparison;
+		public ParserRule getRule() { return rule; }
+
+		//"NOT" Comparison {UnaryBooleanExpression.inner=current} | Comparison
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//"NOT" Comparison {UnaryBooleanExpression.inner=current}
+		public Group getGroup_0() { return cGroup_0; }
+
+		//"NOT"
+		public Keyword getNOTKeyword_0_0() { return cNOTKeyword_0_0; }
+
+		//Comparison
+		public RuleCall getComparisonParserRuleCall_0_1() { return cComparisonParserRuleCall_0_1; }
+
+		//{UnaryBooleanExpression.inner=current}
+		public Action getUnaryBooleanExpressionInnerAction_0_2() { return cUnaryBooleanExpressionInnerAction_0_2; }
+
+		//Comparison
+		public RuleCall getComparisonParserRuleCall_1() { return cComparisonParserRuleCall_1; }
+	}
+
+	public class ComparisonElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Comparison");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cTermParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Action cComparisonLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
+		private final Assignment cOperationAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
+		private final RuleCall cOperationCompareOperationEnumRuleCall_1_1_0 = (RuleCall)cOperationAssignment_1_1.eContents().get(0);
+		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
+		private final RuleCall cRightTermParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
+		
+		//Comparison returns Expression:
+		//	Term ({Comparison.left=current} operation=CompareOperation right=Term)*;
+		public ParserRule getRule() { return rule; }
+
+		//Term ({Comparison.left=current} operation=CompareOperation right=Term)*
+		public Group getGroup() { return cGroup; }
+
 		//Term
-		public RuleCall getTermsTermParserRuleCall_0() { return cTermsTermParserRuleCall_0; }
+		public RuleCall getTermParserRuleCall_0() { return cTermParserRuleCall_0; }
+
+		//({Comparison.left=current} operation=CompareOperation right=Term)*
+		public Group getGroup_1() { return cGroup_1; }
+
+		//{Comparison.left=current}
+		public Action getComparisonLeftAction_1_0() { return cComparisonLeftAction_1_0; }
+
+		//operation=CompareOperation
+		public Assignment getOperationAssignment_1_1() { return cOperationAssignment_1_1; }
+
+		//CompareOperation
+		public RuleCall getOperationCompareOperationEnumRuleCall_1_1_0() { return cOperationCompareOperationEnumRuleCall_1_1_0; }
+
+		//right=Term
+		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
+
+		//Term
+		public RuleCall getRightTermParserRuleCall_1_2_0() { return cRightTermParserRuleCall_1_2_0; }
 	}
 
 	public class TermElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Term");
 		private final Group cGroup = (Group)rule.eContents().get(1);
-		private final RuleCall cTypesParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final RuleCall cProductParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
 		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
 		private final Action cTermLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
-		private final Assignment cOperationsAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
-		private final RuleCall cOperationsOperationsParserRuleCall_1_1_0 = (RuleCall)cOperationsAssignment_1_1.eContents().get(0);
+		private final Assignment cOperationAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
+		private final RuleCall cOperationTermOperationEnumRuleCall_1_1_0 = (RuleCall)cOperationAssignment_1_1.eContents().get(0);
 		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
-		private final RuleCall cRightTypesParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
+		private final RuleCall cRightProductParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
 		
 		//Term returns Expression:
-		//
-		//	Types ({Term.left=current} Operations=Operations right=Types)*;
+		//	Product ({Term.left=current} operation=TermOperation right=Product)*;
 		public ParserRule getRule() { return rule; }
 
-		//Types ({Term.left=current} Operations=Operations right=Types)*
+		//Product ({Term.left=current} operation=TermOperation right=Product)*
 		public Group getGroup() { return cGroup; }
 
-		//Types
-		public RuleCall getTypesParserRuleCall_0() { return cTypesParserRuleCall_0; }
+		//Product
+		public RuleCall getProductParserRuleCall_0() { return cProductParserRuleCall_0; }
 
-		//({Term.left=current} Operations=Operations right=Types)*
+		//({Term.left=current} operation=TermOperation right=Product)*
 		public Group getGroup_1() { return cGroup_1; }
 
 		//{Term.left=current}
 		public Action getTermLeftAction_1_0() { return cTermLeftAction_1_0; }
 
-		//Operations=Operations
-		public Assignment getOperationsAssignment_1_1() { return cOperationsAssignment_1_1; }
+		//operation=TermOperation
+		public Assignment getOperationAssignment_1_1() { return cOperationAssignment_1_1; }
 
-		//Operations
-		public RuleCall getOperationsOperationsParserRuleCall_1_1_0() { return cOperationsOperationsParserRuleCall_1_1_0; }
+		//TermOperation
+		public RuleCall getOperationTermOperationEnumRuleCall_1_1_0() { return cOperationTermOperationEnumRuleCall_1_1_0; }
 
-		//right=Types
+		//right=Product
 		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
 
-		//Types
-		public RuleCall getRightTypesParserRuleCall_1_2_0() { return cRightTypesParserRuleCall_1_2_0; }
+		//Product
+		public RuleCall getRightProductParserRuleCall_1_2_0() { return cRightProductParserRuleCall_1_2_0; }
 	}
 
-	public class TypesElements extends AbstractParserRuleElementFinder {
-		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Types");
-		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
-		private final RuleCall cArithmeticsParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
-		private final RuleCall cStringsParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
-		private final Group cGroup_2 = (Group)cAlternatives.eContents().get(2);
-		private final Keyword cLeftParenthesisKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
-		private final RuleCall cTermParserRuleCall_2_1 = (RuleCall)cGroup_2.eContents().get(1);
-		private final Keyword cRightParenthesisKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
+	public class ProductElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Product");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cPowerParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Action cProductLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
+		private final Assignment cOperationAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
+		private final RuleCall cOperationProductOperationEnumRuleCall_1_1_0 = (RuleCall)cOperationAssignment_1_1.eContents().get(0);
+		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
+		private final RuleCall cRightPowerParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
 		
-		//Types returns Expression:
-		//
-		//	Arithmetics | Strings | "(" Term ")";
+		//Product returns Expression:
+		//	Power ({Product.left=current} operation=ProductOperation right=Power)*;
 		public ParserRule getRule() { return rule; }
 
-		//Arithmetics | Strings | "(" Term ")"
-		public Alternatives getAlternatives() { return cAlternatives; }
+		//Power ({Product.left=current} operation=ProductOperation right=Power)*
+		public Group getGroup() { return cGroup; }
 
-		//Arithmetics
-		public RuleCall getArithmeticsParserRuleCall_0() { return cArithmeticsParserRuleCall_0; }
+		//Power
+		public RuleCall getPowerParserRuleCall_0() { return cPowerParserRuleCall_0; }
 
-		//Strings
-		public RuleCall getStringsParserRuleCall_1() { return cStringsParserRuleCall_1; }
+		//({Product.left=current} operation=ProductOperation right=Power)*
+		public Group getGroup_1() { return cGroup_1; }
 
-		//"(" Term ")"
-		public Group getGroup_2() { return cGroup_2; }
+		//{Product.left=current}
+		public Action getProductLeftAction_1_0() { return cProductLeftAction_1_0; }
 
-		//"("
-		public Keyword getLeftParenthesisKeyword_2_0() { return cLeftParenthesisKeyword_2_0; }
+		//operation=ProductOperation
+		public Assignment getOperationAssignment_1_1() { return cOperationAssignment_1_1; }
 
-		//Term
-		public RuleCall getTermParserRuleCall_2_1() { return cTermParserRuleCall_2_1; }
+		//ProductOperation
+		public RuleCall getOperationProductOperationEnumRuleCall_1_1_0() { return cOperationProductOperationEnumRuleCall_1_1_0; }
 
-		//")"
-		public Keyword getRightParenthesisKeyword_2_2() { return cRightParenthesisKeyword_2_2; }
+		//right=Power
+		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
+
+		//Power
+		public RuleCall getRightPowerParserRuleCall_1_2_0() { return cRightPowerParserRuleCall_1_2_0; }
 	}
 
-	public class ArithmeticsElements extends AbstractParserRuleElementFinder {
-		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Arithmetics");
+	public class PowerElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Power");
 		private final Group cGroup = (Group)rule.eContents().get(1);
-		private final Action cExpressionAction_0 = (Action)cGroup.eContents().get(0);
-		private final RuleCall cDECIMALParserRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
+		private final RuleCall cAtomParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Action cPowerBaseAction_1_0 = (Action)cGroup_1.eContents().get(0);
+		private final Keyword cCircumflexAccentKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
+		private final Assignment cExponentAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
+		private final RuleCall cExponentAtomParserRuleCall_1_2_0 = (RuleCall)cExponentAssignment_1_2.eContents().get(0);
 		
-		//Arithmetics returns Expression:
-		//
-		//	{Expression} DECIMAL;
+		//Power returns Expression:
+		//	Atom ({Power.base=current} "^" exponent=Atom)*;
 		public ParserRule getRule() { return rule; }
 
-		//{Expression} DECIMAL
+		//Atom ({Power.base=current} "^" exponent=Atom)*
 		public Group getGroup() { return cGroup; }
 
-		//{Expression}
-		public Action getExpressionAction_0() { return cExpressionAction_0; }
+		//Atom
+		public RuleCall getAtomParserRuleCall_0() { return cAtomParserRuleCall_0; }
+
+		//({Power.base=current} "^" exponent=Atom)*
+		public Group getGroup_1() { return cGroup_1; }
+
+		//{Power.base=current}
+		public Action getPowerBaseAction_1_0() { return cPowerBaseAction_1_0; }
+
+		//"^"
+		public Keyword getCircumflexAccentKeyword_1_1() { return cCircumflexAccentKeyword_1_1; }
+
+		//exponent=Atom
+		public Assignment getExponentAssignment_1_2() { return cExponentAssignment_1_2; }
 
-		//DECIMAL
-		public RuleCall getDECIMALParserRuleCall_1() { return cDECIMALParserRuleCall_1; }
+		//Atom
+		public RuleCall getExponentAtomParserRuleCall_1_2_0() { return cExponentAtomParserRuleCall_1_2_0; }
 	}
 
-	public class StringsElements extends AbstractParserRuleElementFinder {
-		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Strings");
-		private final Group cGroup = (Group)rule.eContents().get(1);
-		private final Action cExpressionAction_0 = (Action)cGroup.eContents().get(0);
-		private final RuleCall cE_STRINGParserRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
+	public class AtomElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Atom");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cLiteralParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
+		private final Keyword cLeftParenthesisKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
+		private final RuleCall cRootExpressionParserRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+		private final Keyword cRightParenthesisKeyword_1_2 = (Keyword)cGroup_1.eContents().get(2);
+		private final RuleCall cFunctionParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
 		
-		//Strings returns Expression:
-		//
-		//	{Expression} E_STRING;
+		//Atom returns Expression:
+		//	Literal | "(" RootExpression ")" | Function;
 		public ParserRule getRule() { return rule; }
 
-		//{Expression} E_STRING
-		public Group getGroup() { return cGroup; }
+		//Literal | "(" RootExpression ")" | Function
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//Literal
+		public RuleCall getLiteralParserRuleCall_0() { return cLiteralParserRuleCall_0; }
+
+		//"(" RootExpression ")"
+		public Group getGroup_1() { return cGroup_1; }
 
-		//{Expression}
-		public Action getExpressionAction_0() { return cExpressionAction_0; }
+		//"("
+		public Keyword getLeftParenthesisKeyword_1_0() { return cLeftParenthesisKeyword_1_0; }
+
+		//RootExpression
+		public RuleCall getRootExpressionParserRuleCall_1_1() { return cRootExpressionParserRuleCall_1_1; }
+
+		//")"
+		public Keyword getRightParenthesisKeyword_1_2() { return cRightParenthesisKeyword_1_2; }
 
-		//E_STRING
-		public RuleCall getE_STRINGParserRuleCall_1() { return cE_STRINGParserRuleCall_1; }
+		//Function
+		public RuleCall getFunctionParserRuleCall_2() { return cFunctionParserRuleCall_2; }
 	}
 
-	public class DECIMALElements extends AbstractParserRuleElementFinder {
-		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "DECIMAL");
+	public class FunctionElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Function");
 		private final Group cGroup = (Group)rule.eContents().get(1);
-		private final Keyword cHyphenMinusKeyword_0 = (Keyword)cGroup.eContents().get(0);
-		private final RuleCall cINTTerminalRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
+		private final Assignment cNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final RuleCall cNameIDTerminalRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
+		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
 		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
-		private final Keyword cFullStopKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
-		private final RuleCall cINTTerminalRuleCall_2_1 = (RuleCall)cGroup_2.eContents().get(1);
+		private final Assignment cParametersAssignment_2_0 = (Assignment)cGroup_2.eContents().get(0);
+		private final RuleCall cParametersRootExpressionParserRuleCall_2_0_0 = (RuleCall)cParametersAssignment_2_0.eContents().get(0);
+		private final Group cGroup_2_1 = (Group)cGroup_2.eContents().get(1);
+		private final Keyword cCommaKeyword_2_1_0 = (Keyword)cGroup_2_1.eContents().get(0);
+		private final Assignment cParametersAssignment_2_1_1 = (Assignment)cGroup_2_1.eContents().get(1);
+		private final RuleCall cParametersRootExpressionParserRuleCall_2_1_1_0 = (RuleCall)cParametersAssignment_2_1_1.eContents().get(0);
+		private final Keyword cRightParenthesisKeyword_3 = (Keyword)cGroup.eContents().get(3);
 		
-		//DECIMAL returns ecore::EBigDecimal:
-		//
-		//	"-"? INT ("." INT)?;
+		//Function:
+		//	name=ID "(" (parameters+=RootExpression ("," parameters+=RootExpression)*)? ")";
 		public ParserRule getRule() { return rule; }
 
-		//"-"? INT ("." INT)?
+		//name=ID "(" (parameters+=RootExpression ("," parameters+=RootExpression)*)? ")"
 		public Group getGroup() { return cGroup; }
 
-		//"-"?
-		public Keyword getHyphenMinusKeyword_0() { return cHyphenMinusKeyword_0; }
+		//name=ID
+		public Assignment getNameAssignment_0() { return cNameAssignment_0; }
 
-		//INT
-		public RuleCall getINTTerminalRuleCall_1() { return cINTTerminalRuleCall_1; }
+		//ID
+		public RuleCall getNameIDTerminalRuleCall_0_0() { return cNameIDTerminalRuleCall_0_0; }
+
+		//"("
+		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }
 
-		//("." INT)?
+		//(parameters+=RootExpression ("," parameters+=RootExpression)*)?
 		public Group getGroup_2() { return cGroup_2; }
 
-		//"."
-		public Keyword getFullStopKeyword_2_0() { return cFullStopKeyword_2_0; }
+		//parameters+=RootExpression
+		public Assignment getParametersAssignment_2_0() { return cParametersAssignment_2_0; }
 
-		//INT
-		public RuleCall getINTTerminalRuleCall_2_1() { return cINTTerminalRuleCall_2_1; }
+		//RootExpression
+		public RuleCall getParametersRootExpressionParserRuleCall_2_0_0() { return cParametersRootExpressionParserRuleCall_2_0_0; }
+
+		//("," parameters+=RootExpression)*
+		public Group getGroup_2_1() { return cGroup_2_1; }
+
+		//","
+		public Keyword getCommaKeyword_2_1_0() { return cCommaKeyword_2_1_0; }
+
+		//parameters+=RootExpression
+		public Assignment getParametersAssignment_2_1_1() { return cParametersAssignment_2_1_1; }
+
+		//RootExpression
+		public RuleCall getParametersRootExpressionParserRuleCall_2_1_1_0() { return cParametersRootExpressionParserRuleCall_2_1_1_0; }
+
+		//")"
+		public Keyword getRightParenthesisKeyword_3() { return cRightParenthesisKeyword_3; }
 	}
 
-	public class E_STRINGElements extends AbstractParserRuleElementFinder {
-		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "E_STRING");
+	public class LiteralElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Literal");
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
-		private final RuleCall cSTRINGTerminalRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
-		private final RuleCall cIDTerminalRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		private final RuleCall cNumberLiteralParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cBooleanLiteralParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		private final RuleCall cFormalParameterParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
 		
-		//E_STRING returns ecore::EString:
-		//
-		//	STRING | ID;
+		//Literal returns Expression:
+		//	NumberLiteral | BooleanLiteral | FormalParameter;
 		public ParserRule getRule() { return rule; }
 
-		//STRING | ID
+		//NumberLiteral | BooleanLiteral | FormalParameter
 		public Alternatives getAlternatives() { return cAlternatives; }
 
-		//STRING
-		public RuleCall getSTRINGTerminalRuleCall_0() { return cSTRINGTerminalRuleCall_0; }
+		//NumberLiteral
+		public RuleCall getNumberLiteralParserRuleCall_0() { return cNumberLiteralParserRuleCall_0; }
 
-		//ID
-		public RuleCall getIDTerminalRuleCall_1() { return cIDTerminalRuleCall_1; }
+		//BooleanLiteral
+		public RuleCall getBooleanLiteralParserRuleCall_1() { return cBooleanLiteralParserRuleCall_1; }
+
+		//FormalParameter
+		public RuleCall getFormalParameterParserRuleCall_2() { return cFormalParameterParserRuleCall_2; }
 	}
 
-	public class OperationsElements extends AbstractParserRuleElementFinder {
-		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Operations");
-		private final Assignment cTermOperationsAssignment = (Assignment)rule.eContents().get(1);
-		private final RuleCall cTermOperationsOperationsTypeEnumRuleCall_0 = (RuleCall)cTermOperationsAssignment.eContents().get(0);
+	public class FormalParameterElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "FormalParameter");
+		private final Assignment cValueAssignment = (Assignment)rule.eContents().get(1);
+		private final RuleCall cValueEStringParserRuleCall_0 = (RuleCall)cValueAssignment.eContents().get(0);
 		
-		//Operations returns Expression:
-		//
-		//	termOperations=OperationsType;
+		//FormalParameter:
+		//	value=EString;
 		public ParserRule getRule() { return rule; }
 
-		//termOperations=OperationsType
-		public Assignment getTermOperationsAssignment() { return cTermOperationsAssignment; }
+		//value=EString
+		public Assignment getValueAssignment() { return cValueAssignment; }
 
-		//OperationsType
-		public RuleCall getTermOperationsOperationsTypeEnumRuleCall_0() { return cTermOperationsOperationsTypeEnumRuleCall_0; }
+		//EString
+		public RuleCall getValueEStringParserRuleCall_0() { return cValueEStringParserRuleCall_0; }
+	}
+
+	public class BooleanLiteralElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "BooleanLiteral");
+		private final Assignment cValueAssignment = (Assignment)rule.eContents().get(1);
+		private final RuleCall cValueEBooleanParserRuleCall_0 = (RuleCall)cValueAssignment.eContents().get(0);
+		
+		//BooleanLiteral:
+		//	value=EBoolean;
+		public ParserRule getRule() { return rule; }
+
+		//value=EBoolean
+		public Assignment getValueAssignment() { return cValueAssignment; }
+
+		//EBoolean
+		public RuleCall getValueEBooleanParserRuleCall_0() { return cValueEBooleanParserRuleCall_0; }
+	}
+
+	public class NumberLiteralElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "NumberLiteral");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cIntLiteralParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cDoubleLiteralParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		
+		//NumberLiteral returns Expression:
+		//	IntLiteral | DoubleLiteral;
+		public ParserRule getRule() { return rule; }
+
+		//IntLiteral | DoubleLiteral
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//IntLiteral
+		public RuleCall getIntLiteralParserRuleCall_0() { return cIntLiteralParserRuleCall_0; }
+
+		//DoubleLiteral
+		public RuleCall getDoubleLiteralParserRuleCall_1() { return cDoubleLiteralParserRuleCall_1; }
+	}
+
+	public class IntLiteralElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "IntLiteral");
+		private final Assignment cValueAssignment = (Assignment)rule.eContents().get(1);
+		private final RuleCall cValueIntegerParserRuleCall_0 = (RuleCall)cValueAssignment.eContents().get(0);
+		
+		//IntLiteral:
+		//	value=Integer;
+		public ParserRule getRule() { return rule; }
+
+		//value=Integer
+		public Assignment getValueAssignment() { return cValueAssignment; }
+
+		//Integer
+		public RuleCall getValueIntegerParserRuleCall_0() { return cValueIntegerParserRuleCall_0; }
+	}
+
+	public class DoubleLiteralElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "DoubleLiteral");
+		private final Assignment cValueAssignment = (Assignment)rule.eContents().get(1);
+		private final RuleCall cValueDoubleParserRuleCall_0 = (RuleCall)cValueAssignment.eContents().get(0);
+		
+		//DoubleLiteral:
+		//	value=Double;
+		public ParserRule getRule() { return rule; }
+
+		//value=Double
+		public Assignment getValueAssignment() { return cValueAssignment; }
+
+		//Double
+		public RuleCall getValueDoubleParserRuleCall_0() { return cValueDoubleParserRuleCall_0; }
 	}
 	
 	
-	public class OperationsTypeElements extends AbstractEnumRuleElementFinder {
-		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "OperationsType");
+	public class ProductOperationElements extends AbstractEnumRuleElementFinder {
+		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "ProductOperation");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final EnumLiteralDeclaration cMULTEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
+		private final Keyword cMULTAsteriskKeyword_0_0 = (Keyword)cMULTEnumLiteralDeclaration_0.eContents().get(0);
+		private final EnumLiteralDeclaration cDIVEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
+		private final Keyword cDIVSolidusKeyword_1_0 = (Keyword)cDIVEnumLiteralDeclaration_1.eContents().get(0);
+		private final EnumLiteralDeclaration cMODEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
+		private final Keyword cMODPercentSignKeyword_2_0 = (Keyword)cMODEnumLiteralDeclaration_2.eContents().get(0);
+		
+		//enum ProductOperation:
+		//	MULT="*" | DIV="/" | MOD="%";
+		public EnumRule getRule() { return rule; }
+
+		//MULT="*" | DIV="/" | MOD="%"
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//MULT="*"
+		public EnumLiteralDeclaration getMULTEnumLiteralDeclaration_0() { return cMULTEnumLiteralDeclaration_0; }
+
+		//"*"
+		public Keyword getMULTAsteriskKeyword_0_0() { return cMULTAsteriskKeyword_0_0; }
+
+		//DIV="/"
+		public EnumLiteralDeclaration getDIVEnumLiteralDeclaration_1() { return cDIVEnumLiteralDeclaration_1; }
+
+		//"/"
+		public Keyword getDIVSolidusKeyword_1_0() { return cDIVSolidusKeyword_1_0; }
+
+		//MOD="%"
+		public EnumLiteralDeclaration getMODEnumLiteralDeclaration_2() { return cMODEnumLiteralDeclaration_2; }
+
+		//"%"
+		public Keyword getMODPercentSignKeyword_2_0() { return cMODPercentSignKeyword_2_0; }
+	}
+
+	public class TermOperationElements extends AbstractEnumRuleElementFinder {
+		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "TermOperation");
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
 		private final EnumLiteralDeclaration cADDEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
 		private final Keyword cADDPlusSignKeyword_0_0 = (Keyword)cADDEnumLiteralDeclaration_0.eContents().get(0);
 		private final EnumLiteralDeclaration cSUBEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
 		private final Keyword cSUBHyphenMinusKeyword_1_0 = (Keyword)cSUBEnumLiteralDeclaration_1.eContents().get(0);
-		private final EnumLiteralDeclaration cMULTEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
-		private final Keyword cMULTAsteriskKeyword_2_0 = (Keyword)cMULTEnumLiteralDeclaration_2.eContents().get(0);
-		private final EnumLiteralDeclaration cDIVEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
-		private final Keyword cDIVSolidusKeyword_3_0 = (Keyword)cDIVEnumLiteralDeclaration_3.eContents().get(0);
-		private final EnumLiteralDeclaration cMODEnumLiteralDeclaration_4 = (EnumLiteralDeclaration)cAlternatives.eContents().get(4);
-		private final Keyword cMODPercentSignKeyword_4_0 = (Keyword)cMODEnumLiteralDeclaration_4.eContents().get(0);
-		private final EnumLiteralDeclaration cGREATEREnumLiteralDeclaration_5 = (EnumLiteralDeclaration)cAlternatives.eContents().get(5);
-		private final Keyword cGREATERGreaterThanSignKeyword_5_0 = (Keyword)cGREATEREnumLiteralDeclaration_5.eContents().get(0);
-		private final EnumLiteralDeclaration cLESSEnumLiteralDeclaration_6 = (EnumLiteralDeclaration)cAlternatives.eContents().get(6);
-		private final Keyword cLESSLessThanSignKeyword_6_0 = (Keyword)cLESSEnumLiteralDeclaration_6.eContents().get(0);
-		private final EnumLiteralDeclaration cEQUALSEnumLiteralDeclaration_7 = (EnumLiteralDeclaration)cAlternatives.eContents().get(7);
-		private final Keyword cEQUALSEqualsSignKeyword_7_0 = (Keyword)cEQUALSEnumLiteralDeclaration_7.eContents().get(0);
-		private final EnumLiteralDeclaration cNOTEQUALEnumLiteralDeclaration_8 = (EnumLiteralDeclaration)cAlternatives.eContents().get(8);
-		private final Keyword cNOTEQUALExclamationMarkEqualsSignKeyword_8_0 = (Keyword)cNOTEQUALEnumLiteralDeclaration_8.eContents().get(0);
-		private final EnumLiteralDeclaration cLESSEQUALEnumLiteralDeclaration_9 = (EnumLiteralDeclaration)cAlternatives.eContents().get(9);
-		private final Keyword cLESSEQUALLessThanSignEqualsSignKeyword_9_0 = (Keyword)cLESSEQUALEnumLiteralDeclaration_9.eContents().get(0);
-		private final EnumLiteralDeclaration cGREATEREQUALEnumLiteralDeclaration_10 = (EnumLiteralDeclaration)cAlternatives.eContents().get(10);
-		private final Keyword cGREATEREQUALGreaterThanSignEqualsSignKeyword_10_0 = (Keyword)cGREATEREQUALEnumLiteralDeclaration_10.eContents().get(0);
-		private final EnumLiteralDeclaration cANDEnumLiteralDeclaration_11 = (EnumLiteralDeclaration)cAlternatives.eContents().get(11);
-		private final Keyword cANDANDKeyword_11_0 = (Keyword)cANDEnumLiteralDeclaration_11.eContents().get(0);
-		private final EnumLiteralDeclaration cOREnumLiteralDeclaration_12 = (EnumLiteralDeclaration)cAlternatives.eContents().get(12);
-		private final Keyword cORORKeyword_12_0 = (Keyword)cOREnumLiteralDeclaration_12.eContents().get(0);
-		private final EnumLiteralDeclaration cXOREnumLiteralDeclaration_13 = (EnumLiteralDeclaration)cAlternatives.eContents().get(13);
-		private final Keyword cXORXORKeyword_13_0 = (Keyword)cXOREnumLiteralDeclaration_13.eContents().get(0);
 		
-		//enum OperationsType:
-		//
-		//	ADD="+" | SUB="-" | MULT="*" | DIV="/" | MOD="%" | GREATER=">" | LESS="<" | EQUALS="=" | NOTEQUAL="!=" |
-		//
-		//	LESSEQUAL="<=" | GREATEREQUAL=">=" | AND | OR | XOR;
+		//enum TermOperation:
+		//	ADD="+" | SUB="-";
 		public EnumRule getRule() { return rule; }
 
-		//ADD="+" | SUB="-" | MULT="*" | DIV="/" | MOD="%" | GREATER=">" | LESS="<" | EQUALS="=" | NOTEQUAL="!=" | LESSEQUAL="<="
-		//
-		//| GREATEREQUAL=">=" | AND | OR | XOR
+		//ADD="+" | SUB="-"
 		public Alternatives getAlternatives() { return cAlternatives; }
 
 		//ADD="+"
@@ -283,89 +683,129 @@ public class MyDslGrammarAccess extends AbstractGrammarElementFinder {
 
 		//"-"
 		public Keyword getSUBHyphenMinusKeyword_1_0() { return cSUBHyphenMinusKeyword_1_0; }
+	}
 
-		//MULT="*"
-		public EnumLiteralDeclaration getMULTEnumLiteralDeclaration_2() { return cMULTEnumLiteralDeclaration_2; }
-
-		//"*"
-		public Keyword getMULTAsteriskKeyword_2_0() { return cMULTAsteriskKeyword_2_0; }
-
-		//DIV="/"
-		public EnumLiteralDeclaration getDIVEnumLiteralDeclaration_3() { return cDIVEnumLiteralDeclaration_3; }
-
-		//"/"
-		public Keyword getDIVSolidusKeyword_3_0() { return cDIVSolidusKeyword_3_0; }
-
-		//MOD="%"
-		public EnumLiteralDeclaration getMODEnumLiteralDeclaration_4() { return cMODEnumLiteralDeclaration_4; }
+	public class CompareOperationElements extends AbstractEnumRuleElementFinder {
+		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "CompareOperation");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final EnumLiteralDeclaration cGREATEREnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
+		private final Keyword cGREATERGreaterThanSignKeyword_0_0 = (Keyword)cGREATEREnumLiteralDeclaration_0.eContents().get(0);
+		private final EnumLiteralDeclaration cLESSEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
+		private final Keyword cLESSLessThanSignKeyword_1_0 = (Keyword)cLESSEnumLiteralDeclaration_1.eContents().get(0);
+		private final EnumLiteralDeclaration cEQUALSEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
+		private final Keyword cEQUALSEqualsSignKeyword_2_0 = (Keyword)cEQUALSEnumLiteralDeclaration_2.eContents().get(0);
+		private final EnumLiteralDeclaration cNOTEQUALEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
+		private final Keyword cNOTEQUALExclamationMarkEqualsSignKeyword_3_0 = (Keyword)cNOTEQUALEnumLiteralDeclaration_3.eContents().get(0);
+		private final EnumLiteralDeclaration cLESSEQUALEnumLiteralDeclaration_4 = (EnumLiteralDeclaration)cAlternatives.eContents().get(4);
+		private final Keyword cLESSEQUALLessThanSignEqualsSignKeyword_4_0 = (Keyword)cLESSEQUALEnumLiteralDeclaration_4.eContents().get(0);
+		private final EnumLiteralDeclaration cGREATEREQUALEnumLiteralDeclaration_5 = (EnumLiteralDeclaration)cAlternatives.eContents().get(5);
+		private final Keyword cGREATEREQUALGreaterThanSignEqualsSignKeyword_5_0 = (Keyword)cGREATEREQUALEnumLiteralDeclaration_5.eContents().get(0);
+		
+		//enum CompareOperation:
+		//	GREATER=">" | LESS="<" | EQUALS="=" | NOTEQUAL="!=" | LESSEQUAL="<=" | GREATEREQUAL=">=";
+		public EnumRule getRule() { return rule; }
 
-		//"%"
-		public Keyword getMODPercentSignKeyword_4_0() { return cMODPercentSignKeyword_4_0; }
+		//GREATER=">" | LESS="<" | EQUALS="=" | NOTEQUAL="!=" | LESSEQUAL="<=" | GREATEREQUAL=">="
+		public Alternatives getAlternatives() { return cAlternatives; }
 
 		//GREATER=">"
-		public EnumLiteralDeclaration getGREATEREnumLiteralDeclaration_5() { return cGREATEREnumLiteralDeclaration_5; }
+		public EnumLiteralDeclaration getGREATEREnumLiteralDeclaration_0() { return cGREATEREnumLiteralDeclaration_0; }
 
 		//">"
-		public Keyword getGREATERGreaterThanSignKeyword_5_0() { return cGREATERGreaterThanSignKeyword_5_0; }
+		public Keyword getGREATERGreaterThanSignKeyword_0_0() { return cGREATERGreaterThanSignKeyword_0_0; }
 
 		//LESS="<"
-		public EnumLiteralDeclaration getLESSEnumLiteralDeclaration_6() { return cLESSEnumLiteralDeclaration_6; }
+		public EnumLiteralDeclaration getLESSEnumLiteralDeclaration_1() { return cLESSEnumLiteralDeclaration_1; }
 
 		//"<"
-		public Keyword getLESSLessThanSignKeyword_6_0() { return cLESSLessThanSignKeyword_6_0; }
+		public Keyword getLESSLessThanSignKeyword_1_0() { return cLESSLessThanSignKeyword_1_0; }
 
 		//EQUALS="="
-		public EnumLiteralDeclaration getEQUALSEnumLiteralDeclaration_7() { return cEQUALSEnumLiteralDeclaration_7; }
+		public EnumLiteralDeclaration getEQUALSEnumLiteralDeclaration_2() { return cEQUALSEnumLiteralDeclaration_2; }
 
 		//"="
-		public Keyword getEQUALSEqualsSignKeyword_7_0() { return cEQUALSEqualsSignKeyword_7_0; }
+		public Keyword getEQUALSEqualsSignKeyword_2_0() { return cEQUALSEqualsSignKeyword_2_0; }
 
 		//NOTEQUAL="!="
-		public EnumLiteralDeclaration getNOTEQUALEnumLiteralDeclaration_8() { return cNOTEQUALEnumLiteralDeclaration_8; }
+		public EnumLiteralDeclaration getNOTEQUALEnumLiteralDeclaration_3() { return cNOTEQUALEnumLiteralDeclaration_3; }
 
 		//"!="
-		public Keyword getNOTEQUALExclamationMarkEqualsSignKeyword_8_0() { return cNOTEQUALExclamationMarkEqualsSignKeyword_8_0; }
+		public Keyword getNOTEQUALExclamationMarkEqualsSignKeyword_3_0() { return cNOTEQUALExclamationMarkEqualsSignKeyword_3_0; }
 
 		//LESSEQUAL="<="
-		public EnumLiteralDeclaration getLESSEQUALEnumLiteralDeclaration_9() { return cLESSEQUALEnumLiteralDeclaration_9; }
+		public EnumLiteralDeclaration getLESSEQUALEnumLiteralDeclaration_4() { return cLESSEQUALEnumLiteralDeclaration_4; }
 
 		//"<="
-		public Keyword getLESSEQUALLessThanSignEqualsSignKeyword_9_0() { return cLESSEQUALLessThanSignEqualsSignKeyword_9_0; }
+		public Keyword getLESSEQUALLessThanSignEqualsSignKeyword_4_0() { return cLESSEQUALLessThanSignEqualsSignKeyword_4_0; }
 
 		//GREATEREQUAL=">="
-		public EnumLiteralDeclaration getGREATEREQUALEnumLiteralDeclaration_10() { return cGREATEREQUALEnumLiteralDeclaration_10; }
+		public EnumLiteralDeclaration getGREATEREQUALEnumLiteralDeclaration_5() { return cGREATEREQUALEnumLiteralDeclaration_5; }
 
 		//">="
-		public Keyword getGREATEREQUALGreaterThanSignEqualsSignKeyword_10_0() { return cGREATEREQUALGreaterThanSignEqualsSignKeyword_10_0; }
+		public Keyword getGREATEREQUALGreaterThanSignEqualsSignKeyword_5_0() { return cGREATEREQUALGreaterThanSignEqualsSignKeyword_5_0; }
+	}
+
+	public class BooleanOperationElements extends AbstractEnumRuleElementFinder {
+		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "BooleanOperation");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final EnumLiteralDeclaration cANDEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
+		private final Keyword cANDANDKeyword_0_0 = (Keyword)cANDEnumLiteralDeclaration_0.eContents().get(0);
+		private final EnumLiteralDeclaration cOREnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
+		private final Keyword cORORKeyword_1_0 = (Keyword)cOREnumLiteralDeclaration_1.eContents().get(0);
+		private final EnumLiteralDeclaration cXOREnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
+		private final Keyword cXORXORKeyword_2_0 = (Keyword)cXOREnumLiteralDeclaration_2.eContents().get(0);
+		
+		//enum BooleanOperation:
+		//	AND | OR | XOR;
+		public EnumRule getRule() { return rule; }
+
+		//AND | OR | XOR
+		public Alternatives getAlternatives() { return cAlternatives; }
 
 		//AND
-		public EnumLiteralDeclaration getANDEnumLiteralDeclaration_11() { return cANDEnumLiteralDeclaration_11; }
+		public EnumLiteralDeclaration getANDEnumLiteralDeclaration_0() { return cANDEnumLiteralDeclaration_0; }
 
 		//"AND"
-		public Keyword getANDANDKeyword_11_0() { return cANDANDKeyword_11_0; }
+		public Keyword getANDANDKeyword_0_0() { return cANDANDKeyword_0_0; }
 
 		//OR
-		public EnumLiteralDeclaration getOREnumLiteralDeclaration_12() { return cOREnumLiteralDeclaration_12; }
+		public EnumLiteralDeclaration getOREnumLiteralDeclaration_1() { return cOREnumLiteralDeclaration_1; }
 
 		//"OR"
-		public Keyword getORORKeyword_12_0() { return cORORKeyword_12_0; }
+		public Keyword getORORKeyword_1_0() { return cORORKeyword_1_0; }
 
 		//XOR
-		public EnumLiteralDeclaration getXOREnumLiteralDeclaration_13() { return cXOREnumLiteralDeclaration_13; }
+		public EnumLiteralDeclaration getXOREnumLiteralDeclaration_2() { return cXOREnumLiteralDeclaration_2; }
 
 		//"XOR"
-		public Keyword getXORXORKeyword_13_0() { return cXORXORKeyword_13_0; }
+		public Keyword getXORXORKeyword_2_0() { return cXORXORKeyword_2_0; }
 	}
 	
 	private ModelElements pModel;
+	private DoubleElements pDouble;
+	private IntegerElements pInteger;
+	private EStringElements pEString;
+	private EBooleanElements pEBoolean;
+	private ProductOperationElements unknownRuleProductOperation;
+	private TermOperationElements unknownRuleTermOperation;
+	private CompareOperationElements unknownRuleCompareOperation;
+	private BooleanOperationElements unknownRuleBooleanOperation;
+	private RootExpressionElements pRootExpression;
+	private IfElseExpressionElements pIfElseExpression;
+	private BinaryBooleanExpressionElements pBinaryBooleanExpression;
+	private UnaryBooleanExpressionElements pUnaryBooleanExpression;
+	private ComparisonElements pComparison;
 	private TermElements pTerm;
-	private TypesElements pTypes;
-	private ArithmeticsElements pArithmetics;
-	private StringsElements pStrings;
-	private DECIMALElements pDECIMAL;
-	private E_STRINGElements pE_STRING;
-	private OperationsElements pOperations;
-	private OperationsTypeElements unknownRuleOperationsType;
+	private ProductElements pProduct;
+	private PowerElements pPower;
+	private AtomElements pAtom;
+	private FunctionElements pFunction;
+	private LiteralElements pLiteral;
+	private FormalParameterElements pFormalParameter;
+	private BooleanLiteralElements pBooleanLiteral;
+	private NumberLiteralElements pNumberLiteral;
+	private IntLiteralElements pIntLiteral;
+	private DoubleLiteralElements pDoubleLiteral;
 	
 	private final Grammar grammar;
 
@@ -406,8 +846,7 @@ public class MyDslGrammarAccess extends AbstractGrammarElementFinder {
 
 	
 	//Model:
-	//
-	//	terms+=Term;
+	//	terms=IfElseExpression;
 	public ModelElements getModelAccess() {
 		return (pModel != null) ? pModel : (pModel = new ModelElements());
 	}
@@ -416,9 +855,142 @@ public class MyDslGrammarAccess extends AbstractGrammarElementFinder {
 		return getModelAccess().getRule();
 	}
 
-	//Term returns Expression:
+	//Double returns ecore::EBigDecimal:
+	//	"-"? INT "." // (('e'|'E') '-'? INT)?
 	//
-	//	Types ({Term.left=current} Operations=Operations right=Types)*;
+	//	INT;
+	public DoubleElements getDoubleAccess() {
+		return (pDouble != null) ? pDouble : (pDouble = new DoubleElements());
+	}
+	
+	public ParserRule getDoubleRule() {
+		return getDoubleAccess().getRule();
+	}
+
+	//Integer returns ecore::EBigInteger:
+	//	"-"? INT;
+	public IntegerElements getIntegerAccess() {
+		return (pInteger != null) ? pInteger : (pInteger = new IntegerElements());
+	}
+	
+	public ParserRule getIntegerRule() {
+		return getIntegerAccess().getRule();
+	}
+
+	//EString returns ecore::EString:
+	//	STRING | ID;
+	public EStringElements getEStringAccess() {
+		return (pEString != null) ? pEString : (pEString = new EStringElements());
+	}
+	
+	public ParserRule getEStringRule() {
+		return getEStringAccess().getRule();
+	}
+
+	//EBoolean returns ecore::EBoolean:
+	//	"true" | "false";
+	public EBooleanElements getEBooleanAccess() {
+		return (pEBoolean != null) ? pEBoolean : (pEBoolean = new EBooleanElements());
+	}
+	
+	public ParserRule getEBooleanRule() {
+		return getEBooleanAccess().getRule();
+	}
+
+	//enum ProductOperation:
+	//	MULT="*" | DIV="/" | MOD="%";
+	public ProductOperationElements getProductOperationAccess() {
+		return (unknownRuleProductOperation != null) ? unknownRuleProductOperation : (unknownRuleProductOperation = new ProductOperationElements());
+	}
+	
+	public EnumRule getProductOperationRule() {
+		return getProductOperationAccess().getRule();
+	}
+
+	//enum TermOperation:
+	//	ADD="+" | SUB="-";
+	public TermOperationElements getTermOperationAccess() {
+		return (unknownRuleTermOperation != null) ? unknownRuleTermOperation : (unknownRuleTermOperation = new TermOperationElements());
+	}
+	
+	public EnumRule getTermOperationRule() {
+		return getTermOperationAccess().getRule();
+	}
+
+	//enum CompareOperation:
+	//	GREATER=">" | LESS="<" | EQUALS="=" | NOTEQUAL="!=" | LESSEQUAL="<=" | GREATEREQUAL=">=";
+	public CompareOperationElements getCompareOperationAccess() {
+		return (unknownRuleCompareOperation != null) ? unknownRuleCompareOperation : (unknownRuleCompareOperation = new CompareOperationElements());
+	}
+	
+	public EnumRule getCompareOperationRule() {
+		return getCompareOperationAccess().getRule();
+	}
+
+	//enum BooleanOperation:
+	//	AND | OR | XOR;
+	public BooleanOperationElements getBooleanOperationAccess() {
+		return (unknownRuleBooleanOperation != null) ? unknownRuleBooleanOperation : (unknownRuleBooleanOperation = new BooleanOperationElements());
+	}
+	
+	public EnumRule getBooleanOperationRule() {
+		return getBooleanOperationAccess().getRule();
+	}
+
+	//RootExpression returns Expression:
+	//	IfElseExpression;
+	public RootExpressionElements getRootExpressionAccess() {
+		return (pRootExpression != null) ? pRootExpression : (pRootExpression = new RootExpressionElements());
+	}
+	
+	public ParserRule getRootExpressionRule() {
+		return getRootExpressionAccess().getRule();
+	}
+
+	//IfElseExpression returns Expression:
+	//	BinaryBooleanExpression ({IfElseExpression.condition=current} "?" trueExp=IfElseExpression ":"
+	//	falseExp=IfElseExpression)?;
+	public IfElseExpressionElements getIfElseExpressionAccess() {
+		return (pIfElseExpression != null) ? pIfElseExpression : (pIfElseExpression = new IfElseExpressionElements());
+	}
+	
+	public ParserRule getIfElseExpressionRule() {
+		return getIfElseExpressionAccess().getRule();
+	}
+
+	//BinaryBooleanExpression returns Expression:
+	//	UnaryBooleanExpression ({BinaryBooleanExpression.left=current} operation=BooleanOperation
+	//	right=UnaryBooleanExpression)*;
+	public BinaryBooleanExpressionElements getBinaryBooleanExpressionAccess() {
+		return (pBinaryBooleanExpression != null) ? pBinaryBooleanExpression : (pBinaryBooleanExpression = new BinaryBooleanExpressionElements());
+	}
+	
+	public ParserRule getBinaryBooleanExpressionRule() {
+		return getBinaryBooleanExpressionAccess().getRule();
+	}
+
+	//UnaryBooleanExpression returns Expression:
+	//	"NOT" Comparison {UnaryBooleanExpression.inner=current} | Comparison;
+	public UnaryBooleanExpressionElements getUnaryBooleanExpressionAccess() {
+		return (pUnaryBooleanExpression != null) ? pUnaryBooleanExpression : (pUnaryBooleanExpression = new UnaryBooleanExpressionElements());
+	}
+	
+	public ParserRule getUnaryBooleanExpressionRule() {
+		return getUnaryBooleanExpressionAccess().getRule();
+	}
+
+	//Comparison returns Expression:
+	//	Term ({Comparison.left=current} operation=CompareOperation right=Term)*;
+	public ComparisonElements getComparisonAccess() {
+		return (pComparison != null) ? pComparison : (pComparison = new ComparisonElements());
+	}
+	
+	public ParserRule getComparisonRule() {
+		return getComparisonAccess().getRule();
+	}
+
+	//Term returns Expression:
+	//	Product ({Term.left=current} operation=TermOperation right=Product)*;
 	public TermElements getTermAccess() {
 		return (pTerm != null) ? pTerm : (pTerm = new TermElements());
 	}
@@ -427,131 +999,144 @@ public class MyDslGrammarAccess extends AbstractGrammarElementFinder {
 		return getTermAccess().getRule();
 	}
 
-	//Types returns Expression:
-	//
-	//	Arithmetics | Strings | "(" Term ")";
-	public TypesElements getTypesAccess() {
-		return (pTypes != null) ? pTypes : (pTypes = new TypesElements());
+	//Product returns Expression:
+	//	Power ({Product.left=current} operation=ProductOperation right=Power)*;
+	public ProductElements getProductAccess() {
+		return (pProduct != null) ? pProduct : (pProduct = new ProductElements());
 	}
 	
-	public ParserRule getTypesRule() {
-		return getTypesAccess().getRule();
+	public ParserRule getProductRule() {
+		return getProductAccess().getRule();
 	}
 
-	//Arithmetics returns Expression:
-	//
-	//	{Expression} DECIMAL;
-	public ArithmeticsElements getArithmeticsAccess() {
-		return (pArithmetics != null) ? pArithmetics : (pArithmetics = new ArithmeticsElements());
+	//Power returns Expression:
+	//	Atom ({Power.base=current} "^" exponent=Atom)*;
+	public PowerElements getPowerAccess() {
+		return (pPower != null) ? pPower : (pPower = new PowerElements());
 	}
 	
-	public ParserRule getArithmeticsRule() {
-		return getArithmeticsAccess().getRule();
+	public ParserRule getPowerRule() {
+		return getPowerAccess().getRule();
 	}
 
-	//Strings returns Expression:
-	//
-	//	{Expression} E_STRING;
-	public StringsElements getStringsAccess() {
-		return (pStrings != null) ? pStrings : (pStrings = new StringsElements());
+	//Atom returns Expression:
+	//	Literal | "(" RootExpression ")" | Function;
+	public AtomElements getAtomAccess() {
+		return (pAtom != null) ? pAtom : (pAtom = new AtomElements());
 	}
 	
-	public ParserRule getStringsRule() {
-		return getStringsAccess().getRule();
+	public ParserRule getAtomRule() {
+		return getAtomAccess().getRule();
 	}
 
-	//DECIMAL returns ecore::EBigDecimal:
-	//
-	//	"-"? INT ("." INT)?;
-	public DECIMALElements getDECIMALAccess() {
-		return (pDECIMAL != null) ? pDECIMAL : (pDECIMAL = new DECIMALElements());
+	//Function:
+	//	name=ID "(" (parameters+=RootExpression ("," parameters+=RootExpression)*)? ")";
+	public FunctionElements getFunctionAccess() {
+		return (pFunction != null) ? pFunction : (pFunction = new FunctionElements());
 	}
 	
-	public ParserRule getDECIMALRule() {
-		return getDECIMALAccess().getRule();
+	public ParserRule getFunctionRule() {
+		return getFunctionAccess().getRule();
 	}
 
-	//E_STRING returns ecore::EString:
-	//
-	//	STRING | ID;
-	public E_STRINGElements getE_STRINGAccess() {
-		return (pE_STRING != null) ? pE_STRING : (pE_STRING = new E_STRINGElements());
+	//Literal returns Expression:
+	//	NumberLiteral | BooleanLiteral | FormalParameter;
+	public LiteralElements getLiteralAccess() {
+		return (pLiteral != null) ? pLiteral : (pLiteral = new LiteralElements());
 	}
 	
-	public ParserRule getE_STRINGRule() {
-		return getE_STRINGAccess().getRule();
+	public ParserRule getLiteralRule() {
+		return getLiteralAccess().getRule();
 	}
 
-	//Operations returns Expression:
-	//
-	//	termOperations=OperationsType;
-	public OperationsElements getOperationsAccess() {
-		return (pOperations != null) ? pOperations : (pOperations = new OperationsElements());
+	//FormalParameter:
+	//	value=EString;
+	public FormalParameterElements getFormalParameterAccess() {
+		return (pFormalParameter != null) ? pFormalParameter : (pFormalParameter = new FormalParameterElements());
 	}
 	
-	public ParserRule getOperationsRule() {
-		return getOperationsAccess().getRule();
+	public ParserRule getFormalParameterRule() {
+		return getFormalParameterAccess().getRule();
 	}
 
-	//enum OperationsType:
-	//
-	//	ADD="+" | SUB="-" | MULT="*" | DIV="/" | MOD="%" | GREATER=">" | LESS="<" | EQUALS="=" | NOTEQUAL="!=" |
-	//
-	//	LESSEQUAL="<=" | GREATEREQUAL=">=" | AND | OR | XOR;
-	public OperationsTypeElements getOperationsTypeAccess() {
-		return (unknownRuleOperationsType != null) ? unknownRuleOperationsType : (unknownRuleOperationsType = new OperationsTypeElements());
+	//BooleanLiteral:
+	//	value=EBoolean;
+	public BooleanLiteralElements getBooleanLiteralAccess() {
+		return (pBooleanLiteral != null) ? pBooleanLiteral : (pBooleanLiteral = new BooleanLiteralElements());
+	}
+	
+	public ParserRule getBooleanLiteralRule() {
+		return getBooleanLiteralAccess().getRule();
+	}
+
+	//NumberLiteral returns Expression:
+	//	IntLiteral | DoubleLiteral;
+	public NumberLiteralElements getNumberLiteralAccess() {
+		return (pNumberLiteral != null) ? pNumberLiteral : (pNumberLiteral = new NumberLiteralElements());
+	}
+	
+	public ParserRule getNumberLiteralRule() {
+		return getNumberLiteralAccess().getRule();
+	}
+
+	//IntLiteral:
+	//	value=Integer;
+	public IntLiteralElements getIntLiteralAccess() {
+		return (pIntLiteral != null) ? pIntLiteral : (pIntLiteral = new IntLiteralElements());
+	}
+	
+	public ParserRule getIntLiteralRule() {
+		return getIntLiteralAccess().getRule();
+	}
+
+	//DoubleLiteral:
+	//	value=Double;
+	public DoubleLiteralElements getDoubleLiteralAccess() {
+		return (pDoubleLiteral != null) ? pDoubleLiteral : (pDoubleLiteral = new DoubleLiteralElements());
 	}
 	
-	public EnumRule getOperationsTypeRule() {
-		return getOperationsTypeAccess().getRule();
+	public ParserRule getDoubleLiteralRule() {
+		return getDoubleLiteralAccess().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/org.xtext.example.mydsl/src/org/xtext/example/mydsl/MyDsl.xtext b/org.xtext.example.mydsl/src/org/xtext/example/mydsl/MyDsl.xtext
index 9302cb5640996c73bede39c544dae55635370238..e0d2a67cd4d7550beac7061e809c9e383fc002a4 100644
--- a/org.xtext.example.mydsl/src/org/xtext/example/mydsl/MyDsl.xtext
+++ b/org.xtext.example.mydsl/src/org/xtext/example/mydsl/MyDsl.xtext
@@ -3,38 +3,91 @@ import "http://www.eclipse.org/emf/2002/Ecore" as ecore
 generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"
 
 Model:
-	terms+=Term;
+	terms=IfElseExpression;
 
-Term returns Expression:
-	Types ({Term.left=current} 
-	Operations=Operations
- 	right=Types)*
+Double returns ecore::EBigDecimal: 
+	'-'? INT '.' INT // (('e'|'E') '-'? INT)?
 ;
 
-Types returns Expression:
-	Arithmetics | Strings | '(' Term ')'
+Integer returns ecore::EBigInteger :
+	'-'? INT
 ;
+ 
+EString returns ecore::EString :
+	STRING | ID
+; 
 
-Arithmetics returns Expression:
-	{Expression}
-  DECIMAL ;
-  
-Strings returns Expression:
-	{Expression}
-	E_STRING
+EBoolean returns ecore::EBoolean:
+	'true' | 'false'
+;
+ 
+enum ProductOperation:
+	MULT='*'|DIV='/'|MOD='%'
+; 
+ 
+enum TermOperation:
+	ADD='+' | SUB='-' 
 ;
 
-DECIMAL returns ecore::EBigDecimal : '-'? INT ('.' INT)? ;
+enum CompareOperation:
+	GREATER='>' | LESS='<'|EQUALS='='|NOTEQUAL='!='|LESSEQUAL='<=' | GREATEREQUAL='>='
+; 
  
-E_STRING returns ecore::EString:
-	STRING | ID;
+enum BooleanOperation:
+	AND='AND' | OR='OR' | XOR='XOR'
+;
+
+RootExpression returns Expression:
+	IfElseExpression;
+
+IfElseExpression returns Expression:
+	BinaryBooleanExpression ({IfElseExpression.condition=current} '?' trueExp=IfElseExpression ':' falseExp=IfElseExpression)?;
+
+BinaryBooleanExpression returns Expression:
+	UnaryBooleanExpression ({BinaryBooleanExpression.left=current} operation=BooleanOperation right=UnaryBooleanExpression)*;
+
+UnaryBooleanExpression returns Expression:
+	('NOT' Comparison {UnaryBooleanExpression.inner=current}) | Comparison;
+
+Comparison returns Expression:
+	Term ({Comparison.left=current} operation=CompareOperation right=Term)*;
  
-Operations returns Expression:
-	termOperations = OperationsType;
+Term returns Expression:
+	Product ({Term.left=current} operation=TermOperation right=Product)*;
+
+Product returns Expression:
+	Power ({Product.left=current} operation=ProductOperation right=Power)*;
+
+Power returns Expression:
+	Atom ({Power.base=current} '^' exponent=Atom)*;
+
+Atom returns Expression:
+	Literal | '(' RootExpression ')' | Function;
+
+Function returns Function:
+	name=ID '(' (parameters+=RootExpression (',' parameters+=RootExpression)*)? ')';
 	
-enum OperationsType:
-	ADD='+' | SUB='-' | MULT='*'|DIV='/'|MOD='%' |
-	GREATER='>' | LESS='<'|EQUALS='='|NOTEQUAL='!='|LESSEQUAL='<=' | GREATEREQUAL='>='
-	| AND='AND' | OR='OR' | XOR='XOR';
+Literal returns Expression:
+	NumberLiteral | BooleanLiteral | FormalParameter
+;	
+
+FormalParameter:
+	value=EString
+;
+
+BooleanLiteral:
+	value=EBoolean
+;
+
+NumberLiteral returns Expression:
+	IntLiteral | DoubleLiteral
+;
+
+IntLiteral:
+	value=Integer
+;
+
+DoubleLiteral:
+	value=Double
+;
 
- 
\ No newline at end of file