From a939b843febd67f8665bfc41b04138930a6528b7 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Sat, 10 Jan 2015 12:27:37 +0100
Subject: [PATCH] make EndSymbol lex. smaller than any other and StartSymbol
 lex. bigger

---
 alib2data/src/alphabet/SymbolBase.h        | 2 +-
 alib2data/src/object/ObjectBase.h          | 4 ++--
 alib2data/test-src/alphabet/SymbolTest.cpp | 6 ++++++
 3 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/alib2data/src/alphabet/SymbolBase.h b/alib2data/src/alphabet/SymbolBase.h
index b838d34298..6bbf45e44b 100644
--- a/alib2data/src/alphabet/SymbolBase.h
+++ b/alib2data/src/alphabet/SymbolBase.h
@@ -16,7 +16,7 @@ namespace alphabet {
 class SymbolBase;
 
 typedef std::acceptor_base<SymbolBase,
-			StartSymbol, LabeledSymbol, BlankSymbol, BottomOfTheStackSymbol, RankedSymbol, BarSymbol, RankedBarSymbol, SubtreeWildcardSymbol, SymbolSetSymbol, SymbolPairSymbol, UniqueSymbol, EndSymbol
+			EndSymbol, LabeledSymbol, BlankSymbol, BottomOfTheStackSymbol, RankedSymbol, BarSymbol, RankedBarSymbol, SubtreeWildcardSymbol, SymbolSetSymbol, SymbolPairSymbol, UniqueSymbol, StartSymbol
 	> VisitableSymbolBase;
 
 /**
diff --git a/alib2data/src/object/ObjectBase.h b/alib2data/src/object/ObjectBase.h
index a42e730aa3..736a5a07ff 100644
--- a/alib2data/src/object/ObjectBase.h
+++ b/alib2data/src/object/ObjectBase.h
@@ -137,7 +137,7 @@ typedef std::acceptor_base<ObjectBase,
 			label::PrimitiveLabel, label::HexavigesimalLabel, label::ObjectLabel, label::LabelSetLabel, label::LabelPairLabel, label::UniqueLabel,
 			regexp::UnboundedRegExp, regexp::FormalRegExp,
 			string::Epsilon, string::LinearString, string::CyclicString,
-			alphabet::StartSymbol, alphabet::LabeledSymbol, alphabet::BlankSymbol, alphabet::BottomOfTheStackSymbol, alphabet::RankedSymbol, alphabet::BarSymbol, alphabet::RankedBarSymbol, alphabet::SubtreeWildcardSymbol, alphabet::SymbolPairSymbol, alphabet::SymbolSetSymbol, alphabet::UniqueSymbol, alphabet::EndSymbol,
+			alphabet::EndSymbol, alphabet::LabeledSymbol, alphabet::BlankSymbol, alphabet::BottomOfTheStackSymbol, alphabet::RankedSymbol, alphabet::BarSymbol, alphabet::RankedBarSymbol, alphabet::SubtreeWildcardSymbol, alphabet::SymbolPairSymbol, alphabet::SymbolSetSymbol, alphabet::UniqueSymbol, alphabet::StartSymbol,
 			container::ObjectsSet, container::ObjectsVector, container::ObjectsPair, container::ObjectsMap,
 			primitive::String, primitive::Integer, primitive::Character, primitive::Unsigned, primitive::Bool
 	> VisitableObjectBase;
@@ -152,7 +152,7 @@ class ObjectBase :
 			label::PrimitiveLabel, label::HexavigesimalLabel, label::ObjectLabel, label::LabelSetLabel, label::LabelPairLabel, label::UniqueLabel,
 			regexp::UnboundedRegExp, regexp::FormalRegExp,
 			string::Epsilon, string::LinearString, string::CyclicString,
-			alphabet::StartSymbol, alphabet::LabeledSymbol, alphabet::BlankSymbol, alphabet::BottomOfTheStackSymbol, alphabet::RankedSymbol, alphabet::BarSymbol, alphabet::RankedBarSymbol, alphabet::SubtreeWildcardSymbol, alphabet::SymbolPairSymbol, alphabet::SymbolSetSymbol, alphabet::UniqueSymbol, alphabet::EndSymbol,
+			alphabet::EndSymbol, alphabet::LabeledSymbol, alphabet::BlankSymbol, alphabet::BottomOfTheStackSymbol, alphabet::RankedSymbol, alphabet::BarSymbol, alphabet::RankedBarSymbol, alphabet::SubtreeWildcardSymbol, alphabet::SymbolPairSymbol, alphabet::SymbolSetSymbol, alphabet::UniqueSymbol, alphabet::StartSymbol,
 			container::ObjectsSet, container::ObjectsVector, container::ObjectsPair, container::ObjectsMap,
 			primitive::String, primitive::Integer, primitive::Character, primitive::Unsigned, primitive::Bool
 	>, public VisitableObjectBase {
diff --git a/alib2data/test-src/alphabet/SymbolTest.cpp b/alib2data/test-src/alphabet/SymbolTest.cpp
index 7054cc3cda..bc4f18883b 100644
--- a/alib2data/test-src/alphabet/SymbolTest.cpp
+++ b/alib2data/test-src/alphabet/SymbolTest.cpp
@@ -99,7 +99,13 @@ void SymbolTest::testXMLParser() {
 void SymbolTest::testOrder() {
 	alphabet::LabeledSymbol ls("a");
 	alphabet::BlankSymbol bs;
+	alphabet::StartSymbol ss;
+	alphabet::EndSymbol es;
 
 	CPPUNIT_EXCLUSIVE_OR( bs < ls, ls < bs);
+
+	CPPUNIT_ASSERT(es < ls); //End symbol typically denoted by '$' is lexicographically smaller than any other symbol
+	CPPUNIT_ASSERT(ls < ss); //Start symbol typically denoted by '^' is lexicographically bigger than any other symbol
+;
 }
 
-- 
GitLab