diff --git a/aconversions/.cproject b/aconversions/.cproject
index a245ccfbe8525da0f22965f5f091ef4e981590b8..73f91e809013fa33a703b459fa11166e20990fc9 100644
--- a/aconversions/.cproject
+++ b/aconversions/.cproject
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
 	<storageModule moduleId="org.eclipse.cdt.core.settings">
-		<cconfiguration id="cdt.managedbuild.config.gnu.exe.debug.1988565968">
-			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.debug.1988565968" moduleId="org.eclipse.cdt.core.settings" name="Debug">
+		<cconfiguration id="cdt.managedbuild.config.gnu.exe.debug.923996745">
+			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.debug.923996745" moduleId="org.eclipse.cdt.core.settings" name="Debug">
 				<externalSettings/>
 				<extensions>
 					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
@@ -14,52 +14,52 @@
 				</extensions>
 			</storageModule>
 			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
-				<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.debug.1988565968" name="Debug" parent="cdt.managedbuild.config.gnu.exe.debug">
-					<folderInfo id="cdt.managedbuild.config.gnu.exe.debug.1988565968." name="/" resourcePath="">
-						<toolChain id="cdt.managedbuild.toolchain.gnu.exe.debug.2145322734" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.debug">
-							<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.debug.1690067828" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.debug"/>
-							<builder buildPath="${workspace_loc:/aconversions}/Debug" id="cdt.managedbuild.target.gnu.builder.exe.debug.1724289684" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.exe.debug"/>
-							<tool id="cdt.managedbuild.tool.gnu.archiver.base.2132784162" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
-							<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.2007935398" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug">
-								<option id="gnu.cpp.compiler.exe.debug.option.optimization.level.1420626117" name="Optimization Level" superClass="gnu.cpp.compiler.exe.debug.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
-								<option id="gnu.cpp.compiler.exe.debug.option.debugging.level.750696876" name="Debug Level" superClass="gnu.cpp.compiler.exe.debug.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
-								<option id="gnu.cpp.compiler.option.include.paths.619927979" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+				<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.debug.923996745" name="Debug" parent="cdt.managedbuild.config.gnu.exe.debug">
+					<folderInfo id="cdt.managedbuild.config.gnu.exe.debug.923996745." name="/" resourcePath="">
+						<toolChain id="cdt.managedbuild.toolchain.gnu.exe.debug.181676644" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.debug">
+							<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.debug.713559341" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.debug"/>
+							<builder buildPath="${workspace_loc:/aconversions}/Debug" id="cdt.managedbuild.target.gnu.builder.exe.debug.1319275342" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.exe.debug"/>
+							<tool id="cdt.managedbuild.tool.gnu.archiver.base.989738325" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
+							<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1256329136" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug">
+								<option id="gnu.cpp.compiler.exe.debug.option.optimization.level.220012774" name="Optimization Level" superClass="gnu.cpp.compiler.exe.debug.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
+								<option id="gnu.cpp.compiler.exe.debug.option.debugging.level.590531226" name="Debug Level" superClass="gnu.cpp.compiler.exe.debug.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
+								<option id="gnu.cpp.compiler.option.include.paths.2109499447" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/alib/src}&quot;"/>
 								</option>
-								<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1133597878" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+								<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.2087782350" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
 							</tool>
-							<tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.1198088489" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.debug">
-								<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.exe.debug.option.optimization.level.1504447297" name="Optimization Level" superClass="gnu.c.compiler.exe.debug.option.optimization.level" valueType="enumerated"/>
-								<option id="gnu.c.compiler.exe.debug.option.debugging.level.1247411673" name="Debug Level" superClass="gnu.c.compiler.exe.debug.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
-								<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1189852814" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+							<tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.185152796" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.debug">
+								<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.exe.debug.option.optimization.level.2130304687" name="Optimization Level" superClass="gnu.c.compiler.exe.debug.option.optimization.level" valueType="enumerated"/>
+								<option id="gnu.c.compiler.exe.debug.option.debugging.level.1046880433" name="Debug Level" superClass="gnu.c.compiler.exe.debug.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
+								<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.207101555" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
 							</tool>
-							<tool id="cdt.managedbuild.tool.gnu.c.linker.exe.debug.1610673991" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.debug"/>
-							<tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug.422245398" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug">
-								<option id="gnu.cpp.link.option.libs.1479950460" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" valueType="libs">
+							<tool id="cdt.managedbuild.tool.gnu.c.linker.exe.debug.252907967" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.debug"/>
+							<tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug.728968099" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug">
+								<option id="gnu.cpp.link.option.libs.1966058726" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" valueType="libs">
 									<listOptionValue builtIn="false" value="alib"/>
 								</option>
-								<option id="gnu.cpp.link.option.paths.1290703739" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+								<option id="gnu.cpp.link.option.paths.644657276" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/alib/Debug}&quot;"/>
 								</option>
-								<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1692658180" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+								<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1392298582" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
 									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
 									<additionalInput kind="additionalinput" paths="$(LIBS)"/>
 								</inputType>
 							</tool>
-							<tool id="cdt.managedbuild.tool.gnu.assembler.exe.debug.1786933996" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.debug">
-								<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1629599789" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+							<tool id="cdt.managedbuild.tool.gnu.assembler.exe.debug.373737946" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.debug">
+								<inputType id="cdt.managedbuild.tool.gnu.assembler.input.910823955" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
 							</tool>
 						</toolChain>
 					</folderInfo>
 					<sourceEntries>
-						<entry excluding="afsm2rg|src/rg2fsm|src/fsm2rg" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
+						<entry excluding="src/arg2fa.cpp|src/afa2rg.cpp" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
 					</sourceEntries>
 				</configuration>
 			</storageModule>
 			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
 		</cconfiguration>
-		<cconfiguration id="cdt.managedbuild.config.gnu.exe.release.431501956">
-			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.release.431501956" moduleId="org.eclipse.cdt.core.settings" name="Release">
+		<cconfiguration id="cdt.managedbuild.config.gnu.exe.release.847519806">
+			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.release.847519806" moduleId="org.eclipse.cdt.core.settings" name="Release">
 				<externalSettings/>
 				<extensions>
 					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
@@ -71,43 +71,43 @@
 				</extensions>
 			</storageModule>
 			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
