Index: v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/validation/EbnfValidator.xtend
===================================================================
--- v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/validation/EbnfValidator.xtend	(revision 101)
+++ v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/validation/EbnfValidator.xtend	(revision 102)
@@ -42,4 +42,5 @@
 	//public  static final String duplicateSubRulesDescription = "A part the of rule is a duplicate";
 	public static final String nonUniqueNameDescription = "The rule has the same Name as the Rule in Line ";
+	public static final String wrongNumbering = "The rule numbering is wrong in Line ";
 
 	// ----------------------------------------------------------------------------------------------------
@@ -169,4 +170,33 @@
 
 	// ----------------------------------------------------------------------------------------------------
+	/*Checks if the rule numbering is correct:
+	 * 1. a ::= "foo"
+	 * 3. b ::= "bar"
+	 */
+	@Check
+	def void checkRuleNumbering(Rule rule) {
+		val EtsiBnf bnf = rule.eContainer.eContainer as EtsiBnf;
+		if (EbnfAnalysisUtils.getAllRules(bnf).indexOf(rule)+1 != rule.rulenumber) {
+			warning(wrongNumbering + NodeModelUtils.findActualNodeFor(rule).startLine,
+				EbnfPackage$Literals::RULE__RULENUMBER)
+		}
+	}
+
+	//alternative implementation, does not work for some reason
+	@Check
+	def void checkRuleNumberingG(EtsiBnf bnf) {
+//		var lastNumber = 0;
+//		for (r : EbnfAnalysisUtils.getAllRules(bnf)) {
+//			println(lastNumber + " : " + r.rulenumber)
+//			if (lastNumber!=0 && r.rulenumber != lastNumber+1) {
+//				warning(wrongNumbering + NodeModelUtils.findActualNodeFor(r).startLine,
+//					EbnfPackage$Literals::RULE__RULENUMBER)
+//			}
+//			lastNumber = r.rulenumber
+//		}
+	}
+
+
+	// ----------------------------------------------------------------------------------------------------
 	/*Checks if a Rule, except for the #1 is not referenced, e.g.:
 	 * a::= b
