diff --git a/.gitignore b/.gitignore
index 50c54fd62596e4456e880b36549a11e5a6663d22..95e0f357f21a767fa401ad5017fd57360cda55a0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,3 +16,6 @@
 *.lai
 *.la
 *.a
+
+# vim backup files
+*~
diff --git a/acat/src/acat.cpp b/acat/src/acat.cpp
index 1512f7b1f574e950913567fabb99c5ecd62d316e..d21642240eb5dbfb645796b321c67969c4605012 100644
--- a/acat/src/acat.cpp
+++ b/acat/src/acat.cpp
@@ -8,17 +8,22 @@
 #include <set>
 
 #include "AutomatonFactory.h"
+#include "GrammarFactory.h"
 #include "AlibException.h"
 
 #include "automaton/AutomatonParser.h"
+#include "grammar/GrammarParser.h"
+#include "grammar/GrammarPrinter.h"
 
 using namespace std;
 using namespace automaton;
 using namespace alib;
 using namespace sax;
+using namespace grammar;
 
 int main(int argc, char** argv) {
 	UnknownAutomaton* automaton;
+	Grammar* grammar;
 
 	try {
 		if (argc > 1) {
@@ -26,17 +31,22 @@ int main(int argc, char** argv) {
 				cout << "Automaton parsing.\nUsage: catPDA [automaton.xml]\n";
 				return -1;
 			}
-			automaton = AutomatonFactory::fromFile(argv[1]);
+//			automaton = AutomatonFactory::fromFile(argv[1]);
+			grammar = GrammarFactory::fromFile(argv[1]);
 		} else {
 			string input(istreambuf_iterator<char>(cin), (istreambuf_iterator<char>()));
-			automaton = AutomatonFactory::fromString(input);
+	//		automaton = AutomatonFactory::fromString(input);
+			grammar = GrammarFactory::fromString(input);
 		}
 
-		Automaton* knownAutomaton = AutomatonFactory::buildAutomaton(automaton);
+	/*	Automaton* knownAutomaton = AutomatonFactory::buildAutomaton(automaton);
 		knownAutomaton->toXML(cout);
 
 		delete automaton;
 		delete knownAutomaton;
+	*/
+
+		GrammarPrinter::toXML(*grammar, cout);
 
 	} catch (AlibException& e) {
 		cout << e.what() << endl;
diff --git a/alib/.cproject b/alib/.cproject
index cedc067963fcac0c5f01a72d3e0f3a27da0937b1..1cafe9e7111b5ccbcaf646b7bbc8543e1cd506e5 100644
--- a/alib/.cproject
+++ b/alib/.cproject
@@ -33,6 +33,7 @@
 								<option id="gnu.cpp.compiler.option.include.paths.1670765613" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
 									<listOptionValue builtIn="false" value="/usr/include/libxml2/"/>
 								</option>
+								<option id="gnu.cpp.compiler.option.other.other.389461226" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0 -std=c++11" valueType="string"/>
 								<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.62684000" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
 							</tool>
 							<tool id="cdt.managedbuild.tool.gnu.c.compiler.so.debug.44664480" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.so.debug">
@@ -51,8 +52,8 @@
 								<option id="gnu.cpp.link.option.paths.181283166" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
 									<listOptionValue builtIn="false" value=""/>
 								</option>
-								<option id="gnu.cpp.link.option.userobjs.1375511055" superClass="gnu.cpp.link.option.userobjs" valueType="userObjs"/>
-								<option id="gnu.cpp.link.option.flags.1738094424" superClass="gnu.cpp.link.option.flags" value="-fvisibility=hidden" valueType="string"/>
+								<option id="gnu.cpp.link.option.userobjs.1375511055" name="Other objects" superClass="gnu.cpp.link.option.userobjs"/>
+								<option id="gnu.cpp.link.option.flags.1738094424" name="Linker flags" superClass="gnu.cpp.link.option.flags" value="-fvisibility=hidden" valueType="string"/>
 								<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1254427525" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
 									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
 									<additionalInput kind="additionalinput" paths="$(LIBS)"/>
@@ -132,8 +133,8 @@
 			<resource resourceType="PROJECT" workspacePath="/alib"/>
 		</configuration>
 		<configuration configurationName="Debug">
-			<resource resourceType="PROJECT" workspacePath="/aconvert"/>
 			<resource resourceType="PROJECT" workspacePath="/alib"/>
+			<resource resourceType="PROJECT" workspacePath="/aconvert"/>
 			<resource resourceType="PROJECT" workspacePath="/acat"/>
 		</configuration>
 	</storageModule>
diff --git a/alib/src/AutomatonFactory.cpp b/alib/src/AutomatonFactory.cpp
index 1a444857bdb2f7dc54d187f8c3fd5a78d5bc2dce..132914c285106d80c473c218e27a012ec14285d9 100644
--- a/alib/src/AutomatonFactory.cpp
+++ b/alib/src/AutomatonFactory.cpp
@@ -18,19 +18,19 @@ namespace automaton {
 
 using namespace sax;
 
-UnknownAutomaton* AutomatonFactory::fromFile(const std::string& filename) {
-	std::list<Token> tokens;
+UnknownAutomaton* AutomatonFactory::fromFile(const string& filename) {
+	list<Token> tokens;
 	SaxInterface::parseFile(filename, tokens);
 	return parse(tokens);
 }
 
-UnknownAutomaton* AutomatonFactory::fromString(const std::string& str) {
-	std::list<Token> tokens;
+UnknownAutomaton* AutomatonFactory::fromString(const string& str) {
+	list<Token> tokens;
 	SaxInterface::parseMemory(str, tokens);
 	return parse(tokens);
 }
 
-UnknownAutomaton* AutomatonFactory::parse(std::list<sax::Token> tokens) {
+UnknownAutomaton* AutomatonFactory::parse(list<Token> tokens) {
 	AutomatonParser parser;
 	return parser.parse(tokens);
 }
diff --git a/alib/src/AutomatonFactory.h b/alib/src/AutomatonFactory.h
index b116b70fc9a21f47189a217809649afa085b8ee8..736096196360ca2d03b6e77313e55991b3a596f2 100644
--- a/alib/src/AutomatonFactory.h
+++ b/alib/src/AutomatonFactory.h
@@ -17,10 +17,12 @@
 
 namespace automaton {
 
+using namespace std;
+
 class AutomatonFactory {
 public:
-	static UnknownAutomaton* fromFile(const std::string& filename);
-	static UnknownAutomaton* fromString(const std::string& str);
+	static UnknownAutomaton* fromFile(const string& filename);
+	static UnknownAutomaton* fromString(const string& str);
 
 	static Automaton* buildAutomaton(UnknownAutomaton* automaton);
 
@@ -34,7 +36,7 @@ public:
 	static TM buildTM(UnknownAutomaton* automaton);
 
 protected:
-	static UnknownAutomaton* parse(std::list<sax::Token> tokens);
+	static UnknownAutomaton* parse(list<sax::Token> tokens);
 
 	static void buildCommon(Automaton& automaton, UnknownAutomaton* unknownAutomaton);
 
diff --git a/alib/src/GrammarFactory.cpp b/alib/src/GrammarFactory.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d51090ae3a949263a70b7aeaed52f45d5dcb3fca
--- /dev/null
+++ b/alib/src/GrammarFactory.cpp
@@ -0,0 +1,35 @@
+/*
+ * GrammarFactory.cpp
+ *
+ *  Created on: Nov 5, 2013
+ *      Author: martin
+ */
+
+#include "GrammarFactory.h"
+
+#include "sax/SaxInterface.h"
+#include "grammar/GrammarParser.h"
+
+namespace grammar {
+
+
+
+UnknownGrammar* GrammarFactory::fromFile(const string& filename) {
+	std::list<Token> tokens;
+	SaxInterface::parseFile(filename, tokens);
+	return parse(tokens);
+}
+
+UnknownGrammar* GrammarFactory::fromString(const string& str) {
+	list<Token> tokens;
+	SaxInterface::parseMemory(str, tokens);
+	return parse(tokens);
+}
+
+UnknownGrammar* GrammarFactory::parse(list<sax::Token> tokens) {
+	GrammarParser parser;
+	return parser.parse(tokens);
+}
+
+} /* namespace grammar */
+
diff --git a/alib/src/GrammarFactory.h b/alib/src/GrammarFactory.h
new file mode 100644
index 0000000000000000000000000000000000000000..0745391c520be76fedcdf882837d48cc8b9112d0
--- /dev/null
+++ b/alib/src/GrammarFactory.h
@@ -0,0 +1,29 @@
+/*
+ * GrammarFactory.h
+ *
+ *  Created on: Nov 5, 2013
+ *      Author: Martin Zak
+ */
+
+#ifndef GRAMMARFACTORY_H_
+#define GRAMMARFACTORY_H_
+
+#include "grammar/UnknownGrammar.h"
+#include "sax/Token.h"
+
+namespace grammar {
+
+using namespace std;
+using namespace sax;
+
+class GrammarFactory {
+public:
+	static UnknownGrammar* fromFile(const string& filename);
+	static UnknownGrammar* fromString(const string& str);
+
+protected:
+	static UnknownGrammar* parse(list<Token> tokens);
+};
+
+} /* namespace grammar */
+#endif /* GRAMMARFACTORY_H_ */
diff --git a/alib/src/automaton/FSM/FSM.cpp b/alib/src/automaton/FSM/FSM.cpp
index a5b55a8de0411d929dca8928e226e9c09a3697d7..cc608131b0bb11b88404e817457c116422df3181 100644
--- a/alib/src/automaton/FSM/FSM.cpp
+++ b/alib/src/automaton/FSM/FSM.cpp
@@ -55,29 +55,33 @@ void FSM::removeInputSymbol(const Symbol& symbol) {
 
 }
 
-void FSM::addTransition(const State& current, const Symbol& input, const State& next) {
-	if (states.find(current) == states.end())
-		throw AutomatonException("State \"" + current.getName() + "\" doesn't exist.");
+void FSM::addTransition(const State& from, const Symbol& input, const State& to) {
+	addTransition(TransitionFSM(from, input, to));
+}
+
+void FSM::addTransition(const TransitionFSM& transition) {
+	const State& from = transition.getFrom();
+	const Symbol& input = transition.getInput();
+	const State& to = transition.getTo();
+
+	if (states.find(from) == states.end())
+		throw AutomatonException("State \"" + from.getName() + "\" doesn't exist.");
 
 	if (input.getSymbol() != "") {
 		if (inputAlphabet.find(input) == inputAlphabet.end())
 			throw AutomatonException("Input symbol \"" + input.getSymbol() + "\" doesn't exist.");
 	}
 
-	if (states.find(next) == states.end())
-		throw AutomatonException("State \"" + next.getName() + "\" doesn't exist.");
+	if (states.find(to) == states.end())
+		throw AutomatonException("State \"" + to.getName() + "\" doesn't exist.");
 
-	pair<set<TransitionFSM>::iterator, bool> ret = transitions.insert(TransitionFSM(current, input, next));
+	pair<set<TransitionFSM>::iterator, bool> ret = transitions.insert(transition);
 	if (!ret.second)
 		throw AutomatonException(
-				"Transition (\"" + current.getName() + "\", \"" + input.getSymbol() + "\") -> \"" + next.getName()
+				"Transition (\"" + from.getName() + "\", \"" + input.getSymbol() + "\") -> \"" + to.getName()
 						+ "\" already exists.");
 }
 
-void FSM::addTransition(const TransitionFSM& transition) {
-	addTransition(transition.getFrom(), transition.getInput(), transition.getTo());
-}
-
 void FSM::removeTransition(const TransitionFSM& transition) {
 	int removed = transitions.erase(transition);
 	if (!removed)
diff --git a/alib/src/grammar/Grammar.cpp b/alib/src/grammar/Grammar.cpp
index 0bcebd7187804d1a553cd4258b971c8866a2d53b..2a44a3f5445263cf9f416607e9a85e507a399fbe 100644
--- a/alib/src/grammar/Grammar.cpp
+++ b/alib/src/grammar/Grammar.cpp
@@ -78,7 +78,7 @@ const set<Rule>& Grammar::getRules() const {
 	return rules;
 }
 
-const Symbol& Grammar::getStartSymbol() {
+const Symbol& Grammar::getStartSymbol() const{
 	return startSymbol;
 }
 
diff --git a/alib/src/grammar/Grammar.h b/alib/src/grammar/Grammar.h
index a72468e4d4fb6de8f1f95b4655411b417a8d0e39..2a53cca30949783b60599905ac5cb24a0f22ddc9 100644
--- a/alib/src/grammar/Grammar.h
+++ b/alib/src/grammar/Grammar.h
@@ -40,7 +40,7 @@ public:
 	void removeRule(const Rule& rule);
 	const set<Rule>& getRules() const;
 
-	const Symbol& getStartSymbol();
+	const Symbol& getStartSymbol() const;
 	void setStartSymbol(const Symbol& symbol);
 
 };
diff --git a/alib/src/grammar/GrammarPrinter.cpp b/alib/src/grammar/GrammarPrinter.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..10122134fdc14aa7058b35dfbe483b92ceea7728
--- /dev/null
+++ b/alib/src/grammar/GrammarPrinter.cpp
@@ -0,0 +1,66 @@
+/*
+ * GrammarPrinter.cpp
+ *
+ *  Created on: Nov 5, 2013
+ *      Author: martin
+ */
+
+#include "GrammarPrinter.h"
+
+namespace grammar {
+
+void GrammarPrinter::toXML(const Grammar& grammar, ostream& out) {
+	out << "<grammar>\n";
+	printNonTerminals(grammar, out);
+	printTerminals(grammar, out);
+	printRules(grammar, out);
+	printStartSymbol(grammar, out);
+	out << "</grammar>\n";
+}
+
+void GrammarPrinter::printNonTerminals(const Grammar& grammar, ostream& out) {
+	out << "<nonTerminalSymbols>\n";
+	for (auto &symbol : grammar.getNonTerminalSymbols()) {
+		symbol.toXML(out, "");
+	}
+	out << "</nonTerminalSymbols>\n";
+}
+
+void GrammarPrinter::printTerminals(const Grammar& grammar, ostream& out) {
+	out << "<terminalSymbols>\n";
+	for (auto& symbol : grammar.getTerminalSymbols()) {
+		symbol.toXML(out, "");
+	}
+	out << "</terminalSymbols>\n";
+}
+
+void GrammarPrinter::printRules(const Grammar& grammar, ostream& out) {
+	out << "<rules>\n";
+	for (auto& rule : grammar.getRules()) {
+		printRule(rule, out);
+	}
+	out << "</rules>\n";
+}
+
+void GrammarPrinter::printRule(const Rule& rule, ostream& out) {
+	out << "<rule>\n";
+	out << "<leftSide>\n";
+	for (auto& symbol : rule.getLeftSide()) {
+		symbol.toXML(out, "");
+	}
+	out << "</leftSide>\n";
+	out << "<rightSide>\n";
+	for (auto& symbol : rule.getRightSide()) {
+		symbol.toXML(out, "");
+	}
+	out << "</rightSide>\n";
+	out << "</rule>\n";
+}
+
+void GrammarPrinter::printStartSymbol(const Grammar& grammar, ostream& out) {
+	out << "<startSymbol>";
+	out << grammar.getStartSymbol().getSymbol();
+	out << "</startSymbol>\n";
+}
+
+} /* namespace grammar */
diff --git a/alib/src/grammar/GrammarPrinter.h b/alib/src/grammar/GrammarPrinter.h
new file mode 100644
index 0000000000000000000000000000000000000000..28a15c0bea4d16730ffd7d4c523fe2a82aeb757c
--- /dev/null
+++ b/alib/src/grammar/GrammarPrinter.h
@@ -0,0 +1,31 @@
+/*
+ * GrammarPrinter.h
+ *
+ *  Created on: Nov 5, 2013
+ *      Author: martin
+ */
+
+#ifndef GRAMMARPRINTER_H_
+#define GRAMMARPRINTER_H_
+
+#include <ostream>
+#include "Grammar.h"
+
+namespace grammar {
+
+using namespace std;
+
+class GrammarPrinter {
+public:
+	static void toXML(const Grammar& grammar, ostream& out);
+protected:
+	static void printNonTerminals(const Grammar& grammar, ostream& out);
+	static void printTerminals(const Grammar& grammar, ostream& out);
+	static void printRules(const Grammar& grammar, ostream& out);
+	static void printRule(const Rule& rule, ostream& out);
+	static void printStartSymbol(const Grammar& grammar, ostream& out);
+
+};
+
+} /* namespace grammar */
+#endif /* GRAMMARPRINTER_H_ */
diff --git a/examples/grammar/regular.xml b/examples/grammar/regular.xml
new file mode 100644
index 0000000000000000000000000000000000000000..18e5614bb0b362bfc0fc52998f67ea34cb19f715
--- /dev/null
+++ b/examples/grammar/regular.xml
@@ -0,0 +1,34 @@
+<grammar>
+	<nonTerminalSymbols>
+		<symbol>S</symbol>
+		<symbol>A</symbol>
+	</nonTerminalSymbols>
+
+	<terminalSymbols>
+		<symbol>a</symbol>
+	</terminalSymbols>
+
+	<rules>
+		<rule>
+			<leftSide>
+				<symbol>S</symbol>
+			</leftSide>
+
+			<rightSide>
+				<symbol>A</symbol>
+			</rightSide>
+		</rule>
+		<rule>
+			<leftSide>
+				<symbol>A</symbol>
+			</leftSide>
+
+			<rightSide>
+				<symbol>a</symbol>
+			</rightSide>
+		</rule>
+	</rules>
+
+	<startSymbol>S</startSymbol>
+	
+</grammar>