-				<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.release.431501956" name="Release" parent="cdt.managedbuild.config.gnu.exe.release">
-					<folderInfo id="cdt.managedbuild.config.gnu.exe.release.431501956." name="/" resourcePath="">
-						<toolChain id="cdt.managedbuild.toolchain.gnu.exe.release.919970955" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.release">
-							<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.release.1387889808" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.release"/>
-							<builder buildPath="${workspace_loc:/aconversions}/Release" id="cdt.managedbuild.target.gnu.builder.exe.release.1020487954" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.exe.release"/>
-							<tool id="cdt.managedbuild.tool.gnu.archiver.base.178390178" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
-							<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.847661583" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release">
-								<option id="gnu.cpp.compiler.exe.release.option.optimization.level.243193135" name="Optimization Level" superClass="gnu.cpp.compiler.exe.release.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
-								<option id="gnu.cpp.compiler.exe.release.option.debugging.level.1228127187" name="Debug Level" superClass="gnu.cpp.compiler.exe.release.option.debugging.level" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/>
-								<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1839212147" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
-							</tool>
-							<tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.release.489752447" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.release">
-								<option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.exe.release.option.optimization.level.525463206" name="Optimization Level" superClass="gnu.c.compiler.exe.release.option.optimization.level" valueType="enumerated"/>
-								<option id="gnu.c.compiler.exe.release.option.debugging.level.1207405604" name="Debug Level" superClass="gnu.c.compiler.exe.release.option.debugging.level" value="gnu.c.debugging.level.none" valueType="enumerated"/>
-								<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1884817039" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
-							</tool>
-							<tool id="cdt.managedbuild.tool.gnu.c.linker.exe.release.1049049603" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.release"/>
-							<tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.release.44073728" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.release">
-								<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1447635553" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+				<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.release.847519806" name="Release" parent="cdt.managedbuild.config.gnu.exe.release">
+					<folderInfo id="cdt.managedbuild.config.gnu.exe.release.847519806." name="/" resourcePath="">
+						<toolChain id="cdt.managedbuild.toolchain.gnu.exe.release.1792634543" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.release">
+							<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.release.946424754" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.release"/>
+							<builder buildPath="${workspace_loc:/aconversions}/Release" id="cdt.managedbuild.target.gnu.builder.exe.release.803376977" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.exe.release"/>
+							<tool id="cdt.managedbuild.tool.gnu.archiver.base.83145420" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
+							<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.401091216" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release">
+								<option id="gnu.cpp.compiler.exe.release.option.optimization.level.342590430" name="Optimization Level" superClass="gnu.cpp.compiler.exe.release.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
+								<option id="gnu.cpp.compiler.exe.release.option.debugging.level.40661727" name="Debug Level" superClass="gnu.cpp.compiler.exe.release.option.debugging.level" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/>
+								<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.687064417" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+							</tool>
+							<tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.release.1048535779" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.release">
+								<option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.exe.release.option.optimization.level.392903544" name="Optimization Level" superClass="gnu.c.compiler.exe.release.option.optimization.level" valueType="enumerated"/>
+								<option id="gnu.c.compiler.exe.release.option.debugging.level.810074994" name="Debug Level" superClass="gnu.c.compiler.exe.release.option.debugging.level" value="gnu.c.debugging.level.none" valueType="enumerated"/>
+								<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.791056291" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+							</tool>
+							<tool id="cdt.managedbuild.tool.gnu.c.linker.exe.release.233577169" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.release"/>
+							<tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.release.19072263" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.release">
+								<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.772540191" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
 									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
 									<additionalInput kind="additionalinput" paths="$(LIBS)"/>
 								</inputType>
 							</tool>
-							<tool id="cdt.managedbuild.tool.gnu.assembler.exe.release.1713687409" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.release">
-								<inputType id="cdt.managedbuild.tool.gnu.assembler.input.930343315" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+							<tool id="cdt.managedbuild.tool.gnu.assembler.exe.release.1136860892" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.release">
+								<inputType id="cdt.managedbuild.tool.gnu.assembler.input.30688761" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
 							</tool>
 						</toolChain>
 					</folderInfo>
 					<sourceEntries>
-						<entry excluding="afsm2rg|src/rg2fsm|src/fsm2rg" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
+						<entry excluding="src/arg2fa.cpp|src/afa2rg.cpp" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
 					</sourceEntries>
 				</configuration>
 			</storageModule>
 			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
 		</cconfiguration>
-		<cconfiguration id="cdt.managedbuild.config.gnu.exe.debug.1988565968.2077734878">
-			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.debug.1988565968.2077734878" moduleId="org.eclipse.cdt.core.settings" name="afsm2rg">
+		<cconfiguration id="cdt.managedbuild.config.gnu.exe.debug.923996745.1323144502">
+			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.debug.923996745.1323144502" moduleId="org.eclipse.cdt.core.settings" name="Debug.fa2rg">
 				<externalSettings/>
 				<extensions>
 					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
@@ -119,52 +119,52 @@
 				</extensions>
 			</storageModule>
 			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
-				<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.debug.1988565968.2077734878" name="afsm2rg" parent="cdt.managedbuild.config.gnu.exe.debug">
-					<folderInfo id="cdt.managedbuild.config.gnu.exe.debug.1988565968.2077734878." name="/" resourcePath="">
-						<toolChain id="cdt.managedbuild.toolchain.gnu.exe.debug.1163399431" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.debug">
-							<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.debug.12097740" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.debug"/>
-							<builder buildPath="${workspace_loc:/aconversions}/Debug" id="cdt.managedbuild.target.gnu.builder.exe.debug.774430906" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.exe.debug"/>
-							<tool id="cdt.managedbuild.tool.gnu.archiver.base.2000533032" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
-							<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.689439375" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug">
-								<option id="gnu.cpp.compiler.exe.debug.option.optimization.level.952777165" name="Optimization Level" superClass="gnu.cpp.compiler.exe.debug.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
-								<option id="gnu.cpp.compiler.exe.debug.option.debugging.level.1254947323" name="Debug Level" superClass="gnu.cpp.compiler.exe.debug.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
-								<option id="gnu.cpp.compiler.option.include.paths.1602573819" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+				<configuration artifactName="${ProjName}.fa2rg" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.debug.923996745.1323144502" name="Debug.fa2rg" parent="cdt.managedbuild.config.gnu.exe.debug">
+					<folderInfo id="cdt.managedbuild.config.gnu.exe.debug.923996745.1323144502." name="/" resourcePath="">
+						<toolChain id="cdt.managedbuild.toolchain.gnu.exe.debug.604421374" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.debug">
+							<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.debug.171217329" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.debug"/>
+							<builder buildPath="${workspace_loc:/aconversions}/Debug" id="cdt.managedbuild.target.gnu.builder.exe.debug.911360895" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.exe.debug"/>
+							<tool id="cdt.managedbuild.tool.gnu.archiver.base.1147345420" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
+							<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.697878346" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug">
+								<option id="gnu.cpp.compiler.exe.debug.option.optimization.level.1741428562" name="Optimization Level" superClass="gnu.cpp.compiler.exe.debug.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
+								<option id="gnu.cpp.compiler.exe.debug.option.debugging.level.1335381260" name="Debug Level" superClass="gnu.cpp.compiler.exe.debug.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
+								<option id="gnu.cpp.compiler.option.include.paths.496289937" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/alib/src}&quot;"/>
 								</option>
-								<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1393816980" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+								<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.2039472493" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
 							</tool>
-							<tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.1999103319" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.debug">
-								<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.exe.debug.option.optimization.level.1962342513" name="Optimization Level" superClass="gnu.c.compiler.exe.debug.option.optimization.level" valueType="enumerated"/>
-								<option id="gnu.c.compiler.exe.debug.option.debugging.level.765039437" name="Debug Level" superClass="gnu.c.compiler.exe.debug.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
-								<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1722777615" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+							<tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.680760064" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.debug">
+								<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.exe.debug.option.optimization.level.1351058005" name="Optimization Level" superClass="gnu.c.compiler.exe.debug.option.optimization.level" valueType="enumerated"/>
+								<option id="gnu.c.compiler.exe.debug.option.debugging.level.1785101381" name="Debug Level" superClass="gnu.c.compiler.exe.debug.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
+								<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1511241353" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
 							</tool>
-							<tool id="cdt.managedbuild.tool.gnu.c.linker.exe.debug.797807830" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.debug"/>
-							<tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug.270290307" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug">
-								<option id="gnu.cpp.link.option.libs.1892985059" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" valueType="libs">
+							<tool id="cdt.managedbuild.tool.gnu.c.linker.exe.debug.485379647" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.debug"/>
+							<tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug.1697144078" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug">
+								<option id="gnu.cpp.link.option.libs.1211237825" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" valueType="libs">
 									<listOptionValue builtIn="false" value="alib"/>
 								</option>
-								<option id="gnu.cpp.link.option.paths.1243381605" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+								<option id="gnu.cpp.link.option.paths.886643827" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/alib/Debug}&quot;"/>
 								</option>
-								<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1089719470" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+								<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1604949990" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
 									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
 									<additionalInput kind="additionalinput" paths="$(LIBS)"/>
 								</inputType>
 							</tool>
-							<tool id="cdt.managedbuild.tool.gnu.assembler.exe.debug.1948392650" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.debug">
-								<inputType id="cdt.managedbuild.tool.gnu.assembler.input.603842698" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+							<tool id="cdt.managedbuild.tool.gnu.assembler.exe.debug.75667575" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.debug">
+								<inputType id="cdt.managedbuild.tool.gnu.assembler.input.46006703" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
 							</tool>
 						</toolChain>
 					</folderInfo>
 					<sourceEntries>
-						<entry excluding="src/rg2fsm" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
+						<entry excluding="src/arg2fa.cpp" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
 					</sourceEntries>
 				</configuration>
 			</storageModule>
 			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
 		</cconfiguration>
-		<cconfiguration id="cdt.managedbuild.config.gnu.exe.debug.1988565968.1955017273">
-			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.debug.1988565968.1955017273" moduleId="org.eclipse.cdt.core.settings" name="arg2fsm">
+		<cconfiguration id="cdt.managedbuild.config.gnu.exe.debug.923996745.1323144502.51455777">
+			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.debug.923996745.1323144502.51455777" moduleId="org.eclipse.cdt.core.settings" name="Debug.rg2fa">
 				<externalSettings/>
 				<extensions>
 					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
@@ -176,45 +176,45 @@
 				</extensions>
 			</storageModule>
 			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
-				<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.debug.1988565968.1955017273" name="arg2fsm" parent="cdt.managedbuild.config.gnu.exe.debug">
-					<folderInfo id="cdt.managedbuild.config.gnu.exe.debug.1988565968.1955017273." name="/" resourcePath="">
-						<toolChain id="cdt.managedbuild.toolchain.gnu.exe.debug.30966406" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.debug">
-							<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.debug.375369379" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.debug"/>
-							<builder buildPath="${workspace_loc:/aconversions}/Debug" id="cdt.managedbuild.target.gnu.builder.exe.debug.1236307034" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.exe.debug"/>
-							<tool id="cdt.managedbuild.tool.gnu.archiver.base.924812237" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
-							<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.875390371" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug">
-								<option id="gnu.cpp.compiler.exe.debug.option.optimization.level.1255147689" name="Optimization Level" superClass="gnu.cpp.compiler.exe.debug.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
-								<option id="gnu.cpp.compiler.exe.debug.option.debugging.level.515240613" name="Debug Level" superClass="gnu.cpp.compiler.exe.debug.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
-								<option id="gnu.cpp.compiler.option.include.paths.45908198" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+				<configuration artifactName="${ProjName}.rg2fa" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.debug.923996745.1323144502.51455777" name="Debug.rg2fa" parent="cdt.managedbuild.config.gnu.exe.debug">
+					<folderInfo id="cdt.managedbuild.config.gnu.exe.debug.923996745.1323144502.51455777." name="/" resourcePath="">
+						<toolChain id="cdt.managedbuild.toolchain.gnu.exe.debug.1133348873" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.debug">
+							<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.debug.1196604066" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.debug"/>
+							<builder buildPath="${workspace_loc:/aconversions}/Debug" id="cdt.managedbuild.target.gnu.builder.exe.debug.439014923" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.exe.debug"/>
+							<tool id="cdt.managedbuild.tool.gnu.archiver.base.756579878" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
+							<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.713036044" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug">
+								<option id="gnu.cpp.compiler.exe.debug.option.optimization.level.1350961549" name="Optimization Level" superClass="gnu.cpp.compiler.exe.debug.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
+								<option id="gnu.cpp.compiler.exe.debug.option.debugging.level.1494984597" name="Debug Level" superClass="gnu.cpp.compiler.exe.debug.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
+								<option id="gnu.cpp.compiler.option.include.paths.206435288" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/alib/src}&quot;"/>
 								</option>
-								<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1881047541" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+								<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1867628733" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
 							</tool>
-							<tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.1618627351" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.debug">
-								<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.exe.debug.option.optimization.level.1357909590" name="Optimization Level" superClass="gnu.c.compiler.exe.debug.option.optimization.level" valueType="enumerated"/>
-								<option id="gnu.c.compiler.exe.debug.option.debugging.level.117170283" name="Debug Level" superClass="gnu.c.compiler.exe.debug.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
-								<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.889163642" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+							<tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.1967537471" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.debug">
+								<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.exe.debug.option.optimization.level.828706130" name="Optimization Level" superClass="gnu.c.compiler.exe.debug.option.optimization.level" valueType="enumerated"/>
+								<option id="gnu.c.compiler.exe.debug.option.debugging.level.1020112809" name="Debug Level" superClass="gnu.c.compiler.exe.debug.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
+								<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1626369872" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
 							</tool>
-							<tool id="cdt.managedbuild.tool.gnu.c.linker.exe.debug.999062614" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.debug"/>
-							<tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug.556165410" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug">
-								<option id="gnu.cpp.link.option.libs.1563918087" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" valueType="libs">
+							<tool id="cdt.managedbuild.tool.gnu.c.linker.exe.debug.722161002" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.debug"/>
+							<tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug.63113387" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug">
+								<option id="gnu.cpp.link.option.libs.937989636" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" valueType="libs">
 									<listOptionValue builtIn="false" value="alib"/>
 								</option>
-								<option id="gnu.cpp.link.option.paths.323568976" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+								<option id="gnu.cpp.link.option.paths.1969989980" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/alib/Debug}&quot;"/>
 								</option>
-								<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1287333492" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+								<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1981097053" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
 									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
 									<additionalInput kind="additionalinput" paths="$(LIBS)"/>
 								</inputType>
 							</tool>
-							<tool id="cdt.managedbuild.tool.gnu.assembler.exe.debug.2048027174" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.debug">
-								<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1925037264" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+							<tool id="cdt.managedbuild.tool.gnu.assembler.exe.debug.1320459224" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.debug">
+								<inputType id="cdt.managedbuild.tool.gnu.assembler.input.611263798" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
 							</tool>
 						</toolChain>
 					</folderInfo>
 					<sourceEntries>
-						<entry excluding="src/fsm2rg|afsm2rg" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
+						<entry excluding="src/afa2rg.cpp" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
 					</sourceEntries>
 				</configuration>
 			</storageModule>
@@ -222,20 +222,20 @@
 		</cconfiguration>
 	</storageModule>
 	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
-		<project id="aconversions.cdt.managedbuild.target.gnu.exe.518781615" name="Executable" projectType="cdt.managedbuild.target.gnu.exe"/>
+		<project id="aconversions.cdt.managedbuild.target.gnu.exe.752321215" name="Executable" projectType="cdt.managedbuild.target.gnu.exe"/>
 	</storageModule>
 	<storageModule moduleId="scannerConfiguration">
 		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
-		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.431501956;cdt.managedbuild.config.gnu.exe.release.431501956.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.847661583;cdt.managedbuild.tool.gnu.cpp.compiler.input.1839212147">
+		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.847519806;cdt.managedbuild.config.gnu.exe.release.847519806.;cdt.managedbuild.tool.gnu.c.compiler.exe.release.1048535779;cdt.managedbuild.tool.gnu.c.compiler.input.791056291">
 			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 		</scannerConfigBuildInfo>
-		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.1988565968;cdt.managedbuild.config.gnu.exe.debug.1988565968.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.2007935398;cdt.managedbuild.tool.gnu.cpp.compiler.input.1133597878">
+		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.923996745;cdt.managedbuild.config.gnu.exe.debug.923996745.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.185152796;cdt.managedbuild.tool.gnu.c.compiler.input.207101555">
 			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 		</scannerConfigBuildInfo>
-		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.431501956;cdt.managedbuild.config.gnu.exe.release.431501956.;cdt.managedbuild.tool.gnu.c.compiler.exe.release.489752447;cdt.managedbuild.tool.gnu.c.compiler.input.1884817039">
+		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.923996745;cdt.managedbuild.config.gnu.exe.debug.923996745.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1256329136;cdt.managedbuild.tool.gnu.cpp.compiler.input.2087782350">
 			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 		</scannerConfigBuildInfo>
-		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.1988565968;cdt.managedbuild.config.gnu.exe.debug.1988565968.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.1198088489;cdt.managedbuild.tool.gnu.c.compiler.input.1189852814">
+		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.847519806;cdt.managedbuild.config.gnu.exe.release.847519806.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.401091216;cdt.managedbuild.tool.gnu.cpp.compiler.input.687064417">
 			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 		</scannerConfigBuildInfo>
 	</storageModule>
@@ -244,11 +244,11 @@
 		<configuration configurationName="Release">
 			<resource resourceType="PROJECT" workspacePath="/aconversions"/>
 		</configuration>
-		<configuration configurationName="afsm2rg">
-			<resource resourceType="PROJECT" workspacePath="/aconversions"/>
-		</configuration>
 		<configuration configurationName="Debug">
 			<resource resourceType="PROJECT" workspacePath="/aconversions"/>
 		</configuration>
 	</storageModule>
+	<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets">
+		<buildTargets/>
+	</storageModule>
 </cproject>
diff --git a/aconversions/.settings/org.eclipse.cdt.codan.core.prefs b/aconversions/.settings/org.eclipse.cdt.codan.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..77386c23cbe3d3828b719e46914e7d33ce67f7a5
--- /dev/null
+++ b/aconversions/.settings/org.eclipse.cdt.codan.core.prefs
@@ -0,0 +1,67 @@
+eclipse.preferences.version=1
+org.eclipse.cdt.codan.checkers.errnoreturn=Warning
+org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},implicit\=>false}
+org.eclipse.cdt.codan.checkers.errreturnvalue=Error
+org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.checkers.noreturn=Error
+org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},implicit\=>false}
+org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error
+org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error
+org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error
+org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false}
+org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning
+org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},unknown\=>false,exceptions\=>()}
+org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error
+org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning
+org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},skip\=>true}
+org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error
+org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error
+org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error
+org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error
+org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error
+org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error
+org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error
+org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info
+org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},pattern\=>"^[a-z]",macro\=>true,exceptions\=>()}
+org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error
+org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error
+org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error
+org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning
+org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning
+org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true,exceptions\=>()}
+org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},paramNot\=>false}
+org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},else\=>false,afterelse\=>false}
+org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error
+org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
+org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true}
+org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true}
+org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning
+org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true,exceptions\=>("@(\#)","$Id")}
+org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error
+org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
diff --git a/aconversions/src/afa2rg.cpp b/aconversions/src/afa2rg.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e47f394408daf90d11d40eb893d0c1d9a4834a70
--- /dev/null
+++ b/aconversions/src/afa2rg.cpp
@@ -0,0 +1,47 @@
+//============================================================================
+// Name        : afsm2rg.cpp
+// Author      : Tomas Pecka
+// Version     :
+// Copyright   :
+// Description :
+//============================================================================
+
+#include <iostream>
+
+#include <AlibException.h>
+#include <AutomatonFactory.h>
+#include <grammar/GrammarPrinter.h>
+#include <grammar/RightRegularGrammar.h>
+
+#include "conversions/fa2rg/fa2rg.h"
+
+using namespace std;
+using namespace automaton;
+using namespace grammar;
+using namespace alib;
+
+int main(int argc, char** argv)
+{
+    try
+    {
+        string input( istreambuf_iterator<char>(cin), ( istreambuf_iterator<char>( ) ) );
+
+        FSM fsm = AutomatonFactory::buildFSM( AutomatonFactory::fromString( input ) );
+
+        if( ! fsm.isEpsilonFree() )
+        {
+            cout << "FSM has epsilon transitions" << endl;
+            return 1;
+        }
+
+        RightRegularGrammar rg = FA2RGconvert::convert( fsm );
+        GrammarPrinter::toXML( rg, cout );
+    }
+    catch (AlibException& e)
+    {
+        cout << e.what() << endl;
+        return 1;
+    }
+
+    return 0;
+}
diff --git a/aconversions/src/arg2fa.cpp b/aconversions/src/arg2fa.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9b4a60f4dcab4d25b7d04fe3810b5d053f032b14
--- /dev/null
+++ b/aconversions/src/arg2fa.cpp
@@ -0,0 +1,39 @@
+//============================================================================
+// Name        : afsm2rg.cpp
+// Author      : Tomas Pecka
+// Version     :
+// Copyright   :
+// Description :
+//============================================================================
+
+#include <iostream>
+
+#include <GrammarFactory.h>
+#include <AlibException.h>
+
+#include <automaton/AutomatonPrinter.h>
+
+#include "conversions/rg2fa/rg2fa.h"
+
+using namespace std;
+using namespace grammar;
+using namespace automaton;
+using namespace alib;
+
+int main(int argc, char** argv)
+{
+    try
+    {
+        string input(istreambuf_iterator<char>(cin), (istreambuf_iterator<char>()));
+
+        RightRegularGrammar rg = GrammarFactory::buildRightRegularGrammar( GrammarFactory::fromString( input ) );
+        // LeftRegularGrammar rg = GrammarFactory::buildLeftRegularGrammar( GrammarFactory::fromString( input ) );
+        FSM* fsm = RG2FSMConvert::convert( rg );
+        AutomatonPrinter::toXML(*fsm, cout);
+    }
+    catch (AlibException& e)
+    {
+        cout << e.what() << endl;
+        return 0;
+    }
+}
diff --git a/aconversions/src/conversions/fa2rg/fa2rg.cpp b/aconversions/src/conversions/fa2rg/fa2rg.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..2451f3845c261103889a2a3230e351e913de01b1
--- /dev/null
+++ b/aconversions/src/conversions/fa2rg/fa2rg.cpp
@@ -0,0 +1,85 @@
+#include "fa2rg.h"
+
+/*
+ * implements algorithm 2.104 in "[2] Melichar, B. Jazyky a překlady. Praha, Vydavatelství ČVUT 2007."
+ */
+
+RightRegularGrammar FA2RGconvert::convert( const FSM & automaton )
+{
+    RightRegularGrammar grammar;
+
+    // step 0
+    for( set<Symbol>::const_iterator i = automaton.getInputAlphabet().begin(); i != automaton.getInputAlphabet().end(); i++ )
+        grammar.addTerminalSymbol( *i );
+
+    // step 1
+    for( set<State>::const_iterator i = automaton.getStates().begin(); i != automaton.getStates().end(); i++)
+        grammar.addNonTerminalSymbol( Symbol( i->getName() ) );
+
+    // step 2 - create set of P in G
+    for( set<TransitionFSM>::const_iterator i = automaton.getTransitions().begin(); i != automaton.getTransitions().end(); i++ )
+    {
+        // 2a
+        list<Symbol> leftSide, rightSide;
+        leftSide.push_back ( Symbol( i->getFrom().getName() ) );
+        rightSide.push_back( Symbol( i->getInput().getSymbol() ) );
+        rightSide.push_back( Symbol( i->getTo().getName() ) );
+        Rule r( leftSide, rightSide );
+        grammar.addRule(r);
+
+        // 2b
+        if ( isInSet( i->getTo(), automaton.getFinalStates() ) )
+        {
+            list<Symbol> leftSide, rightSide;
+            leftSide.push_back( Symbol( i->getFrom().getName() ) );
+            rightSide.push_back( Symbol( i->getInput().getSymbol() ) );
+            Rule r( leftSide, rightSide );
+            grammar.addRule(r);
+        }
+    }
+
+    // step 3 - Set S in G
+    grammar.setStartSymbol( Symbol( automaton.getInitialStates().begin() -> getName() ));
+
+    // step 4
+    if ( isInSet( State( grammar.getStartSymbol().getSymbol() ), automaton.getFinalStates() ) )
+    {
+        grammar.addTerminalSymbol( Symbol( "" ) ); //FIXME no need for this! (alib problem)
+
+        // 4a
+        if ( ! GrammarUtils::isNonterminalOnRightSide( grammar.getStartSymbol(), grammar.getRules() ) )
+        {
+            list<Symbol> leftSide, rightSide;
+            leftSide.push_back( grammar.getStartSymbol() );
+            rightSide.push_back( Symbol( "" ) );
+            Rule r( leftSide, rightSide );
+            grammar.addRule(r);
+        }
+        else // 4b
+        {
+            Symbol newStart = GrammarUtils::createUniqueSymbol( grammar.getStartSymbol().getSymbol(), grammar, APOSTROPHE );
+            grammar.addNonTerminalSymbol( newStart );
+
+            for( set<Rule>::const_iterator i = grammar.getRules().begin(); i != grammar.getRules().end(); i++ )
+            {
+                if( *(i->getLeftSide().begin()) == grammar.getStartSymbol())
+                {
+                    list<Symbol> leftSide, rightSide( i->getRightSide() );
+                    leftSide.push_back( newStart );
+                    Rule r( leftSide, rightSide );
+                    grammar.addRule(r);
+                }
+            }
+            grammar.setStartSymbol( newStart );
+
+            list<Symbol> leftSide, rightSide;
+            leftSide.push_back( newStart );
+            rightSide.push_back( Symbol( "" ) );
+            Rule rr( leftSide, rightSide );
+            grammar.addRule(rr);
+        }
+    }
+
+    return grammar;
+}
+
diff --git a/aconversions/src/conversions/fa2rg/fa2rg.h b/aconversions/src/conversions/fa2rg/fa2rg.h
new file mode 100644
index 0000000000000000000000000000000000000000..c55fe3eadb818e671a786ad0f33f851df6de968a
--- /dev/null
+++ b/aconversions/src/conversions/fa2rg/fa2rg.h
@@ -0,0 +1,28 @@
+/*
+ * FSM2RGConvert.h
+ *
+ *  Created on: 10. 11. 2013
+ *      Author: Tomas Pecka
+ */
+
+#ifndef FA2RG_CONVERT_H_
+#define FA2RG_CONVERT_H_
+
+#include <automaton/FSM/FSM.h>
+#include <grammar/RightRegularGrammar.h>
+
+#include "../../utils/GrammarUtils.h"
+#include "../../utils/AutomatonUtils.h"
+
+using namespace std;
+using namespace automaton;
+using namespace grammar;
+
+class FA2RGconvert
+{
+public:
+    static RightRegularGrammar convert( const FSM & automaton );
+
+};
+
+#endif /* FA2RG_CONVERT_H_ */
diff --git a/aconversions/src/conversions/rg2fa/rg2fa.cpp b/aconversions/src/conversions/rg2fa/rg2fa.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..171d3d7b3788a9e7579cc38d7a7369adfa8b2871
--- /dev/null
+++ b/aconversions/src/conversions/rg2fa/rg2fa.cpp
@@ -0,0 +1,111 @@
+/*
+ * FSM2RGConvert.cpp
+ *
+ *  Created on: 10. 11. 2013
+ *      Author: tomas
+ */
+
+#include "rg2fa.h"
+
+/*
+ * implements 2.98 in "[2] Melichar, B. Jazyky a překlady. Praha, Vydavatelství ČVUT 2007."
+ */
+FSM * RG2FSMConvert::convert( const RightRegularGrammar & grammar )
+{
+    FSM* automaton = new FSM();
+
+    // step 1
+    for( set<Symbol>::const_iterator i = grammar.getTerminalSymbols().begin(); i != grammar.getTerminalSymbols().end(); i++ )
+        automaton -> addInputSymbol( *i );
+
+    // step 2
+    for( set<Symbol>::const_iterator i = grammar.getNonTerminalSymbols().begin(); i != grammar.getNonTerminalSymbols().end(); i++ )
+        automaton -> addState( State( i-> getSymbol() ) );
+
+    State AState = AutomatonUtils::createUniqueState( "A", automaton->getStates() );
+    automaton -> addState( AState );
+
+    // step 3, constructing \delta
+    for( set<Rule>::const_iterator i = grammar.getRules().begin(); i != grammar.getRules().end(); i++ )
+    {
+        if( GrammarUtils::isEpsilonRule(*i) )
+            continue;
+
+        State current( GrammarUtils::getFirstSymbolFromSet( i->getLeftSide(), grammar.getNonTerminalSymbols() ) -> getSymbol() );
+        Symbol input( GrammarUtils::getFirstSymbolFromSet( i->getRightSide(), grammar.getTerminalSymbols() ) -> getSymbol() );
+
+        // if B->a => \delta(B,a)=AState
+        if( i->getRightSide().size() == 1 )
+            automaton->addTransition( current, input, AState );
+
+        // if B->aC => \delta(B,a)=C
+        if( i->getRightSide().size() == 2 )
+        {
+            State next( GrammarUtils::getFirstSymbolFromSet( i -> getRightSide(), grammar.getNonTerminalSymbols() ) -> getSymbol() );
+            automaton->addTransition( current, input, next );
+        }
+    }
+
+    // step 4
+    automaton -> addInitialState( grammar.getStartSymbol().getSymbol() );
+
+    // step 5
+    automaton -> addFinalState( AState );
+    for( set<Rule>::const_iterator i = grammar.getRules().begin(); i != grammar.getRules().end(); i++ )
+        if( GrammarUtils::isEpsilonRule( *i ) )
+            automaton -> addFinalState( State( grammar.getStartSymbol().getSymbol() ));
+
+    return automaton;
+}
+
+
+/*
+ * implements 2.102 in "[2] Melichar, B. Jazyky a překlady. Praha, Vydavatelství ČVUT 2007."
+ */
+FSM * RG2FSMConvert::convert( const LeftRegularGrammar & grammar )
+{
+    FSM* automaton = new FSM();
+
+    // step 1
+    for( set<Symbol>::const_iterator i = grammar.getTerminalSymbols().begin(); i != grammar.getTerminalSymbols().end(); i++ )
+        automaton -> addInputSymbol( *i );
+
+    // step 2
+    for( set<Symbol>::const_iterator i = grammar.getNonTerminalSymbols().begin(); i != grammar.getNonTerminalSymbols().end(); i++ )
+        automaton -> addState( State( i-> getSymbol() ) );
+
+    State startState = AutomatonUtils::createUniqueState( "q0", automaton->getStates() );
+    automaton -> addState( startState );
+
+    // step 3, constructing \delta
+    for( set<Rule>::const_iterator i = grammar.getRules().begin(); i != grammar.getRules().end(); i++ )
+    {
+        if( i->getRightSide().size() == 0 ) continue;
+
+        State current( GrammarUtils::getFirstSymbolFromSet( i->getLeftSide(), grammar.getNonTerminalSymbols() ) -> getSymbol() );
+        Symbol input( GrammarUtils::getFirstSymbolFromSet( i->getRightSide(), grammar.getTerminalSymbols() ) -> getSymbol() );
+
+        // if B->a => \delta(B,a)=AState
+        if( i->getRightSide().size() == 1 )
+            automaton->addTransition( startState, input, current );
+
+        // if B->aC => \delta(B,a)=C
+        if( i->getRightSide().size() == 2 )
+        {
+            State next( GrammarUtils::getFirstSymbolFromSet( i -> getRightSide(), grammar.getNonTerminalSymbols() ) -> getSymbol() );
+            automaton->addTransition( next, input, current );
+        }
+    }
+
+    // step 4
+    automaton -> addInitialState( startState );
+
+    // step 5
+    automaton -> addFinalState( State( grammar.getStartSymbol().getSymbol() ) );
+    for( set<Rule>::const_iterator i = grammar.getRules().begin(); i != grammar.getRules().end(); i++ )
+        if( GrammarUtils::isEpsilonRule( *i ) )
+            automaton -> addFinalState( startState );
+
+
+    return automaton;
+}
diff --git a/aconversions/src/conversions/rg2fa/rg2fa.h b/aconversions/src/conversions/rg2fa/rg2fa.h
new file mode 100644
index 0000000000000000000000000000000000000000..69d4c97c3fef1048fc82e71e71176edf02c66039
--- /dev/null
+++ b/aconversions/src/conversions/rg2fa/rg2fa.h
@@ -0,0 +1,31 @@
+/*
+ * RG2FSMConvert.h
+ *
+ *  Created on: 10. 11. 2013
+ *      Author: Tomas Pecka
+ */
+
+#ifndef RG2FA_CONVERT_H_
+#define RG2FA_CONVERT_H_
+
+#include <map>
+
+#include <automaton/FSM/FSM.h>
+#include <grammar/RightRegularGrammar.h>
+#include <grammar/LeftRegularGrammar.h>
+
+#include "../../utils/AutomatonUtils.h"
+#include "../../utils/GrammarUtils.h"
+
+using namespace std;
+using namespace automaton;
+using namespace grammar;
+
+class RG2FSMConvert
+{
+public:
+    static FSM* convert( const RightRegularGrammar & grammar );
+    static FSM* convert( const LeftRegularGrammar & grammar );
+};
+
+#endif /* RG2FA_CONVERT_H_ */
diff --git a/aconversions/src/fsm2rg/FSM2RGConvert.cpp b/aconversions/src/fsm2rg/FSM2RGConvert.cpp
deleted file mode 100644
index 33c93d5021e2ab5f58e0d94efb2cc2e24a80e967..0000000000000000000000000000000000000000
--- a/aconversions/src/fsm2rg/FSM2RGConvert.cpp
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * FSM2RGConvert.cpp
- *
- *  Created on: 10. 11. 2013
- *      Author: tomas
- */
-
-#include <algorithm>
-#include "FSM2RGConvert.h"
-
-#include <iostream>
-#include <cassert>
-
-/*
- * implements algorithm 2.104 in "Melichar, B. Jazyky a překlady. Praha, Vydavatelství ČVUT 2007."
- * Input: NFA M = (Q, T, \delta, q_0, F)
- * Output: Right regular grammar G=(N,T,P,S), L(M)=L(G)
- */
-
-// Check whether the nonterminal is on right side of any rule.
-bool FSM2RGConvert::isNonterminalOnRightSide( const set<Rule> & rules, const Symbol & nonterminal )
-{
-    for( set<Rule>::const_iterator i = rules.begin(); i!= rules.end(); i++ )
-    {
-        list<Symbol> leftSide = i -> getLeftSide();
-
-        list<Symbol>::const_iterator onRightSide = find( leftSide.begin(), leftSide.end(), nonterminal );
-        if ( onRightSide != leftSide.end() )
-            return true;
-    }
-
-    return false;
-}
-
-
-const Symbol& FSM2RGConvert::getSymbol( const set<Symbol> & symbolSet, const string& symbol )
-{
-    for( set<Symbol>::const_iterator i = symbolSet.begin(); i != symbolSet.end(); i++ )
-    {
-        if ( i->getSymbol() == symbol )
-            return *i;
-    }
-
-    assert(false);
-    return *symbolSet.begin();
-}
-
-
-RightRegularGrammar * FSM2RGConvert::convert( FSM* automaton )
-{
-    RightRegularGrammar* regularGrammar = new RightRegularGrammar();
-
-    // step 1 - init T and N in G
-    for( set<Symbol>::const_iterator i = automaton -> getInputAlphabet().begin(); i != automaton -> getInputAlphabet().end(); i++ )
-        regularGrammar -> addTerminalSymbol( *i );
-
-    for( set<State>::const_iterator i = automaton -> getStates().begin(); i != automaton -> getStates().end(); i++)
-         regularGrammar -> addNonTerminalSymbol( Symbol( i->getName() ) );
-
-
-    // step 2 - create set of P in G
-    const set<Symbol>& nonTerminals = regularGrammar -> getNonTerminalSymbols();
-    const set<Symbol>& terminals = regularGrammar -> getTerminalSymbols();
-
-    for( set<TransitionFSM>::const_iterator i = automaton -> getTransitions().begin(); i != automaton -> getTransitions().end(); i++ )
-    {
-        Rule r;
-        list<Symbol> leftSide, rightSide;
-
-        // 2a
-        leftSide.push_back( getSymbol ( nonTerminals, i->getFrom().getName() ));
-        rightSide.push_back( getSymbol ( terminals,    i->getInput().getSymbol() ));
-        rightSide.push_back( getSymbol ( nonTerminals, i->getTo().getName() ));
-
-        r . setLeftSide( leftSide );
-        r . setRightSide( rightSide );
-        regularGrammar -> addRule(r);
-
-        // 2b
-        if ( automaton -> getFinalStates() . find( i-> getTo()) != automaton->getFinalStates().end() )
-        {
-            Rule r;
-            list<Symbol> leftSide, rightSide;
-
-            leftSide.push_back( getSymbol( nonTerminals, i->getFrom().getName() ));
-            rightSide.push_back( getSymbol( terminals, i->getInput().getSymbol() ));
-            r.setLeftSide( leftSide );
-            r.setRightSide( rightSide );
-
-            regularGrammar -> addRule(r);
-        }
-    }
-
-    // step 3 - Set S in G
-    assert( automaton->getInitialStates().size() == 1 ); // TODO: What if... FSM has more than 1 initial state?
-    regularGrammar-> setStartSymbol( Symbol( automaton->getInitialStates().begin() -> getName() ));
-
-    // step 4
-    if ( automaton->getFinalStates() . find( State(regularGrammar -> getStartSymbol().getSymbol())) != automaton->getFinalStates().end() )
-    {
-        regularGrammar -> addTerminalSymbol( Symbol( "" ));
-        // 4a
-        if ( ! isNonterminalOnRightSide( regularGrammar -> getRules(), regularGrammar -> getStartSymbol() ) )
-        {
-            Rule r;
-            list<Symbol> leftSide, rightSide;
-
-            leftSide.push_back( regularGrammar -> getStartSymbol() );
-            rightSide.push_back( Symbol( "" ) );
-
-            regularGrammar -> addRule(r);
-        }
-        else // 4b
-        {
-            Symbol newStart(regularGrammar->getStartSymbol().getSymbol() + "'"); //TODO: unique name
-            regularGrammar -> addNonTerminalSymbol( newStart );
-
-            for( set<Rule>::const_iterator i = regularGrammar->getRules().begin(); i != regularGrammar->getRules().end(); i++ )
-            {
-                if( *(i->getLeftSide().begin()) == regularGrammar->getStartSymbol())
-                {
-                    Rule r;
-                    list<Symbol> leftSide, rightSide( i->getRightSide() );
-                    leftSide.push_back( newStart );
-
-                    r.setLeftSide( leftSide );
-                    r.setRightSide( rightSide );
-                    regularGrammar -> addRule(r);
-                }
-            }
-            regularGrammar -> setStartSymbol( newStart );
-
-            Rule rr;
-            list<Symbol> leftSide, rightSide;
-            leftSide.push_back( newStart );
-            rightSide.push_back( Symbol( "" ) );
-            rr.setLeftSide( leftSide );
-            rr.setRightSide( rightSide );
-
-            regularGrammar-> addRule(rr);
-        }
-    }
-
-    return regularGrammar;
-}
diff --git a/aconversions/src/fsm2rg/FSM2RGConvert.h b/aconversions/src/fsm2rg/FSM2RGConvert.h
deleted file mode 100644
index 7307b8c5d50d4c2fc37d3444844dd5ca685ff710..0000000000000000000000000000000000000000
--- a/aconversions/src/fsm2rg/FSM2RGConvert.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * FSM2RGConvert.h
- *
- *  Created on: 10. 11. 2013
- *      Author: Tomas Pecka
- */
-
-//FIXME Find better name than fsm2rg !
-
-#ifndef FSM2RGCONVERT_H_
-#define FSM2RGCONVERT_H_
-
-#include "automaton/FSM/FSM.h"
-#include "grammar/RightRegularGrammar.h"
-
-using namespace std;
-using namespace automaton;
-using namespace grammar;
-
-class FSM2RGConvert
-{
-public:
-    static RightRegularGrammar* convert( FSM* automaton );
-
-protected:
-    static bool isNonterminalOnRightSide( const set<Rule> & rules, const Symbol & nonterminal );
-    static const Symbol& getSymbol( const set<Symbol> & symbolSet, const string& symbol );
-};
-
-#endif /* FSM2RGCONVERT_H_ */
diff --git a/aconversions/src/fsm2rg/afsm2rg.cpp b/aconversions/src/fsm2rg/afsm2rg.cpp
deleted file mode 100644
index 37af23c730692078d99bc974526d9b16d927a395..0000000000000000000000000000000000000000
--- a/aconversions/src/fsm2rg/afsm2rg.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-//============================================================================
-// Name        : afsm2rg.cpp
-// Author      : Tomas Pecka
-// Version     :
-// Copyright   :
-// Description :
-//============================================================================
-
-#include <iostream>
-
-#include "automaton/UnknownAutomaton.h"
-#include "AutomatonFactory.h"
-#include "AlibException.h"
-
-#include "FSM2RGConvert.h"
-#include "grammar/GrammarPrinter.h"
-
-using namespace std;
-using namespace automaton;
-using namespace alib;
-
-int main(int argc, char** argv)
-{
-    UnknownAutomaton automaton;
-
-    try
-    {
-        if (argc > 1)
-        {
-            if (string("-h").compare(argv[1]) == 0)
-            {
-                cout << "Converts FSM to right regular grammar." << endl;
-                cout << "Usage: afsm2rg [automaton.xml]" << endl;
-                return -1;
-            }
-
-            automaton = AutomatonFactory::fromFile(argv[1]);
-        }
-        else
-        {
-            string input(istreambuf_iterator<char>(cin), (istreambuf_iterator<char>()));
-            automaton = AutomatonFactory::fromString(input);
-        }
-
-        Automaton* knownAutomaton = AutomatonFactory::buildAutomaton(&automaton);
-        Grammar* rg = FSM2RGConvert::convert( dynamic_cast<FSM*>(knownAutomaton) );
-        GrammarPrinter::toXML(*rg, cout);
-    }
-    catch (AlibException& e)
-    {
-        cout << e.what() << endl;
-        return 0;
-    }
-}
diff --git a/aconversions/src/rg2fsm/RG2FSMConvert.cpp b/aconversions/src/rg2fsm/RG2FSMConvert.cpp
deleted file mode 100644
index 7b10ecbc350d4edb9b15b3c9f1a071688a6f23d0..0000000000000000000000000000000000000000
--- a/aconversions/src/rg2fsm/RG2FSMConvert.cpp
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * FSM2RGConvert.cpp
- *
- *  Created on: 10. 11. 2013
- *      Author: tomas
- */
-
-#include <algorithm>
-#include "RG2FSMConvert.h"
-
-#include <iostream>
-#include <cassert>
-
-/*
- * implements 2.98 in "[2] Melichar, B. Jazyky a překlady. Praha, Vydavatelství ČVUT 2007."
- * Input: Right regular grammar G=(N,T,P,S)
- * Output: NFA M = (Q, T, \delta, q_0, F) , L(M)=L(G)
- */
-
-// Check whether the nonterminal is on right side of any rule.
-const Symbol& RG2FSMConvert::getSymbol( const set<Symbol> & symbolSet, const string& symbol )
-{
-    for( set<Symbol>::const_iterator i = symbolSet.begin(); i != symbolSet.end(); i++ )
-    {
-        if ( i->getSymbol() == symbol )
-            return *i;
-    }
-
-    assert(false);
-    return *symbolSet.begin();
-}
-
-
-FSM * RG2FSMConvert::convert( RightRegularGrammar* grammar )
-{
-    FSM* automaton = new FSM();
-
-    // step 1
-    for( set<Symbol>::const_iterator i = grammar -> getTerminalSymbols().begin(); i != grammar -> getTerminalSymbols().end(); i++ )
-        automaton -> addInputSymbol( *i );
-
-    // step 2
-    for( set<Symbol>::const_iterator i = grammar -> getNonTerminalSymbols().begin(); i != grammar -> getNonTerminalSymbols().end(); i++ )
-        automaton -> addState( State( i->getSymbol() ) );
-
-    State AState( "o____o" ); // TODO: unique name
-    automaton -> addState( AState );
-
-    // step 3, constructing \delta
-    for( set<Rule>::const_iterator i = grammar -> getRules().begin(); i != grammar -> getRules().end(); i++ )
-    {
-        State current( i->getLeftSide().begin()->getSymbol() );
-        Symbol input( i->getRightSide().begin()->getSymbol() );
-
-        // if B->a => \delta(B,a)=AState
-        if( i->getRightSide().size() == 1 )
-            automaton->addTransition( current, input, AState );
-
-        // if B->aC => \delta(B,a)=C
-        if( i->getRightSide().size() == 2 )
-        {
-            list<Symbol>::const_iterator it = i->getRightSide().begin();
-            it ++;
-            State next( it->getSymbol() );
-            automaton->addTransition( current, input, next );
-        }
-
-    }
-
-    // step 4
-    automaton -> addInitialState( State( grammar->getStartSymbol().getSymbol()) );
-
-    // step 5
-    automaton -> addFinalState( AState );
-    for( set<Rule>::const_iterator i = grammar->getRules().begin(); i != grammar->getRules().end(); i++ )
-    {
-        // if S->\epsilon
-        if( i->getLeftSide().size() == 1 && *( i->getLeftSide().begin() ) == grammar->getStartSymbol() &&
-            i->getRightSide().size() == 1 && *( i->getRightSide().begin()) == Symbol("") )
-        {
-            automaton -> addFinalState( State( grammar->getStartSymbol().getSymbol() ));
-        }
-    }
-
-    return automaton;
-}
diff --git a/aconversions/src/rg2fsm/RG2FSMConvert.h b/aconversions/src/rg2fsm/RG2FSMConvert.h
deleted file mode 100644
index 0e11ce44ce017479e565712608e461ed86e30665..0000000000000000000000000000000000000000
--- a/aconversions/src/rg2fsm/RG2FSMConvert.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * RG2FSMConvert.h
- *
- *  Created on: 10. 11. 2013
- *      Author: Tomas Pecka
- */
-
-#ifndef RG2FSMCONVERT_H_
-#define RG2FSMCONVERT_H_
-
-#include "automaton/FSM/FSM.h"
-#include "grammar/RightRegularGrammar.h"
-
-using namespace std;
-using namespace automaton;
-using namespace grammar;
-
-class RG2FSMConvert
-{
-public:
-    static FSM* convert( RightRegularGrammar* grammar );
-
-protected:
-    static const Symbol& getSymbol( const set<Symbol> & symbolSet, const string& symbol );
-};
-
-#endif /* RG2FSMCONVERT_H_ */
diff --git a/aconversions/src/rg2fsm/arg2fsm.cpp b/aconversions/src/rg2fsm/arg2fsm.cpp
deleted file mode 100644
index 48bec1d7475dd98188a146eb6e97100bbcb03f03..0000000000000000000000000000000000000000
--- a/aconversions/src/rg2fsm/arg2fsm.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-//============================================================================
-// Name        : afsm2rg.cpp
-// Author      : Tomas Pecka
-// Version     :
-// Copyright   :
-// Description :
-//============================================================================
-
-#include <iostream>
-
-#include "grammar/UnknownGrammar.h"
-#include "GrammarFactory.h"
-#include "AlibException.h"
-
-#include "automaton/AutomatonPrinter.h"
-
-#include "RG2FSMConvert.h"
-
-using namespace std;
-using namespace grammar;
-using namespace automaton;
-using namespace alib;
-
-int main(int argc, char** argv)
-{
-    UnknownGrammar grammar;
-
-    try
-    {
-        if (argc > 1)
-        {
-            if (string("-h").compare(argv[1]) == 0)
-            {
-                cout << "Converts right regular grammar to nfsm." << endl;
-                cout << "Usage: arg2fsm [grammar.xml]" << endl;
-                return -1;
-            }
-
-            grammar = GrammarFactory::fromFile(argv[1]);
-        }
-        else
-        {
-            string input(istreambuf_iterator<char>(cin), (istreambuf_iterator<char>()));
-            grammar = GrammarFactory::fromString(input);
-        }
-
-        RightRegularGrammar knownGrammar = GrammarFactory::buildRightRegularGrammar(&grammar);
-        FSM* fsm = RG2FSMConvert::convert( & knownGrammar );
-        AutomatonPrinter::toXML(*fsm, cout);
-    }
-    catch (AlibException& e)
-    {
-        cout << e.what() << endl;
-        return 0;
-    }
-}
diff --git a/aconversions/src/utils/AutomatonUtils.cpp b/aconversions/src/utils/AutomatonUtils.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9d491cbc299da9dfc07426863baee56ae717a0a9
--- /dev/null
+++ b/aconversions/src/utils/AutomatonUtils.cpp
@@ -0,0 +1,40 @@
+#include "AutomatonUtils.h"
+
+/**
+ * Creates unique state in set by appending integer to name parameter.
+ *
+ * @param name desired name of state
+ * @param existingStates set of states where to insert new state
+ * @return state with unique name(@see Symbol)
+ */
+
+State AutomatonUtils::createUniqueState( const char * name, const set<State> & existingStates )
+{
+    string str ( name );
+    return createUniqueState( str, existingStates );
+}
+
+
+State AutomatonUtils::createUniqueState( const string & name, const set<State> & existingStates )
+{
+    State s( name );
+    if( ! isInSet( s, existingStates ) )
+        return s;
+
+    int i = 1;
+    while( true )
+    {
+        ostringstream oss;
+        oss << name << i ++;
+
+        State s( oss.str() );
+
+        if( ! isInSet( s, existingStates ) )
+            return s;
+
+        if( i == INT_MAX )
+            throw AutomatonException( "AutomatonUtils::createUniqueState: Couldn't create unique state." );
+    }
+
+    return s; // intentionally, unreachable
+}
diff --git a/aconversions/src/utils/AutomatonUtils.h b/aconversions/src/utils/AutomatonUtils.h
new file mode 100644
index 0000000000000000000000000000000000000000..deed8616ac6f5e0fb19b600f6f83f4e437b96ffc
--- /dev/null
+++ b/aconversions/src/utils/AutomatonUtils.h
@@ -0,0 +1,24 @@
+#ifndef AUTOMATONUTILS_H_
+#define AUTOMATONUTILS_H_
+
+#include "utils.h"
+
+#include <automaton/exception/AutomatonException.h>
+#include <automaton/State.h>
+
+using namespace std;
+using namespace alib;
+using namespace automaton;
+
+class AutomatonUtils
+{
+
+public:
+    static State createUniqueState( const char * name, const set<State> & existingStates );
+    static State createUniqueState( const string & name, const set<State> & existingStates );
+
+private:
+
+};
+
+#endif /* AUTOMATONUTILS_H_ */
diff --git a/aconversions/src/utils/GrammarUtils.cpp b/aconversions/src/utils/GrammarUtils.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..88f5b322bc7af0e72df077f7d5392c3fe7417ff5
--- /dev/null
+++ b/aconversions/src/utils/GrammarUtils.cpp
@@ -0,0 +1,79 @@
+#include "GrammarUtils.h"
+
+/**
+ * Checks whether given non-terminal symbol is on the right side of any rule
+ *
+ * @param nonTerminal given non-terminal
+ * @param rules set of rules to check
+ * @return true/false
+ */
+bool GrammarUtils::isNonterminalOnRightSide( const Symbol & nonTerminal, const set<Rule> & rules )
+{
+    for( set<Rule>::const_iterator i = rules.begin(); i!= rules.end(); i++ )
+    {
+        list<Symbol> leftSide = i -> getLeftSide();
+
+        list<Symbol>::const_iterator onRightSide = find( leftSide.begin(), leftSide.end(), nonTerminal );
+        if ( onRightSide != leftSide.end() )
+            return true;
+    }
+
+    return false;
+}
+
+
+const list<Symbol>::const_iterator GrammarUtils::getFirstSymbolFromSet( const list<Symbol> & ruleSymbols, const set<Symbol> & grammarSymbols )
+{
+    list<Symbol>::const_iterator i;
+
+    for( i = ruleSymbols.begin(); i != ruleSymbols.end(); i++ )
+        if( isInSet( *i, grammarSymbols ) )
+            return i;
+
+    return i;
+}
+
+bool GrammarUtils::isEpsilonRule( const Rule & rule )
+{
+    // relies on grammar check. Assumes that aLib allows only S->\eps, where S is startSymbol of Grammar (by definition)
+    return rule.getRightSide().size() == 0;
+}
+
+Symbol GrammarUtils::createUniqueSymbol( const char * name, const RegularGrammar & grammar, SuffixType suffix = UNDEFINED )
+{
+    string str( name );
+    return createUniqueSymbol( name, grammar, suffix );
+}
+
+Symbol GrammarUtils::createUniqueSymbol( const string & name, const RegularGrammar & grammar, SuffixType suffix = UNDEFINED )
+{
+    if( suffix >= UNDEFINED )
+        suffix = INTEGER;
+
+    Symbol s( name );
+    if( ! isInSet( s, grammar.getNonTerminalSymbols() ) && ! isInSet( s, grammar.getTerminalSymbols() ) )
+        return s;
+
+    int i = 1;
+    string str = "'";
+    while( true )
+    {
+        ostringstream oss;
+        if( suffix == INTEGER )
+            oss << name << i++;
+        else
+        {
+            oss << name << str;
+            str += '\'';
+        }
+
+        Symbol s( oss.str() );
+        if( ! isInSet( s, grammar.getNonTerminalSymbols() ) && ! isInSet( s, grammar.getTerminalSymbols() ) )
+            return s;
+
+        if( i == INT_MAX )
+            throw GrammarException( "GrammarUtils::createUniqueSymbol: Couldn't create unique symbol." );
+    }
+
+    return s; // intentionally, unreachable
+}
diff --git a/aconversions/src/utils/GrammarUtils.h b/aconversions/src/utils/GrammarUtils.h
new file mode 100644
index 0000000000000000000000000000000000000000..1e5c740b0246b9ecd4a5a5a1a35959e28a27b345
--- /dev/null
+++ b/aconversions/src/utils/GrammarUtils.h
@@ -0,0 +1,38 @@
+/*
+ * GrammarUtils.h
+ *
+ *  Created on: 29. 11. 2013
+ *      Author: tomas
+ */
+
+#ifndef GRAMMARUTILS_H_
+#define GRAMMARUTILS_H_
+
+#include "utils.h"
+
+#include <grammar/GrammarException.h>
+#include <grammar/RegularGrammar.h>
+#include <grammar/Rule.h>
+#include <alphabet/Symbol.h>
+
+using namespace std;
+using namespace grammar;
+
+
+class GrammarUtils
+{
+
+public:
+    static bool isNonterminalOnRightSide( const Symbol & nonTerminal, const set<Rule> & rules );
+    static const list<Symbol>::const_iterator getFirstSymbolFromSet( const list<Symbol> & ruleSymbols, const set<Symbol> & grammarSymbols );
+
+    static bool isEpsilonRule( const Rule & rule );
+
+    static Symbol createUniqueSymbol( const char * name, const RegularGrammar & grammar, SuffixType suffix );
+    static Symbol createUniqueSymbol( const string & name, const RegularGrammar & grammar, SuffixType suffix );
+
+private:
+
+};
+
+#endif /* GRAMMARUTILS_H_ */
diff --git a/aconversions/src/utils/utils.h b/aconversions/src/utils/utils.h
new file mode 100644
index 0000000000000000000000000000000000000000..dea4501b7ae6ca216a4330ced59deca5ad82437c
--- /dev/null
+++ b/aconversions/src/utils/utils.h
@@ -0,0 +1,21 @@
+#ifndef UTILS_H_
+#define UTILS_H_
+
+#include <climits>
+#include <sstream>
+#include <string>
+#include <algorithm>
+#include <set>
+#include <list>
+
+
+#define isInSet(x,set) ( (set).find((x)) != (set).end())
+
+enum SuffixType
+{
+    INTEGER,
+    APOSTROPHE,
+    UNDEFINED,
+};
+
+#endif /* UTILS_H_ */