Index: /branches/HeuristicLab.Problems.GPDL.Backend/Build.cmd
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/Build.cmd	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/Build.cmd	(revision 10055)
@@ -0,0 +1,104 @@
+@ECHO OFF
+
+SET CLEANBEFOREBUILD=
+
+SET SELECTED=
+SET CONFIGURATION=
+SET PLATFORM=
+
+IF "%~1"=="" GOTO :prompt_solution
+
+SET SELECTED=%1
+IF NOT EXIST %SELECTED% (
+  ECHO Solution file %SELECTED% could not be found.
+  GOTO :end
+)
+ECHO Building solution %SELECTED% ...
+GOTO :config_selection
+
+:prompt_solution
+SET /A COUNT=0
+FOR /F "tokens=*" %%A IN ('dir /B *.sln') DO (
+  CALL :forloopbody "%%A"
+)
+
+IF "%COUNT%"=="1" (
+  SET SELECTED=%SOLUTIONS.1%
+  ECHO Building %SOLUTIONS.1% as it is the only solution that was found ...
+  GOTO :config_selection
+)
+
+ECHO Found the following solutions:
+FOR /F "tokens=2* delims=.=" %%A IN ('SET SOLUTIONS.') DO ECHO %%A = %%B
+ECHO.
+SET /P SOLUTIONINDEX=Which solution to build? Type the number: 
+
+SET SELECTED=""
+FOR /F "tokens=2* delims=.=" %%A IN ('SET SOLUTIONS.') DO (
+  IF "%%A"=="%SOLUTIONINDEX%" SET SELECTED=%%B
+)
+
+IF %SELECTED%=="" GOTO :eof
+
+:config_selection
+IF "%~2"==""  GOTO :prompt_config
+
+SET CONFIGURATION=%~2
+ECHO Building configuration %CONFIGURATION% ...
+GOTO :platform_selection
+
+:prompt_config
+SET /P CONFIGURATION=Which configuration to build [Release]: 
+IF "%CONFIGURATION%"=="" SET CONFIGURATION=Release
+
+:platform_selection
+IF "%~3"=="" GOTO :prompt_platform
+  
+SET PLATFORM=%~3
+ECHO Building platform %PLATFORM% ...
+GOTO :clean
+
+:prompt_platform
+SET /P PLATFORM=Which platform to build [Any CPU]: 
+IF "%PLATFORM%"=="" SET PLATFORM=Any CPU
+
+:clean
+IF "%~4"=="" GOTO :prompt_clean
+
+SET CLEANBEFOREBUILD=%~4
+GOTO :main
+
+:prompt_clean
+SET /P CLEANBEFOREBUILD=Would you like to clean before building [n]: 
+IF "%CLEANBEFOREBUILD%"=="" SET CLEANBEFOREBUILD=n
+
+:main
+REM First find the path to the msbuild.exe by performing a registry query
+FOR /F "tokens=1,3 delims=	 " %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0"') DO (
+  IF "%%A"=="MSBuildToolsPath" SET MSBUILDPATH=%%B)
+
+REM Then execute msbuild to clean and build the solution
+REM Disable that msbuild creates a cache file of the solution
+SET MSBuildUseNoSolutionCache=1
+REM Run msbuild to clean and then build
+IF "%CLEANBEFOREBUILD%" NEQ "n" (
+  ECHO Cleaning ...
+  %MSBUILDPATH%msbuild.exe %SELECTED% /target:Clean /p:Configuration="%CONFIGURATION%",Platform="%PLATFORM%" /m:2 /nologo /verbosity:q /clp:ErrorsOnly
+)
+ECHO Building ...
+%MSBUILDPATH%msbuild.exe %SELECTED% /target:Build /p:Configuration="%CONFIGURATION%",Platform="%PLATFORM%" /m:2 /nologo /verbosity:q /clp:ErrorsOnly
+
+ECHO.
+ECHO DONE.
+
+:end
+
+PAUSE
+
+GOTO :eof
+
+REM This workaround is necessary so that COUNT gets reevaluated
+:forloopbody
+SET /A COUNT+=1
+SET SOLUTIONS.%COUNT%=%1
+GOTO :eof
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Backend.sln
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Backend.sln	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Backend.sln	(revision 10055)
@@ -0,0 +1,129 @@
+﻿
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{3768D612-38EB-47D8-9E79-75D8E5AB00A8}"
+	ProjectSection(SolutionItems) = preProject
+		GenerateFromAtg.cmd = GenerateFromAtg.cmd
+		PreBuildEvent.cmd = PreBuildEvent.cmd
+	EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.GPDL-3.4", "HeuristicLab.Problems.GPDL\3.4\HeuristicLab.Problems.GPDL-3.4.csproj", "{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SyntaxAnalyzer", "SyntaxAnalyzer\SyntaxAnalyzer.csproj", "{729B818F-E1D0-4C9D-915A-775B2A4B1D27}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Coco-2", "Coco-2", "{582440C3-BB33-4683-A5EC-673AB51A7AB3}"
+	ProjectSection(SolutionItems) = preProject
+		Coco-2\Errors.cs = Coco-2\Errors.cs
+		Coco-2\Main.frm = Coco-2\Main.frm
+		Coco-2\PGT.exe = Coco-2\PGT.exe
+		Coco-2\PGTSem.frm = Coco-2\PGTSem.frm
+		Coco-2\PGTSyn.frm = Coco-2\PGTSyn.frm
+		Coco-2\Sets.cs = Coco-2\Sets.cs
+		Coco-2\SG.exe = Coco-2\SG.exe
+		Coco-2\SGLex.frm = Coco-2\SGLex.frm
+		Coco-2\Utils.cs = Coco-2\Utils.cs
+	EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.GPDL.Views-3.4", "HeuristicLab.Problems.GPDL.Views\3.4\HeuristicLab.Problems.GPDL.Views-3.4.csproj", "{3F9E665A-3DCB-49C3-8806-0E47FC48EA52}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GpdlCompiler", "GpdlCompiler\GpdlCompiler.csproj", "{C3A2E1C9-9677-4992-A1B7-7B38CDB82FEF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test", "Test\Test.csproj", "{94073310-27AB-4C93-8FDD-3D35824AE3F7}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Grammars-3.3", "HeuristicLab.Grammars\3.3\HeuristicLab.Grammars-3.3.csproj", "{A5452B63-B33B-4F9F-9E81-98B75EDB5612}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.GPDL.CodeGen-3.4", "HeuristicLab.Problems.GPDL.CodeGen\3.4\HeuristicLab.Problems.GPDL.CodeGen-3.4.csproj", "{F8481248-2A5B-48A0-A485-D3E1619C1E44}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Debug|x64 = Debug|x64
+		Debug|x86 = Debug|x86
+		Release|Any CPU = Release|Any CPU
+		Release|x64 = Release|x64
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}.Debug|x64.ActiveCfg = Debug|x64
+		{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}.Debug|x64.Build.0 = Debug|x64
+		{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}.Debug|x86.ActiveCfg = Debug|x86
+		{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}.Debug|x86.Build.0 = Debug|x86
+		{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}.Release|x64.ActiveCfg = Release|x64
+		{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}.Release|x64.Build.0 = Release|x64
+		{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}.Release|x86.ActiveCfg = Release|x86
+		{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}.Release|x86.Build.0 = Release|x86
+		{729B818F-E1D0-4C9D-915A-775B2A4B1D27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{729B818F-E1D0-4C9D-915A-775B2A4B1D27}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{729B818F-E1D0-4C9D-915A-775B2A4B1D27}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{729B818F-E1D0-4C9D-915A-775B2A4B1D27}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{729B818F-E1D0-4C9D-915A-775B2A4B1D27}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{729B818F-E1D0-4C9D-915A-775B2A4B1D27}.Release|Any CPU.Build.0 = Release|Any CPU
+		{729B818F-E1D0-4C9D-915A-775B2A4B1D27}.Release|x64.ActiveCfg = Release|Any CPU
+		{729B818F-E1D0-4C9D-915A-775B2A4B1D27}.Release|x86.ActiveCfg = Release|Any CPU
+		{3F9E665A-3DCB-49C3-8806-0E47FC48EA52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{3F9E665A-3DCB-49C3-8806-0E47FC48EA52}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{3F9E665A-3DCB-49C3-8806-0E47FC48EA52}.Debug|x64.ActiveCfg = Debug|x64
+		{3F9E665A-3DCB-49C3-8806-0E47FC48EA52}.Debug|x64.Build.0 = Debug|x64
+		{3F9E665A-3DCB-49C3-8806-0E47FC48EA52}.Debug|x86.ActiveCfg = Debug|x86
+		{3F9E665A-3DCB-49C3-8806-0E47FC48EA52}.Debug|x86.Build.0 = Debug|x86
+		{3F9E665A-3DCB-49C3-8806-0E47FC48EA52}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{3F9E665A-3DCB-49C3-8806-0E47FC48EA52}.Release|Any CPU.Build.0 = Release|Any CPU
+		{3F9E665A-3DCB-49C3-8806-0E47FC48EA52}.Release|x64.ActiveCfg = Release|x64
+		{3F9E665A-3DCB-49C3-8806-0E47FC48EA52}.Release|x64.Build.0 = Release|x64
+		{3F9E665A-3DCB-49C3-8806-0E47FC48EA52}.Release|x86.ActiveCfg = Release|x86
+		{3F9E665A-3DCB-49C3-8806-0E47FC48EA52}.Release|x86.Build.0 = Release|x86
+		{C3A2E1C9-9677-4992-A1B7-7B38CDB82FEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{C3A2E1C9-9677-4992-A1B7-7B38CDB82FEF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C3A2E1C9-9677-4992-A1B7-7B38CDB82FEF}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{C3A2E1C9-9677-4992-A1B7-7B38CDB82FEF}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{C3A2E1C9-9677-4992-A1B7-7B38CDB82FEF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{C3A2E1C9-9677-4992-A1B7-7B38CDB82FEF}.Release|Any CPU.Build.0 = Release|Any CPU
+		{C3A2E1C9-9677-4992-A1B7-7B38CDB82FEF}.Release|x64.ActiveCfg = Release|Any CPU
+		{C3A2E1C9-9677-4992-A1B7-7B38CDB82FEF}.Release|x86.ActiveCfg = Release|Any CPU
+		{94073310-27AB-4C93-8FDD-3D35824AE3F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{94073310-27AB-4C93-8FDD-3D35824AE3F7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{94073310-27AB-4C93-8FDD-3D35824AE3F7}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{94073310-27AB-4C93-8FDD-3D35824AE3F7}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{94073310-27AB-4C93-8FDD-3D35824AE3F7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{94073310-27AB-4C93-8FDD-3D35824AE3F7}.Release|Any CPU.Build.0 = Release|Any CPU
+		{94073310-27AB-4C93-8FDD-3D35824AE3F7}.Release|x64.ActiveCfg = Release|Any CPU
+		{94073310-27AB-4C93-8FDD-3D35824AE3F7}.Release|x86.ActiveCfg = Release|Any CPU
+		{A5452B63-B33B-4F9F-9E81-98B75EDB5612}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A5452B63-B33B-4F9F-9E81-98B75EDB5612}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A5452B63-B33B-4F9F-9E81-98B75EDB5612}.Debug|x64.ActiveCfg = Debug|x64
+		{A5452B63-B33B-4F9F-9E81-98B75EDB5612}.Debug|x64.Build.0 = Debug|x64
+		{A5452B63-B33B-4F9F-9E81-98B75EDB5612}.Debug|x86.ActiveCfg = Debug|x86
+		{A5452B63-B33B-4F9F-9E81-98B75EDB5612}.Debug|x86.Build.0 = Debug|x86
+		{A5452B63-B33B-4F9F-9E81-98B75EDB5612}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A5452B63-B33B-4F9F-9E81-98B75EDB5612}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A5452B63-B33B-4F9F-9E81-98B75EDB5612}.Release|x64.ActiveCfg = Release|x64
+		{A5452B63-B33B-4F9F-9E81-98B75EDB5612}.Release|x64.Build.0 = Release|x64
+		{A5452B63-B33B-4F9F-9E81-98B75EDB5612}.Release|x86.ActiveCfg = Release|x86
+		{A5452B63-B33B-4F9F-9E81-98B75EDB5612}.Release|x86.Build.0 = Release|x86
+		{F8481248-2A5B-48A0-A485-D3E1619C1E44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F8481248-2A5B-48A0-A485-D3E1619C1E44}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F8481248-2A5B-48A0-A485-D3E1619C1E44}.Debug|x64.ActiveCfg = Debug|x64
+		{F8481248-2A5B-48A0-A485-D3E1619C1E44}.Debug|x64.Build.0 = Debug|x64
+		{F8481248-2A5B-48A0-A485-D3E1619C1E44}.Debug|x86.ActiveCfg = Debug|x86
+		{F8481248-2A5B-48A0-A485-D3E1619C1E44}.Debug|x86.Build.0 = Debug|x86
+		{F8481248-2A5B-48A0-A485-D3E1619C1E44}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F8481248-2A5B-48A0-A485-D3E1619C1E44}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F8481248-2A5B-48A0-A485-D3E1619C1E44}.Release|x64.ActiveCfg = Release|x64
+		{F8481248-2A5B-48A0-A485-D3E1619C1E44}.Release|x64.Build.0 = Release|x64
+		{F8481248-2A5B-48A0-A485-D3E1619C1E44}.Release|x86.ActiveCfg = Release|x86
+		{F8481248-2A5B-48A0-A485-D3E1619C1E44}.Release|x86.Build.0 = Release|x86
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(NestedProjects) = preSolution
+		{582440C3-BB33-4683-A5EC-673AB51A7AB3} = {3768D612-38EB-47D8-9E79-75D8E5AB00A8}
+	EndGlobalSection
+	GlobalSection(Performance) = preSolution
+		HasPerformanceSessions = true
+	EndGlobalSection
+EndGlobal
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.CodeGen/3.4/HeuristicLab.Problems.GPDL.CodeGen-3.4.csproj
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.CodeGen/3.4/HeuristicLab.Problems.GPDL.CodeGen-3.4.csproj	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.CodeGen/3.4/HeuristicLab.Problems.GPDL.CodeGen-3.4.csproj	(revision 10055)
@@ -0,0 +1,201 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{F8481248-2A5B-48A0-A485-D3E1619C1E44}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Problems.GPDL.CodeGen</RootNamespace>
+    <AssemblyName>HeuristicLab.Problems.GPDL.CodeGen-3.4</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Collections-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Data-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Operators-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Operators-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Optimization-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization.Operators-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Optimization.Operators-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Parameters-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Parameters-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Random-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Random-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.SequentialEngine-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.SequentialEngine-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Windows.Forms.DataVisualization" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <Compile Include="ProblemGenerator.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Plugin.cs.frame" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.GPDL\3.4\HeuristicLab.Problems.GPDL-3.4.csproj">
+      <Project>{e4ee5afb-d552-447b-8a16-6cbe7938af32}</Project>
+      <Name>HeuristicLab.Problems.GPDL-3.4</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.CodeGen/3.4/Plugin.cs.frame
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.CodeGen/3.4/Plugin.cs.frame	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.CodeGen/3.4/Plugin.cs.frame	(revision 10055)
@@ -0,0 +1,29 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Problems.GPDL.CodeGen {
+  [Plugin("HeuristicLab.Problems.GPDL.CodeGen","Provides classes for code generation for the genetic programming problem definition language GPDL.", "3.4.0.$WCREV$")]
+  [PluginFile("HeuristicLab.Problems.GPDL.CodeGen-3.4.dll", PluginFileType.Assembly)]
+  public class Plugin : PluginBase {
+  }
+}
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.CodeGen/3.4/ProblemGenerator.cs
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.CodeGen/3.4/ProblemGenerator.cs	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.CodeGen/3.4/ProblemGenerator.cs	(revision 10055)
@@ -0,0 +1,686 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.CodeDom.Compiler;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Optimization;
+using Microsoft.CSharp;
+
+namespace HeuristicLab.Problems.GPDL.CodeGen {
+public class ProblemGenerator {
+  #region templates
+
+  private string usings = @"
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Random;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Optimization;
+using HeuristicLab.Optimization.Operators;
+using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
+using System.Collections.Generic;
+using System.Linq;
+using System;
+using System.Threading;
+using HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm;
+using HeuristicLab.SequentialEngine;
+using HeuristicLab.Selection;
+";
+
+  private string problemClassTemplate = @"
+namespace ?PROBLEMNAME? {
+  [StorableClass]
+  [Item(""?IDENT?Problem"", """")]
+  public sealed class ?IDENT?Problem : SingleObjectiveHeuristicOptimizationProblem<?IDENT?Evaluator, ISymbolicExpressionTreeCreator> {
+    public new ?IDENT?Evaluator Evaluator { 
+      get { return (?IDENT?Evaluator)base.Evaluator; }
+      set { base.Evaluator = value; }
+    }
+    public IValueParameter<ISymbolicExpressionGrammar> GrammarParameter { 
+      get { return (IValueParameter<ISymbolicExpressionGrammar>)Parameters[""SymbolicExpressionTreeGrammar""]; }
+    }
+
+    [Storable]
+    public ISymbolicExpressionGrammar Grammar { get { return GrammarParameter.Value; } }
+
+    [StorableConstructor]
+    private ?IDENT?Problem(bool deserializing) : base(deserializing) { 
+       Initialize();
+    }
+    private ?IDENT?Problem(?IDENT?Problem original, Cloner cloner) : base(original, cloner) {
+      Initialize();
+    }
+    public ?IDENT?Problem() { 
+      Parameters.Add(new ValueParameter<ISymbolicExpressionGrammar>(""SymbolicExpressionTreeGrammar"", new ?IDENT?Grammar(this)));
+      Parameters.Add(new FixedValueParameter<IntValue>(""MaximumSymbolicExpressionTreeDepth"", new IntValue(15)));
+      Parameters.Add(new FixedValueParameter<IntValue>(""MaximumSymbolicExpressionTreeLength"", new IntValue(100)));
+      Parameters.Add(new FixedValueParameter<IntValue>(""MaximumFunctionDefinitions"", new IntValue(0)));
+      Parameters.Add(new FixedValueParameter<IntValue>(""MaximumFunctionArguments"", new IntValue(0)));
+      Parameters[""MaximumFunctionDefinitions""].Hidden = true;
+      Parameters[""MaximumFunctionArguments""].Hidden = true;
+      Initialize();
+
+      Evaluator = new ?IDENT?Evaluator(this);
+      SolutionCreator = new ProbabilisticTreeCreator();
+
+ 
+      Maximization.Value = Evaluator.Maximization;
+      MaximizationParameter.Hidden = true;
+    
+      InitializeOperators();
+    }    
+
+    private void Initialize() {
+      ?INITCODE?
+    }
+
+    private void InitializeOperators() {
+      Operators.AddRange(ApplicationManager.Manager.GetInstances<ISymbolicExpressionTreeOperator>());
+      Operators.Add(new SymbolicExpressionSymbolFrequencyAnalyzer());
+      Operators.Add(new MinAverageMaxSymbolicExpressionTreeLengthAnalyzer());
+      Operators.Add(new SymbolicExpressionTreeLengthAnalyzer());
+      Operators.Add(new BestSymbolicExpressionTreeAnalyzer());
+      ParameterizeOperators();
+    }
+    private void ParameterizeOperators() {
+      var operators = Parameters.OfType<IValueParameter>().Select(p => p.Value).OfType<IOperator>().Union(Operators).ToList();
+
+      foreach (var op in operators.OfType<ISymbolicExpressionTreeGrammarBasedOperator>()) {
+        op.SymbolicExpressionTreeGrammarParameter.ActualName = GrammarParameter.Name;
+      }
+      foreach (var op in operators.OfType<ISymbolicExpressionTreeSizeConstraintOperator>()) {
+        op.MaximumSymbolicExpressionTreeDepthParameter.ActualName = ""MaximumSymbolicExpressionTreeDepth"";
+        op.MaximumSymbolicExpressionTreeLengthParameter.ActualName = ""MaximumSymbolicExpressionTreeLength"";
+      }
+      foreach (var op in operators.OfType<ISymbolicExpressionTreeArchitectureAlteringOperator>()) {
+        op.MaximumFunctionArgumentsParameter.ActualName = ""MaximumFunctionArguments"";
+        op.MaximumFunctionDefinitionsParameter.ActualName = ""MaximumFunctionDefinitions"";
+      }
+      foreach (var op in operators.OfType<ISymbolicExpressionTreeCrossover>()) {
+        op.ParentsParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
+        op.ChildParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
+      }
+      foreach (var op in operators.OfType<ISymbolicExpressionTreeManipulator>()) {
+        op.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
+      }
+      foreach (var op in operators.OfType<ISymbolicExpressionTreeAnalyzer>()) {
+        op.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
+      }
+      foreach(var op in operators.OfType<BestSymbolicExpressionTreeAnalyzer>()) {
+        op.QualityParameter.ActualName = Evaluator.QualityParameter.Name;
+      }
+    }
+
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ?IDENT?Problem(this, cloner);
+    }
+
+    public double Calculate(ISymbolicExpressionTree solution) {
+      InitSymbolStream(solution);
+      try {
+      ?FITNESSFUNCTION?
+      } catch(Exception e) {
+        var formatter = new SymbolicExpressionTreeStringFormatter();
+        Console.WriteLine(formatter.Format(solution));
+        throw;
+      }
+    }
+
+    ?ADDITIONALCODE?
+
+    private ISymbolicExpressionTreeNode rootNode;
+    private void InitSymbolStream(ISymbolicExpressionTree solution) {    
+      this.rootNode =  solution.Root.GetSubtree(0).GetSubtree(0);
+    }
+
+    ?INTERPRETERSOURCE?
+
+    ?CONSTRAINTSSOURCE?
+  }
+}";
+
+  private string symbolClassTemplate = @"
+namespace ?PROBLEMNAME? {
+  [StorableClass]
+  [Item(""?IDENT?"", """")]
+  public sealed class ?IDENT? : Symbol {
+    public override int MinimumArity {
+      get { return 0; }
+    }
+    public override int MaximumArity {
+      get { return byte.MaxValue; }
+    }
+
+    internal ?PROBLEMNAME?Problem problem;
+
+    [StorableConstructor]
+    private ?IDENT?(bool deserializing) : base(deserializing) { }
+    private ?IDENT?(?IDENT? original, Cloner cloner) : base(original, cloner) { 
+      this.problem = original.problem;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ?IDENT?(this, cloner);
+    }
+    public ?IDENT?(?PROBLEMNAME?Problem problem) : base(""?IDENT?"", string.Empty) { 
+      this.problem = problem;
+    }
+  }
+}";
+
+  private string terminalSymbolClassTemplate = @"
+namespace ?PROBLEMNAME? {
+  [StorableClass]
+  [Item(""?IDENT?"", """")]
+  public sealed class ?IDENT? : Symbol {
+    public override int MinimumArity {
+      get { return 0; }
+    }
+    public override int MaximumArity {
+      get { return 0; }
+    }
+
+    internal ?PROBLEMNAME?Problem problem;
+
+    [StorableConstructor]
+    private ?IDENT?(bool deserializing) : base(deserializing) { }
+    private ?IDENT?(?IDENT? original, Cloner cloner) : base(original, cloner) { 
+      this.problem = original.problem;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ?IDENT?(this, cloner);
+    }
+    public ?IDENT?(?PROBLEMNAME?Problem problem) : base(""?IDENT?"", string.Empty) { 
+      this.problem = problem;
+    }
+    public override ISymbolicExpressionTreeNode CreateTreeNode() {
+      return new ?IDENT?TreeNode(this);
+    }
+  }
+}";
+
+  private string treeNodeClassTemplate = @"
+namespace ?PROBLEMNAME? {
+  [StorableClass]
+  public sealed class ?IDENT?TreeNode : SymbolicExpressionTreeTerminalNode {
+    public new ?IDENT? Symbol {
+      get { return (?IDENT?)base.Symbol; }
+    }
+
+    ?FIELDS?
+
+    [StorableConstructor]
+    private ?IDENT?TreeNode(bool deserializing) : base(deserializing) { }
+    private ?IDENT?TreeNode(?IDENT?TreeNode original, Cloner cloner)
+      : base(original, cloner) {
+      ?CLONECODE? 
+    }
+    public ?IDENT?TreeNode(?IDENT? symbol) : base(symbol) { }
+
+    public override bool HasLocalParameters {
+      get { return true; }
+    }
+
+    public override void ResetLocalParameters(IRandom random) {
+      base.ResetLocalParameters(random);
+      ?RESETFIELDSCODE?
+    }
+
+    public override void ShakeLocalParameters(IRandom random, double shakingFactor) {
+      base.ShakeLocalParameters(random, shakingFactor);
+      ?SHAKEFIELDSCODE?
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ?IDENT?TreeNode(this, cloner);
+    }    
+  }
+}";
+
+  private string grammarClassTemplate = @"
+namespace ?PROBLEMNAME? {
+  [NonDiscoverableType]
+  [StorableClass]
+  [Item(""?IDENT?Grammar"", """")]
+  public class ?IDENT?Grammar : SymbolicExpressionGrammar {
+    [StorableConstructor]
+    protected ?IDENT?Grammar(bool deserializing) : base(deserializing) { }
+    protected ?IDENT?Grammar(?IDENT?Grammar original, Cloner cloner) : base(original, cloner) { }
+    public ?IDENT?Grammar(?IDENT?Problem problem)
+      : base(ItemAttribute.GetName(typeof(?IDENT?Grammar)), ItemAttribute.GetDescription(typeof(?IDENT?Grammar))) {
+      Initialize(problem);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ?IDENT?Grammar(this, cloner);
+    }
+
+    private void Initialize(?IDENT?Problem problem) {
+      ?CREATESYMBOLS?
+      var rootSymbol = ?ROOTSYMBOL?;
+
+      ?SETSUBTREECOUNTS?
+
+      // set start symbol
+      AddAllowedChildSymbol(StartSymbol, rootSymbol);
+
+      ?SETALLOWEDSUBTREECOUNTS?
+    }
+  }
+}
+";
+  private string evaluatorClassTemplate = @"
+namespace ?PROBLEMNAME? {
+  [StorableClass]
+  [Item(""?IDENT?Evaluator"", """")]  
+  public class ?IDENT?Evaluator : SingleSuccessorOperator, ISingleObjectiveEvaluator {
+    private const string SymbolicExpressionTreeParameterName = ""SymbolicExpressionTree"";
+    private const string QualityParameterName = ""Quality"";
+
+    public override bool CanChangeName { get { return false; } }
+
+    #region parameter properties
+    public ILookupParameter<ISymbolicExpressionTree> SymbolicExpressionTreeParameter {
+      get { return (ILookupParameter<ISymbolicExpressionTree>)Parameters[SymbolicExpressionTreeParameterName]; }
+    }
+    public ILookupParameter<DoubleValue> QualityParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters[QualityParameterName]; }
+    }
+    #endregion
+    public bool Maximization { get { return ?MAXIMIZATION?; }  }
+
+    public ?IDENT?Problem problem;
+
+    [StorableConstructor]
+    protected ?IDENT?Evaluator(bool deserializing) : base(deserializing) { }
+    protected ?IDENT?Evaluator(?IDENT?Evaluator original, Cloner cloner)
+      : base(original, cloner) {
+      this.problem = original.problem;
+    }
+    public ?IDENT?Evaluator(?IDENT?Problem problem)
+      : base() {
+      Parameters.Add(new LookupParameter<ISymbolicExpressionTree>(SymbolicExpressionTreeParameterName));
+      Parameters.Add(new LookupParameter<DoubleValue>(QualityParameterName));
+      this.problem = problem;
+    }
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ?IDENT?Evaluator(this, cloner);
+    }
+
+    public override IOperation Apply() {
+      var solution = SymbolicExpressionTreeParameter.ActualValue;
+      double quality = problem.Calculate(solution);
+      QualityParameter.ActualValue = new DoubleValue(quality);
+      return base.Apply();
+    }
+  }
+}
+";
+  #endregion
+
+  private StringBuilder problemSourceCode;
+
+  public ProblemGenerator() {
+    problemSourceCode = new StringBuilder();
+  }
+
+  public ISingleObjectiveHeuristicOptimizationProblem GenerateFromAst(GPDefNode definition) {
+    problemSourceCode.AppendLine(usings);
+
+    GenerateSymbols(definition.NonTerminals);
+    GenerateSymbols(definition.Terminals);
+
+    GenerateTreeNodes(definition.Terminals);
+    GenerateGrammar(definition);
+
+    GenerateEvaluator(definition);
+    GenerateProblem(definition);
+
+    problemSourceCode.Replace("?PROBLEMNAME?", definition.Name);
+
+    // write to a file for debugging
+    using (var stream = new StreamWriter(definition.Name + ".cs")) {
+      stream.WriteLine(problemSourceCode.ToString());
+    }
+
+    // compile generated source
+    using (var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v4.0" } })) {
+      var parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.Core.dll", "System.dll", "System.Drawing.dll" }, Path.ChangeExtension(Path.GetRandomFileName(), ".dll"), true);
+      parameters.ReferencedAssemblies.Add(@"HeuristicLab.Common-3.3.dll");
+      parameters.ReferencedAssemblies.Add(@"HeuristicLab.Common.Resources-3.3.dll");
+      parameters.ReferencedAssemblies.Add(@"HeuristicLab.Core-3.3.dll");
+      parameters.ReferencedAssemblies.Add(@"HeuristicLab.Data-3.3.dll");
+      parameters.ReferencedAssemblies.Add(@"HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll");
+      parameters.ReferencedAssemblies.Add(@"HeuristicLab.Random-3.3.dll");
+      parameters.ReferencedAssemblies.Add(@"HeuristicLab.Persistence-3.3.dll");
+      parameters.ReferencedAssemblies.Add(@"HeuristicLab.PluginInfrastructure-3.3.dll");
+      parameters.ReferencedAssemblies.Add(@"HeuristicLab.Optimization-3.3.dll");
+      parameters.ReferencedAssemblies.Add(@"HeuristicLab.Optimization.Operators-3.3.dll");
+      parameters.ReferencedAssemblies.Add(@"HeuristicLab.Operators-3.3.dll");
+      parameters.ReferencedAssemblies.Add(@"HeuristicLab.Collections-3.3.dll");
+      parameters.ReferencedAssemblies.Add(@"HeuristicLab.Parameters-3.3.dll");
+      parameters.ReferencedAssemblies.Add(@"HeuristicLab.Problems.DataAnalysis-3.4.dll");
+      parameters.ReferencedAssemblies.Add(@"ALGLIB-3.7.0.dll");
+      parameters.ReferencedAssemblies.Add(@"HeuristicLab.Problems.Instances-3.3.dll");
+      parameters.ReferencedAssemblies.Add(@"HeuristicLab.Problems.Instances.DataAnalysis-3.3.dll");
+      parameters.ReferencedAssemblies.Add(@"HeuristicLab.SequentialEngine-3.3.dll");
+      parameters.ReferencedAssemblies.Add(@"HeuristicLab.ParallelEngine-3.3.dll");
+      parameters.ReferencedAssemblies.Add(@"HeuristicLab.Algorithms.GeneticAlgorithm-3.3.dll");
+      parameters.ReferencedAssemblies.Add(@"HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.dll");
+      parameters.ReferencedAssemblies.Add(@"HeuristicLab.Selection-3.3.dll");
+
+      CompilerResults results = csc.CompileAssemblyFromSource(parameters, problemSourceCode.ToString());
+      results.Errors.Cast<CompilerError>()
+        .ToList()
+        .ForEach(error => Console.WriteLine(error.Line + " " + error.ErrorText));
+
+      // load the assembly, and create an instance from the generate problem class
+      var asm = results.CompiledAssembly;
+      AppDomain.CurrentDomain.Load(asm.GetName());
+      var problem = Activator.CreateInstance(asm.FullName, definition.Name + "." + definition.Name + "Problem").Unwrap();
+      return (ISingleObjectiveHeuristicOptimizationProblem)problem;
+    }
+  }
+
+
+
+  private void GenerateEvaluator(GPDefNode definition) {
+    var evaluatorClassCode =
+      evaluatorClassTemplate
+        .Replace("?IDENT?", definition.Name)
+        .Replace("?MAXIMIZATION?", definition.FitnessFunctionNode.Maximization ? "true" : "false");
+    problemSourceCode.AppendLine(evaluatorClassCode).AppendLine();
+  }
+
+  private void GenerateProblem(GPDefNode definition) {
+    var problemClassCode =
+      problemClassTemplate
+        .Replace("?IDENT?", definition.Name)
+        .Replace("?FITNESSFUNCTION?", definition.FitnessFunctionNode.SrcCode)
+        .Replace("?INTERPRETERSOURCE?", GenerateInterpreterSource(definition))
+        .Replace("?INITCODE?", definition.InitCodeNode.SrcCode)
+        .Replace("?ADDITIONALCODE?", definition.ClassCodeNode.SrcCode)
+        .Replace("?CONSTRAINTSSOURCE?", GenerateConstraintMethods(definition.Terminals));
+
+    problemSourceCode.AppendLine(problemClassCode).AppendLine();
+  }
+
+  private string GenerateConstraintMethods(List<SymbolNode> symbols) {
+    var sb = new StringBuilder();
+    var terminals = symbols.OfType<TerminalNode>();
+    foreach (var t in terminals) {
+      sb.AppendLine(GenerateConstraintMethods(t));
+    }
+    return sb.ToString();
+  }
+
+  private string GenerateConstraintMethods(TerminalNode t) {
+    var sb = new StringBuilder();
+    foreach (var c in t.Constraints) {
+      var fieldType = t.FieldDefinitions.First(d => d.Identifier == c.Ident).Type;
+      if (c.Type == ConstraintNodeType.Range) {
+        sb.AppendFormat("public {0} GetMax{1}_{2}() {{ return {3}; }}", fieldType, t.Ident, c.Ident, c.RangeMaxExpression).AppendLine();
+        sb.AppendFormat("public {0} GetMin{1}_{2}() {{ return {3}; }}", fieldType, t.Ident, c.Ident, c.RangeMinExpression).AppendLine();
+      } else if (c.Type == ConstraintNodeType.Set) {
+        sb.AppendFormat("public IEnumerable<{0}> GetAllowed{1}_{2}() {{ return {3}; }}", fieldType, t.Ident, c.Ident, c.SetExpression).AppendLine();
+      }
+    }
+    return sb.ToString();
+  }
+
+  private string GenerateInterpreterSource(GPDefNode definition) {
+    var sb = new StringBuilder();
+    var g = new Grammar(definition.NonTerminals, definition.Terminals, definition.Rules);
+    string formalParameter = definition.NonTerminals.Single(nt => nt.Ident == g.RootSymbol).FormalParameters;
+    var actualParameterEnumerable =
+      Util.ExtractFormalParameters(formalParameter).Select(e => e.RefOrOut + " " + e.Identifier);
+    string actualParameter = string.Empty;
+    if (actualParameterEnumerable.Any()) {
+      foreach (var e in actualParameterEnumerable) {
+        actualParameter += ", " + e;
+      }
+    }
+    sb.AppendFormat("void {0}({1}) {{ {0}(rootNode {2}); }}", g.RootSymbol, formalParameter, actualParameter).AppendLine();
+
+    foreach (var s in definition.NonTerminals) {
+      sb.AppendLine(GenerateInterpreterMethod(g, s));
+    }
+    foreach (var s in definition.Terminals) {
+      sb.AppendLine(GenerateTerminalInterpreterMethod((TerminalNode)s));
+    }
+    return sb.ToString();
+  }
+
+  private string GenerateTerminalInterpreterMethod(TerminalNode s) {
+    var sb = new StringBuilder();
+    if (!s.FormalParameters.Any())
+      sb.AppendFormat("private void {0}(ISymbolicExpressionTreeNode tree) {{", s.Ident);
+    else
+      sb.AppendFormat("private void {0}(ISymbolicExpressionTreeNode tree, {1}) {{", s.Ident, s.FormalParameters);
+    sb.AppendFormat("if (tree.Symbol == null || tree.Symbol.Name != \"{0}\") throw new InvalidOperationException();", s.Ident).AppendLine();
+    sb.AppendFormat("var cur = ({0}TreeNode)tree;", s.Ident).AppendLine();
+    foreach (var element in s.FieldDefinitions) {
+      sb.AppendFormat("{0} = cur.{0}", element.Identifier).AppendLine(";");
+    }
+    sb.AppendLine("}");
+    return sb.ToString();
+  }
+
+  private string GenerateInterpreterMethod(Grammar g, SymbolNode s) {
+    var sb = new StringBuilder();
+    if (!s.FormalParameters.Any())
+      sb.AppendFormat("private void {0}(ISymbolicExpressionTreeNode tree) {{", s.Ident);
+    else
+      sb.AppendFormat("private void {0}(ISymbolicExpressionTreeNode tree, {1}) {{", s.Ident, s.FormalParameters);
+    sb.AppendLine(g.GetLocalDefinitions(s.Ident));
+    sb.AppendFormat("ISymbolicExpressionTreeNode subtree = null;").AppendLine();
+    sb.AppendFormat("if (tree.Symbol== null || tree.Symbol.Name != \"{0}\") throw new InvalidOperationException();", s.Ident).AppendLine();
+    var alts = g.GetAlternatives(s.Ident);
+    var lookahead = alts.Select(seq => seq.First());
+    if (lookahead.Count() > 1) {
+      sb.AppendLine("System.Diagnostics.Debug.Assert(tree.SubtreeCount == 1);");
+      sb.AppendLine("subtree = tree.GetSubtree(0);");
+      int i = 0;
+      sb.AppendFormat("if(subtree.Symbol.Name == \"{0}\") {{ ", lookahead.First()).AppendLine();
+      foreach (var e in g.GetSequenceWithSemanticActions(s.Ident, i++)) {
+        sb.AppendLine(GenerateSourceForAction(e));
+      }
+      foreach (var l in lookahead.Skip(1)) {
+        sb.AppendFormat("}} else if(subtree.Symbol.Name == \"{0}\") {{ ", l).AppendLine();
+        foreach (var e in g.GetSequenceWithSemanticActions(s.Ident, i++)) {
+          sb.AppendLine(GenerateSourceForAction(e));
+        }
+      }
+      sb.AppendFormat("}} else throw new System.InvalidOperationException(\"In {0} found symbol \"+tree.Symbol.Name+\". Expected one of: {1}\");", s.Ident, lookahead.Aggregate("", (acc, l) => acc + l + " ")).AppendLine();
+    } else {
+      int eIdx = 0;
+      foreach (var e in g.GetSequenceWithSemanticActions(s.Ident, 0)) {
+        if (e is CallSymbolNode) {
+          sb.AppendFormat("subtree = tree.GetSubtree({0});", eIdx++);
+        }
+        sb.AppendLine(GenerateSourceForAction(e));
+      }
+    }
+    sb.AppendLine("}");
+    return sb.ToString();
+  }
+
+  private string GenerateSourceForAction(RuleExprNode e) {
+    var action = e as RuleActionNode;
+    var call = e as CallSymbolNode;
+    if (action != null) {
+      return action.SrcCode + ";";
+    } else if (call != null) {
+      if (!call.ActualParameter.Any())
+        return string.Format("{0}(subtree);", call.Ident);
+      else
+        return string.Format("{0}(subtree, {1});", call.Ident, call.ActualParameter);
+    } else {
+      throw new ArgumentException();
+    }
+  }
+
+  private void GenerateGrammar(GPDefNode definition) {
+    IEnumerable<SymbolNode> ntSymbols = definition.NonTerminals;
+    IEnumerable<SymbolNode> tSymbols = definition.Terminals;
+    List<RuleNode> ruleNodes = definition.Rules;
+    var g = new Grammar(ntSymbols, tSymbols, ruleNodes);
+    Console.WriteLine(g);
+
+    var grammarClassCode =
+      grammarClassTemplate
+        .Replace("?IDENT?", definition.Name)
+        .Replace("?CREATESYMBOLS?", GenerateGrammarSymbolDefinitionSource(g))
+        .Replace("?ROOTSYMBOL?", "_" + g.RootSymbol)
+        .Replace("?SETSUBTREECOUNTS?", GenerateGrammarSubtreeCountDefinitionSource(g))
+        .Replace("?SETALLOWEDSUBTREECOUNTS?", GenerateGrammarAllowedSubtreeDefinitionSource(g));
+
+
+    problemSourceCode.AppendLine(grammarClassCode).AppendLine();
+  }
+
+  private string GenerateGrammarSymbolDefinitionSource(Grammar g) {
+    StringBuilder sb = new StringBuilder();
+    foreach (var sy in g.Symbols) {
+      sb.AppendFormat("var _{0} = new {0}(problem); AddSymbol(_{0});", sy).AppendLine();
+    }
+    return sb.ToString();
+  }
+
+  private string GenerateGrammarSubtreeCountDefinitionSource(Grammar g) {
+    StringBuilder sb = new StringBuilder();
+    foreach (var sy in g.Symbols) {
+      var alt = g.GetAlternatives(sy);
+      if (alt.Count() > 0) {
+        var minSeqLength = alt.Min(seq => seq.Count);
+        var maxSeqLength = alt.Max(seq => seq.Count);
+        sb.AppendFormat("SetSubtreeCount(_{0}, {1}, {2});", sy, maxSeqLength, minSeqLength).AppendLine();
+      } else {
+        sb.AppendFormat("SetSubtreeCount(_{0}, {1}, {2});", sy, 0, 0).AppendLine();
+      }
+    }
+    return sb.ToString();
+  }
+
+  private string GenerateGrammarAllowedSubtreeDefinitionSource(Grammar g) {
+    StringBuilder sb = new StringBuilder();
+    foreach (var sy in g.Symbols) {
+      foreach (var seq in g.GetAlternatives(sy)) {
+        for (int argIdx = 0; argIdx < seq.Count; argIdx++) {
+          var childSy = seq[argIdx];
+          sb.AppendFormat("AddAllowedChildSymbol(_{0}, _{1}, {2});", sy, childSy, argIdx).AppendLine();
+        }
+      }
+    }
+    return sb.ToString();
+  }
+
+  private void GenerateTreeNodes(IEnumerable<SymbolNode> symbols) {
+    foreach (var s in symbols.OfType<TerminalNode>()) {
+      var classCode = treeNodeClassTemplate
+        .Replace("?IDENT?", s.Ident)
+        .Replace("?RESETFIELDSCODE?", GenerateNodeInitSourceCode(s))
+        .Replace("?SHAKEFIELDSCODE?", GenerateNodeUpdateSourceCode(s))
+        ;
+
+      StringBuilder fieldSource = new StringBuilder();
+      StringBuilder cloningSource = new StringBuilder();
+      foreach (var par in s.FieldDefinitions) {
+        fieldSource.AppendLine("[Storable]");
+        fieldSource.Append("internal ").Append(par.Type).Append(" ").Append(par.Identifier).AppendLine(";");
+
+        cloningSource.Append("this.").Append(par.Identifier)
+          .Append("=").Append("(").Append(par.Type).Append(")")
+          .Append("original.").Append(par.Identifier).AppendLine(";");
+
+      }
+
+      classCode = classCode.Replace("?FIELDS?", fieldSource.ToString());
+      classCode = classCode.Replace("?CLONECODE?", cloningSource.ToString());
+
+      problemSourceCode
+        .AppendLine(classCode)
+        .AppendLine();
+    }
+  }
+
+  private string GenerateNodeInitSourceCode(TerminalNode s) {
+    var sb = new StringBuilder();
+    sb.AppendLine("var problem = Symbol.problem;");
+    foreach (var f in s.FieldDefinitions) {
+      var cType = GetConstraintTypeFor(f.Identifier, s.Constraints);
+      if (cType == ConstraintNodeType.Range) {
+        sb.AppendFormat("var max_{1} = problem.GetMax{0}_{1}();", s.Ident, f.Identifier).AppendLine();
+        sb.AppendFormat("var min_{1} = problem.GetMin{0}_{1}();", s.Ident, f.Identifier).AppendLine();
+        sb.AppendFormat("{0} = min_{0} + random.NextDouble() * (max_{0} - min_{0});", f.Identifier).AppendLine();
+      } else if (cType == ConstraintNodeType.Set) {
+        sb.AppendFormat("var set_{1} = problem.GetAllowed{0}_{1}().ToList();", s.Ident, f.Identifier).AppendLine();
+        sb.AppendFormat("{0} = set_{0}[random.Next(set_{0}.Count())];", f.Identifier).AppendLine();
+      }
+    }
+    return sb.ToString();
+  }
+
+  private string GenerateNodeUpdateSourceCode(TerminalNode s) {
+    var sb = new StringBuilder();
+    sb.AppendLine("var problem = Symbol.problem;");
+    foreach (var f in s.FieldDefinitions) {
+      var cType = GetConstraintTypeFor(f.Identifier, s.Constraints);
+      if (cType == ConstraintNodeType.Range) {
+        sb.AppendFormat("var max_{1} = problem.GetMax{0}_{1}();", s.Ident, f.Identifier).AppendLine();
+        sb.AppendFormat("var min_{1} = problem.GetMin{0}_{1}();", s.Ident, f.Identifier).AppendLine();
+        sb.AppendFormat("{0} = min_{0} + random.NextDouble() * (max_{0} - min_{0});", f.Identifier).AppendLine();
+      } else if (cType == ConstraintNodeType.Set) {
+        sb.AppendFormat("var set_{1} = problem.GetAllowed{0}_{1}().ToList();", s.Ident, f.Identifier).AppendLine();
+        sb.AppendFormat("{0} = set_{0}[random.Next(set_{0}.Count())];", f.Identifier).AppendLine();
+      }
+    }
+    return sb.ToString();
+  }
+
+  private ConstraintNodeType GetConstraintTypeFor(string id, IEnumerable<ConstraintNode> contraints) {
+    return contraints.Single(c => c.Ident == id).Type;
+  }
+
+  private void GenerateSymbols(List<SymbolNode> symbols) {
+    foreach (var s in symbols.OfType<NonTerminalNode>()) {
+      problemSourceCode
+        .AppendLine(symbolClassTemplate.Replace("?IDENT?", s.Ident))
+        .AppendLine();
+    }
+    foreach (var s in symbols.OfType<TerminalNode>()) {
+      problemSourceCode
+        .AppendLine(terminalSymbolClassTemplate.Replace("?IDENT?", s.Ident))
+        .AppendLine();
+    }
+  }
+}
+}
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.CodeGen/3.4/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.CodeGen/3.4/Properties/AssemblyInfo.cs.frame	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.CodeGen/3.4/Properties/AssemblyInfo.cs.frame	(revision 10055)
@@ -0,0 +1,54 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Problems.GPDL.CodeGen")]
+[assembly: AssemblyDescription("Provides classes for code generation for the genetic programming problem definition language GPDL.")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2013 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("ADE66A14-2472-424D-B4CF-22D7CA7B333F")]
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.4.0.0")]
+[assembly: AssemblyFileVersion("3.4.0.$WCREV$")]
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/CodeEditor.xaml
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/CodeEditor.xaml	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/CodeEditor.xaml	(revision 10055)
@@ -0,0 +1,12 @@
+﻿<UserControl
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:avalonedit="http://icsharpcode.net/sharpdevelop/avalonedit" x:Class="HeuristicLab.Problems.GPDL.Views.CodeEditor" 
+             mc:Ignorable="d" 
+             d:DesignHeight="300" d:DesignWidth="300">
+    <Grid>
+        <avalonedit:TextEditor Name="textEditor" SyntaxHighlighting="{Binding syntaxHighlighting}" FontFamily="Consolas" MouseWheel="textEditor_MouseWheel" KeyDown="textEditor_KeyDown" KeyUp="textEditor_KeyUp" PreviewMouseWheel="textEditor_PreviewMouseWheel" />
+    </Grid>
+</UserControl>
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/CodeEditor.xaml.cs
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/CodeEditor.xaml.cs	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/CodeEditor.xaml.cs	(revision 10055)
@@ -0,0 +1,114 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.IO;
+using System.Windows.Controls;
+using System.Windows.Input;
+using System.Xml;
+using ICSharpCode.AvalonEdit.CodeCompletion;
+using ICSharpCode.AvalonEdit.Highlighting;
+using ICSharpCode.AvalonEdit.Highlighting.Xshd;
+
+namespace HeuristicLab.Problems.GPDL.Views {
+  /// <summary>
+  /// Interaction logic for CodeEditor.xaml
+  /// </summary>
+  public partial class CodeEditor : UserControl {
+    public string syntaxHighlighting { get; set; }
+    private bool controlHeld = false;
+    private CompletionWindow completionWindow;
+    private ColorizeErrors errorLineTransformer;
+
+    public CodeEditor() {
+      InitializeComponent();
+
+      LoadSyntaxHighlighting();
+
+      // for auto-completion
+      textEditor.TextArea.TextEntered += textEditor_TextArea_TextEntered;
+      // show errors visually
+      errorLineTransformer = new ColorizeErrors();
+      textEditor.TextArea.TextView.LineTransformers.Add(errorLineTransformer);
+    }
+
+    private void textEditor_TextArea_TextEntered(object sender, TextCompositionEventArgs e) {
+      if (e.Text == ".") {
+        // Open code completion after the user has pressed dot:
+        completionWindow = new CompletionWindow(textEditor.TextArea);
+        IList<ICompletionData> data = completionWindow.CompletionList.CompletionData;
+        data.Add(new MyCompletionData("Item1"));
+        data.Add(new MyCompletionData("Item2"));
+        data.Add(new MyCompletionData("Item3"));
+        completionWindow.Show();
+        completionWindow.Closed += delegate {
+          completionWindow = null;
+        };
+      }
+    }
+
+
+    private void LoadSyntaxHighlighting() {
+      textEditor.ShowLineNumbers = true;
+
+      using (var s = new StringReader(Properties.Resources.GPDL)) {
+        using (XmlTextReader reader = new XmlTextReader(s)) {
+          textEditor.SyntaxHighlighting = HighlightingLoader.Load(reader, HighlightingManager.Instance);
+
+        }
+      }
+    }
+
+    private void textEditor_MouseWheel(object sender, MouseWheelEventArgs e) {
+    }
+
+    private void textEditor_KeyDown(object sender, KeyEventArgs e) {
+      if (e.Key == Key.LeftCtrl || e.Key == Key.RightCtrl) controlHeld = true;
+    }
+
+    private void textEditor_KeyUp(object sender, KeyEventArgs e) {
+      controlHeld = false;
+    }
+
+    internal void SetLexError(string msg, int line, int col) {
+      errorLineTransformer.MarkLexError(msg, line, col);
+      textEditor.TextArea.TextView.Redraw();
+    }
+
+    internal void SetSynError(string msg, int line, int col) {
+      errorLineTransformer.MarkSynError(msg, line, col);
+      textEditor.TextArea.TextView.Redraw();
+    }
+
+    internal void ClearErrors() {
+      errorLineTransformer.ClearErrors();
+      textEditor.TextArea.TextView.Redraw();
+    }
+
+    private void textEditor_PreviewMouseWheel(object sender, MouseWheelEventArgs e) {
+      if (!controlHeld) return;
+      if (e.Delta > 0)
+        textEditor.FontSize += 1;
+      else textEditor.FontSize -= 1;
+      e.Handled = true;
+    }
+  }
+}
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/ColorizeErrors.cs
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/ColorizeErrors.cs	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/ColorizeErrors.cs	(revision 10055)
@@ -0,0 +1,144 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Windows;
+using System.Windows.Media;
+using System.Windows.Shapes;
+using ICSharpCode.AvalonEdit.Document;
+using ICSharpCode.AvalonEdit.Rendering;
+
+namespace HeuristicLab.Problems.GPDL.Views {
+  public class ColorizeErrors : DocumentColorizingTransformer {
+    private Dictionary<int, string> synErrors = new Dictionary<int, string>();
+    private Dictionary<int, string> lexErrors = new Dictionary<int, string>();
+
+    protected override void ColorizeLine(DocumentLine line) {
+      if (lexErrors.ContainsKey(line.LineNumber)) {
+        ChangeLinePart(line.Offset, line.Offset + line.Length, ChangeLexError);
+      } else if (synErrors.ContainsKey(line.LineNumber)) {
+        ChangeLinePart(line.Offset, line.Offset + line.Length, ChangeSynError);
+      }
+      //int lineStartOffset = line.Offset;
+      //string text = CurrentContext.Document.GetText(line);
+      //int start = 0;
+      //int index;
+      //while ((index = text.IndexOf("AvalonEdit", start)) >= 0) {
+      //  base.ChangeLinePart(
+      //    lineStartOffset + index, // startOffset
+      //    lineStartOffset + index + 10, // endOffset
+      //    (VisualLineElement element) => {
+      //      // This lambda gets called once for every VisualLineElement
+      //      // between the specified offsets.
+      //      Typeface tf = element.TextRunProperties.Typeface;
+      //      // Replace the typeface with a modified version of
+      //      // the same typeface
+      //      element.TextRunProperties.SetTypeface(new Typeface(
+      //        tf.FontFamily,
+      //        FontStyles.Italic,
+      //        FontWeights.Bold,
+      //        tf.Stretch
+      //      ));
+      //    });
+      //  start = index + 1; // search for next occurrence
+      //}
+    }
+
+    private void ChangeSynError(VisualLineElement element) {
+
+
+      var wigglePath = new Path();
+      wigglePath.Data = Geometry.Parse("M 0,1 C 1,0 2,2 3,1");
+      wigglePath.Stroke = Brushes.Red;
+      wigglePath.StrokeThickness = 0.2;
+      wigglePath.StrokeEndLineCap = PenLineCap.Square;
+      wigglePath.StrokeStartLineCap = PenLineCap.Square;
+
+      var wigglyBrush = new VisualBrush();
+      wigglyBrush.Viewbox = new Rect(0, 0, 3, 2);
+      wigglyBrush.ViewboxUnits = BrushMappingMode.Absolute;
+      wigglyBrush.Viewport = new Rect(0, 0.8, 6, 4);
+      wigglyBrush.ViewportUnits = BrushMappingMode.Absolute;
+      wigglyBrush.TileMode = TileMode.Tile;
+      wigglyBrush.Visual = wigglePath;
+
+
+      var wigglyPen = new Pen(wigglyBrush, 6.0);
+      var decorations = new TextDecorationCollection();
+      decorations.Add(new TextDecoration(0, wigglyPen, 0, TextDecorationUnit.Pixel, TextDecorationUnit.Pixel));
+      element.TextRunProperties.SetTextDecorations(decorations);
+      //element.TextRunProperties.SetTypeface(new Typeface(
+      //  tf.FontFamily,
+      //  FontStyles.Italic,
+      //  FontWeights.Bold,
+      //  tf.Stretch
+      //));
+    }
+
+    private void ChangeLexError(VisualLineElement element) {
+
+      var wigglePath = new Path();
+      wigglePath.Data = Geometry.Parse("M 0,1 C 1,0 2,2 3,1");
+      wigglePath.Stroke = Brushes.Red;
+      wigglePath.StrokeThickness = 0.2;
+      wigglePath.StrokeEndLineCap = PenLineCap.Square;
+      wigglePath.StrokeStartLineCap = PenLineCap.Square;
+
+      var wigglyBrush = new VisualBrush();
+      wigglyBrush.Viewbox = new Rect(0, 0, 3, 2);
+      wigglyBrush.ViewboxUnits = BrushMappingMode.Absolute;
+      wigglyBrush.Viewport = new Rect(0, 0.8, 6, 4);
+      wigglyBrush.ViewportUnits = BrushMappingMode.Absolute;
+      wigglyBrush.TileMode = TileMode.Tile;
+      wigglyBrush.Visual = wigglePath;
+
+
+      var wigglyPen = new Pen(wigglyBrush, 6.0);
+      var decorations = new TextDecorationCollection();
+      decorations.Add(new TextDecoration(0, wigglyPen, 0, TextDecorationUnit.Pixel, TextDecorationUnit.Pixel));
+      element.TextRunProperties.SetTextDecorations(decorations);
+
+      //element.TextRunProperties.SetTypeface(new Typeface(
+      //  tf.FontFamily,
+      //  FontStyles.Italic,
+      //  FontWeights.Bold,
+      //  tf.Stretch
+      //));
+    }
+
+    internal void MarkSynError(string msg, int line, int col) {
+      if (!synErrors.ContainsKey(line)) {
+        synErrors.Add(line, msg);
+      }
+    }
+
+    internal void MarkLexError(string msg, int line, int col) {
+      if (!lexErrors.ContainsKey(line)) {
+        lexErrors.Add(line, msg);
+      }
+    }
+
+    internal void ClearErrors() {
+      synErrors.Clear();
+      lexErrors.Clear();
+    }
+  }
+}
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/CreateProblemMenuItem.cs
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/CreateProblemMenuItem.cs	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/CreateProblemMenuItem.cs	(revision 10055)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using HeuristicLab.MainForm;
+using HeuristicLab.Optimizer;
+
+namespace HeuristicLab.Problems.GPDL.Views {
+  internal class CreateProblemMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
+    public override string Name {
+      get { return "Open &GPDL Editor"; }
+    }
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&Edit" }; }
+    }
+    public override int Position {
+      get { return 3000; }
+    }
+    public override string ToolTipText {
+      get { return "Create a genetic programming problem from a GPDL definition."; }
+    }
+
+    protected override void OnToolStripItemSet(EventArgs e) {
+      ToolStripItem.Enabled = true;
+    }
+    protected override void OnActiveViewChanged(object sender, EventArgs e) {
+      ToolStripItem.Enabled = true;
+    }
+    protected override void OnViewChanged(object sender, EventArgs e) {
+      base.OnViewChanged(sender, e);
+      ToolStripItem.Enabled = true;
+    }
+
+    public override void Execute() {
+      var view = MainFormManager.CreateView(typeof(GpdlEditor));
+      view.Show();
+    }
+  }
+}
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/GpdlCompletionData.cs
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/GpdlCompletionData.cs	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/GpdlCompletionData.cs	(revision 10055)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using ICSharpCode.AvalonEdit.CodeCompletion;
+using ICSharpCode.AvalonEdit.Document;
+using ICSharpCode.AvalonEdit.Editing;
+
+namespace HeuristicLab.Problems.GPDL.Views {
+  /// Implements AvalonEdit ICompletionData interface to provide the entries in the
+  /// completion drop down.
+  public class MyCompletionData : ICompletionData {
+    public MyCompletionData(string text) {
+      this.Text = text;
+    }
+
+    public System.Windows.Media.ImageSource Image {
+      get { return null; }
+    }
+
+    public string Text { get; private set; }
+
+    // Use this property if you want to show a fancy UIElement in the list.
+    public object Content {
+      get { return this.Text; }
+    }
+
+    public object Description {
+      get { return "Description for " + this.Text; }
+    }
+
+    public double Priority { get; private set; }
+
+    public void Complete(TextArea textArea, ISegment completionSegment,
+        EventArgs insertionRequestEventArgs) {
+      textArea.Document.Replace(completionSegment, this.Text);
+    }
+  }
+}
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/GpdlEditor.Designer.cs
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/GpdlEditor.Designer.cs	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/GpdlEditor.Designer.cs	(revision 10055)
@@ -0,0 +1,141 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Problems.GPDL.Views {
+  partial class GpdlEditor {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.compileButton = new System.Windows.Forms.Button();
+      this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.elementHost = new System.Windows.Forms.Integration.ElementHost();
+      this.codeEditor = new HeuristicLab.Problems.GPDL.Views.CodeEditor();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // compileButton
+      // 
+      this.compileButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.compileButton.Location = new System.Drawing.Point(583, 431);
+      this.compileButton.Name = "compileButton";
+      this.compileButton.Size = new System.Drawing.Size(75, 23);
+      this.compileButton.TabIndex = 0;
+      this.compileButton.Text = "Compile";
+      this.compileButton.UseVisualStyleBackColor = true;
+      this.compileButton.Click += new System.EventHandler(this.compileButton_Click);
+      // 
+      // splitContainer
+      // 
+      this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer.IsSplitterFixed = true;
+      this.splitContainer.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer.Name = "splitContainer";
+      this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      // 
+      // splitContainer.Panel1
+      // 
+      this.splitContainer.Panel1.Controls.Add(this.viewHost);
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.elementHost);
+      this.splitContainer.Panel2.Controls.Add(this.compileButton);
+      this.splitContainer.Size = new System.Drawing.Size(661, 487);
+      this.splitContainer.SplitterDistance = 26;
+      this.splitContainer.TabIndex = 2;
+      // 
+      // viewHost
+      // 
+      this.viewHost.Caption = "View";
+      this.viewHost.Content = null;
+      this.viewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.viewHost.Enabled = false;
+      this.viewHost.Location = new System.Drawing.Point(0, 0);
+      this.viewHost.Name = "viewHost";
+      this.viewHost.ReadOnly = false;
+      this.viewHost.Size = new System.Drawing.Size(661, 26);
+      this.viewHost.TabIndex = 0;
+      this.viewHost.ViewsLabelVisible = true;
+      this.viewHost.ViewType = null;
+      // 
+      // elementHost
+      // 
+      this.elementHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.elementHost.Location = new System.Drawing.Point(0, 0);
+      this.elementHost.Name = "elementHost";
+      this.elementHost.Size = new System.Drawing.Size(661, 425);
+      this.elementHost.TabIndex = 2;
+      this.elementHost.Text = "elementHost2";
+      this.elementHost.Child = this.codeEditor;
+      // 
+      // GpdlEditor
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.splitContainer);
+      this.Name = "GpdlEditor";
+      this.Size = new System.Drawing.Size(661, 487);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
+      this.splitContainer.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private ViewHost viewHost;
+    private System.Windows.Forms.Button compileButton;
+    private System.Windows.Forms.SplitContainer splitContainer;
+    private System.Windows.Forms.Integration.ElementHost elementHost;
+    private CodeEditor codeEditor;
+  }
+}
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/GpdlEditor.cs
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/GpdlEditor.cs	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/GpdlEditor.cs	(revision 10055)
@@ -0,0 +1,95 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.IO;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm;
+using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.Optimization;
+using HeuristicLab.Problems.GPDL.CodeGen;
+using HeuristicLab.Problems.Instances;
+using HeuristicLab.Problems.Instances.Views;
+
+namespace HeuristicLab.Problems.GPDL.Views {
+  public partial class GpdlEditor : AsynchronousContentView, IProblemInstanceConsumer<string> {
+    public GpdlEditor() {
+      InitializeComponent();
+
+      viewHost.Content = null; //necessary to enable the change of the ViewType
+      viewHost.ViewType = typeof(GpdlProblemInstanceConsumerView);
+      viewHost.Content = this;
+    }
+
+    private void compileButton_Click(object sender, EventArgs e) {
+
+      using (var src = new MemoryStream(Encoding.UTF8.GetBytes(codeEditor.textEditor.Text))) {
+        Scanner scanner = new Scanner(src);
+        Parser parser = new Parser(scanner);
+        parser.Parse();
+
+        // generate an OSGA to solve the problem
+        var osga = new OffspringSelectionGeneticAlgorithm();
+        var problemGenerator = new ProblemGenerator();
+        osga.Problem = problemGenerator.GenerateFromAst(parser.AbstractSyntaxTree);
+        osga.Engine = new SequentialEngine.SequentialEngine();
+        osga.PopulationSize.Value = 500;
+        osga.MutationProbability.Value = 0.15;
+        osga.ComparisonFactorUpperBound.Value = 1.0;
+        osga.ComparisonFactorLowerBound.Value = 1.0;
+        osga.MutatorParameter.Value =
+          osga.MutatorParameter.ValidValues.First(o => o.Name.Contains("MultiSymbolicExpressionTreeManipulator"));
+        osga.SelectorParameter.Value =
+          osga.SelectorParameter.ValidValues.First(o => o.Name.Contains("GenderSpecific"));
+        osga.MaximumSelectionPressure.Value = 500;
+        osga.MaximumGenerations.Value = 100;
+        MainForm.MainFormManager.MainForm.ShowContent(osga);
+      }
+
+      codeEditor.ClearErrors();
+
+      // TODO adapt to Coco/R error handling to show errors in the GUI
+
+      //if (Errors.NumOfErrors() == 0) {
+      //  GPDefLex.InitLex();
+      //  GPDefSyn.Interpret();
+
+      //} else {
+      //  int nLexErrors = Errors.NumOfLexErrors();
+      //  for (int i = 0; i < nLexErrors; i++) {
+      //    var lexErr = Errors.GetLexError(i == 0);
+      //    codeEditor.SetLexError(lexErr.msg, lexErr.line, lexErr.col);
+      //  }
+      //  int nSynErrors = Errors.NumOfSynErrors();
+      //  for (int i = 0; i < nSynErrors; i++) {
+      //    var synErr = Errors.GetSynError(i == 0);
+      //    codeEditor.SetLexError(synErr.msg, synErr.line, synErr.col);
+      //  }
+      //}
+    }
+
+
+    void IProblemInstanceConsumer<string>.Load(string data) {
+      codeEditor.textEditor.Text = data;
+    }
+  }
+}
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/GpdlEditor.resx
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/GpdlEditor.resx	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/GpdlEditor.resx	(revision 10055)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/GpdlExampleDataDescriptor.cs
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/GpdlExampleDataDescriptor.cs	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/GpdlExampleDataDescriptor.cs	(revision 10055)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Problems.Instances;
+
+namespace HeuristicLab.Problems.GPDL.Views {
+  public class GpdlExampleDataDescriptor : IDataDescriptor {
+    public string Name { get; private set; }
+    public string Description { get; private set; }
+    public string Source { get; private set; }
+    public GpdlExampleDataDescriptor(string name, string description, string source) {
+      this.Name = name;
+      this.Description = description;
+      this.Source = source;
+    }
+  }
+}
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/GpdlExampleProvider.cs
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/GpdlExampleProvider.cs	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/GpdlExampleProvider.cs	(revision 10055)
@@ -0,0 +1,66 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using HeuristicLab.Problems.GPDL.Views.Properties;
+using HeuristicLab.Problems.Instances;
+
+namespace HeuristicLab.Problems.GPDL.Views {
+  public class GpdlExampleProvider : ProblemInstanceProvider<string> {
+    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
+      return new IDataDescriptor[]
+        {
+          new GpdlExampleDataDescriptor("Artificial Ant", "The artificial ant problem.", Resources.Artificial_Ant),
+          new GpdlExampleDataDescriptor("Lawn mower", "The lawn mower benchmark problem.", Resources.LawnMower), 
+          new GpdlExampleDataDescriptor("Factorial", "Evolve a program to calculate the factorial function.", Resources.Factorial),
+          new GpdlExampleDataDescriptor("Fibonacci", "Evolve a problem to calculate the fibonacci function.", Resources.Fib),
+          new GpdlExampleDataDescriptor("Multi-output multiplier", "Evolve a multi-output multiplier.", Resources.multi_output_multiplier),
+          new GpdlExampleDataDescriptor("Even parity", "The even parity (4) benchmark problem.", Resources.EvenParity), 
+          new GpdlExampleDataDescriptor("Multiplexer (11)", "The Mux-11 multiplexer benchmark problem.", Resources.Multiplexer), 
+          new GpdlExampleDataDescriptor("Symbolic Regression (HEAL-style)", "A symbolic regression problem for genetic programming, using weights for variables.", Resources.symbreg_HEAL),
+          new GpdlExampleDataDescriptor("Symbolic Regression (Koza-style)", "Koza-style symbolic regression problem for genetic programming.", Resources.symbreg_Koza),
+        };
+    }
+
+    public override string LoadData(IDataDescriptor descriptor) {
+      var gpdlDescriptor = descriptor as GpdlExampleDataDescriptor;
+      if (gpdlDescriptor == null) throw new ArgumentException("Cannot load this type of problem instance into the GPDL editor.");
+      return gpdlDescriptor.Source;
+    }
+
+    public override string Name {
+      get { return "GPDL Example Provider"; }
+    }
+
+    public override string Description {
+      get { return "Provides a set of GPDL definitions for genetic programming problems."; }
+    }
+
+    public override Uri WebLink {
+      get { return new Uri("http://dev.heuristiclab.com/GPDL"); }
+    }
+
+    public override string ReferencePublication {
+      get { return "Kronberger G., Kommenda M., Wagner S., Dobler H. - GPDL: A Framework-Independent Problem Definition Language for Grammar Guided Genetic Programming. In GECCO'13 Companion, July 6-10, 2013, Amsterdam, ACM."; }
+    }
+  }
+}
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/GpdlProblemInstanceConsumerView.cs
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/GpdlProblemInstanceConsumerView.cs	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/GpdlProblemInstanceConsumerView.cs	(revision 10055)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Problems.Instances.Views;
+
+namespace HeuristicLab.Problems.GPDL.Views {
+  public class GpdlProblemInstanceConsumerView : ProblemInstanceProviderView<GpdlExampleDataDescriptor> {
+  }
+}
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/HeuristicLab.Problems.GPDL.Views-3.4.csproj
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/HeuristicLab.Problems.GPDL.Views-3.4.csproj	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/HeuristicLab.Problems.GPDL.Views-3.4.csproj	(revision 10055)
@@ -0,0 +1,297 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{3F9E665A-3DCB-49C3-8806-0E47FC48EA52}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Problems.GPDL.Views</RootNamespace>
+    <AssemblyName>HeuristicLab.Problems.GPDL.Views-3.4</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Collections-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Core-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Data-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.MainForm-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm.WindowsForms-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.MainForm.WindowsForms-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Optimization-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimizer-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Optimizer-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.Instances-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Instances-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.Instances.Views-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Instances.Views-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.SequentialEngine-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.SequentialEngine-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="ICSharpCode.AvalonEdit, Version=4.3.1.9430, Culture=neutral, PublicKeyToken=9cc39be672370310, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>.\ICSharpCode.AvalonEdit.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Windows.Forms.DataVisualization" />
+    <Reference Include="System.Xaml" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+    <Reference Include="WindowsBase" />
+    <Reference Include="WindowsFormsIntegration" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="CodeEditor.xaml.cs">
+      <DependentUpon>CodeEditor.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="ColorizeErrors.cs" />
+    <Compile Include="GpdlCompletionData.cs" />
+    <Compile Include="GpdlProblemInstanceConsumerView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <None Include="HeuristicLab.snk" />
+    <Compile Include="GpdlExampleDataDescriptor.cs" />
+    <Compile Include="CreateProblemMenuItem.cs" />
+    <Compile Include="GpdlEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="GpdlEditor.Designer.cs">
+      <DependentUpon>GpdlEditor.cs</DependentUpon>
+    </Compile>
+    <Compile Include="GpdlExampleProvider.cs" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Plugin.cs.frame" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+    <None Include="SyntaxDefinition.xsd">
+      <SubType>Designer</SubType>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="GpdlEditor.resx">
+      <DependentUpon>GpdlEditor.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\Artificial Ant.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\Factorial.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\Fib.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\GPDL.xshd" />
+    <None Include="Resources\multi-output-multiplier.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\symbreg HEAL.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\symbreg Koza.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.GPDL\3.4\HeuristicLab.Problems.GPDL-3.4.csproj">
+      <Project>{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}</Project>
+      <Name>HeuristicLab.Problems.GPDL-3.4</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Page Include="CodeEditor.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="ICSharpCode.AvalonEdit.dll">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <None Include="Resources\LawnMower.txt" />
+    <None Include="Resources\Multiplexer.txt" />
+    <None Include="Resources\EvenParity.txt" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Plugin.cs.frame
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Plugin.cs.frame	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Plugin.cs.frame	(revision 10055)
@@ -0,0 +1,30 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Problems.GPDL.Views {
+  [Plugin("HeuristicLab.Problems.GPDL.Views","Provides views to define genetic programming problems using GPDL.", "3.4.0.$WCREV$")]
+  [PluginFile("HeuristicLab.Problems.GPDL.Views-3.4.dll", PluginFileType.Assembly)]
+  [PluginFile("ICSharpCode.AvalonEdit.dll", PluginFileType.Assembly)]
+  public class Plugin : PluginBase {
+  }
+}
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Properties/AssemblyInfo.cs.frame	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Properties/AssemblyInfo.cs.frame	(revision 10055)
@@ -0,0 +1,54 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Problems.GPDL.Views")]
+[assembly: AssemblyDescription("Provides views to create genetic programming problems using GPDL.")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2013 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("26E5AEE5-C9C8-4F27-B864-32139CF123EB")]
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.4.0.0")]
+[assembly: AssemblyFileVersion("3.4.0.$WCREV$")]
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Properties/Resources.Designer.cs
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Properties/Resources.Designer.cs	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Properties/Resources.Designer.cs	(revision 10055)
@@ -0,0 +1,330 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.18052
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Problems.GPDL.Views.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HeuristicLab.Problems.GPDL.Views.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to PROBLEM ArtificialAnt
+        ///
+        ///CODE &lt;&lt;
+        ///public struct Point { 
+        ///  public int x; public int y; 
+        ///  public Point(int x, int y) {
+        ///    this.x = x;
+        ///	this.y = y;
+        ///  }
+        ///};
+        ///
+        ///class World {
+        ///
+        ///private static string[] LosAltosTrail = new string[] {
+        ///&quot; ###                                          &quot;,
+        ///&quot;   #                                  .###..  &quot;,
+        ///&quot;   #                                  #    #  &quot;,
+        ///&quot;   #                                  #    #  &quot;,
+        ///&quot;   ####.#####           .############..    .  &quot;,
+        ///&quot;            #       [rest of string was truncated]&quot;;.
+        /// </summary>
+        internal static string Artificial_Ant {
+            get {
+                return ResourceManager.GetString("Artificial_Ant", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to PROBLEM EvenParity
+        ///CODE &lt;&lt;
+        ///  const int N = 5;
+        ///&gt;&gt;
+        ///
+        ///NONTERMINALS
+        ///  Expr&lt;&lt;bool[] d, out bool p&gt;&gt;.
+        ///  AND&lt;&lt;bool[] d, out bool p&gt;&gt;.
+        ///  OR&lt;&lt;bool[] d, out bool p&gt;&gt;.
+        ///  NAND&lt;&lt;bool[] d, out bool p&gt;&gt;.
+        ///  NOR&lt;&lt;bool[] d, out bool p&gt;&gt;.
+        ///
+        ///TERMINALS
+        ///  D&lt;&lt;out int val&gt;&gt; 
+        ///    CONSTRAINTS 
+        ///      val IN SET &lt;&lt;Enumerable.Range(0, N);&gt;&gt;
+        ///  .
+        ///
+        ///RULES
+        ///  Expr&lt;&lt;bool[] d, out bool p&gt;&gt; =                           LOCAL&lt;&lt; int val = 0; &gt;&gt;
+        ///    AND&lt;&lt;d, out p&gt;&gt;
+        ///    | OR&lt;&lt;d, out p&gt;&gt;
+        ///    | NAND&lt;&lt;d, out p&gt;&gt;
+        ///    | NOR&lt;&lt;d, out p [rest of string was truncated]&quot;;.
+        /// </summary>
+        internal static string EvenParity {
+            get {
+                return ResourceManager.GetString("EvenParity", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to PROBLEM Factorial
+        ///CODE&lt;&lt;
+        ///  string[] allTerminals = new string[] {&quot;a&quot;, &quot;b&quot;, &quot;c&quot;, &quot;d&quot;, &quot;e&quot;, &quot;n&quot;} ; 
+        ///  SymTab symTab = new SymTab();
+        ///
+        ///  class SymTab {
+        ///    private Dictionary&lt;string, int&gt; values = new Dictionary&lt;string,int&gt;();
+        ///    public void SetValue(string id, int val) {
+        ///      values[id] = val;
+        ///    }
+        ///    public int GetValue(string id) {
+        ///      int val = 0;
+        ///      values.TryGetValue(id, out val);      
+        ///      return val;
+        ///    }
+        ///  }
+        ///&gt;&gt;
+        ///
+        ///NONTERMINALS
+        ///  Program&lt;&lt;int n, out int r&gt;&gt;.                  [rest of string was truncated]&quot;;.
+        /// </summary>
+        internal static string Factorial {
+            get {
+                return ResourceManager.GetString("Factorial", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to PROBLEM Fib
+        ///CODE&lt;&lt;
+        ///  string[] allTerminals = new string[] {&quot;a&quot;, &quot;b&quot;, &quot;c&quot;, &quot;d&quot;, &quot;e&quot;, &quot;n&quot;} ; 
+        ///  SymTab symTab = new SymTab();
+        ///
+        ///  class SymTab {
+        ///    private Dictionary&lt;string, int&gt; values = new Dictionary&lt;string,int&gt;();
+        ///    public void SetValue(string id, int val) {
+        ///      values[id] = val;
+        ///    }
+        ///    public int GetValue(string id) {
+        ///      int val = 0;
+        ///      values.TryGetValue(id, out val);      
+        ///      return val;
+        ///    }
+        ///  }
+        ///&gt;&gt;
+        ///
+        ///NONTERMINALS
+        ///  Program&lt;&lt;int n, out int r&gt;&gt;.                        [rest of string was truncated]&quot;;.
+        /// </summary>
+        internal static string Fib {
+            get {
+                return ResourceManager.GetString("Fib", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to &lt;!-- Syntax definition of GPDL for AvalonEdit syntax highlighting --&gt;
+        ///&lt;SyntaxDefinition name=&quot;GPDL&quot;
+        ///        xmlns=&quot;http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008&quot;&gt;
+        ///  &lt;Color name=&quot;Comment&quot; foreground=&quot;Green&quot; /&gt;
+        ///  &lt;Color name=&quot;SourceCode&quot; foreground=&quot;SlateGray&quot; /&gt;
+        ///
+        ///  &lt;!-- This is the main ruleset. --&gt;
+        ///  &lt;RuleSet ignoreCase=&quot;true&quot;&gt;
+        ///    &lt;Span color=&quot;Comment&quot; multiline=&quot;true&quot; begin=&quot;/\*&quot; end=&quot;\*/&quot; /&gt;
+        ///    &lt;Span color=&quot;SourceCode&quot; multiline=&quot;true&quot; begin=&quot;&amp;lt;&amp;lt;&quot; end=&quot;&amp;gt;&amp;gt;&quot;&gt;
+        ///      &lt;RuleSe [rest of string was truncated]&quot;;.
+        /// </summary>
+        internal static string GPDL {
+            get {
+                return ResourceManager.GetString("GPDL", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to PROBLEM LawnMower
+        ///
+        ///CODE &lt;&lt;
+        ///  public int Width { get { return 8; } }
+        ///  public int Height { get { return 8; } }
+        ///
+        ///  enum Direction {West, East, North, South};
+        ///
+        ///  class World {
+        ///    private bool[,] mowed = new bool[Width, Height];
+        ///    public World() {
+        ///      Reset();
+        ///    }
+        ///    public void Reset() {
+        ///      for(int col = 0; col &lt; Width; col++)
+        ///        for(int row = 0; row &lt; Height; row++) {
+        ///          mowed[col, row] = false;
+        ///        }
+        ///    }
+        ///    public void SetCellMowed(int col, int row) {
+        ///      m [rest of string was truncated]&quot;;.
+        /// </summary>
+        internal static string LawnMower {
+            get {
+                return ResourceManager.GetString("LawnMower", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to PROBLEM MultiOutputMultiplier
+        ///
+        ///CODE &lt;&lt;
+        ///  const int N = 4;
+        ///  class State { public bool[] x1; public bool[] x2; public bool[] output; }
+        ///  private void GenerateProblemData(int n, out bool[][] a, out bool[][] b, out bool[][] expectedOutput) {
+        ///    var nConfigurations = (int)Math.Pow(2, n);
+        ///    var e = from i in Enumerable.Range(0, nConfigurations)
+        ///            from j in Enumerable.Range(0, i+1)
+        ///            select new {a = ToBitArray(N, i), b = ToBitArray(N, j), res = ToBitArray(2*N, i*j) };
+        ///    
+        ///    a  [rest of string was truncated]&quot;;.
+        /// </summary>
+        internal static string multi_output_multiplier {
+            get {
+                return ResourceManager.GetString("multi_output_multiplier", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to PROBLEM Multiplexer
+        ///
+        ///NONTERMINALS
+        ///  Expr&lt;&lt;bool[] d, out bool o&gt;&gt;.
+        ///  AND&lt;&lt;bool[] d, out bool o&gt;&gt;.
+        ///  OR&lt;&lt;bool[] d, out bool o&gt;&gt;.
+        ///  NOT&lt;&lt;bool[] d, out bool o&gt;&gt;.
+        ///  IF&lt;&lt;bool[] d, out bool o&gt;&gt;.
+        ///
+        ///TERMINALS
+        ///  A0. A1. A2. D0. D1. D2. D3. D4. D5. D6. D7.
+        ///
+        ///RULES
+        ///  Expr&lt;&lt;bool[] d, out bool o&gt;&gt; =
+        ///    AND&lt;&lt;d, out o&gt;&gt;
+        ///    | OR&lt;&lt;d, out o&gt;&gt;
+        ///    | NOT&lt;&lt;d, out o&gt;&gt;
+        ///    | IF&lt;&lt;d, out o&gt;&gt;
+        ///    | A0                                                   SEM&lt;&lt; o = d[0]; &gt;&gt;
+        ///    | A1                                       [rest of string was truncated]&quot;;.
+        /// </summary>
+        internal static string Multiplexer {
+            get {
+                return ResourceManager.GetString("Multiplexer", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to PROBLEM SymbReg
+        ///
+        ///CODE &lt;&lt;
+        ///  double[,] x;
+        ///  double[] y;
+        ///  string[] variableNames;
+        ///  Dictionary&lt;string,int&gt; nameToCol;
+        ///  
+        ///  double GetValue(double[,] data, string varName, int row) {
+        ///    if(nameToCol == null) {
+        ///      /* init mapping */
+        ///      nameToCol = new Dictionary&lt;string, int&gt;();
+        ///      for(int i=0; i&lt;variableNames.Length; i++) {
+        ///        nameToCol[variableNames[i]] = i;
+        ///      }
+        ///    }
+        ///    return x[row, nameToCol[varName]];
+        ///  }
+        ///
+        ///  double RSquared(IEnumerable&lt;double&gt; xs, IEnumerable&lt;double&gt;  [rest of string was truncated]&quot;;.
+        /// </summary>
+        internal static string symbreg_HEAL {
+            get {
+                return ResourceManager.GetString("symbreg_HEAL", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to PROBLEM SymbRegKoza
+        ///CODE &lt;&lt;
+        ///  double[,] x;
+        ///  double[] y;
+        ///  string[] variableNames;
+        ///  Dictionary&lt;string,int&gt; nameToCol;
+        ///  
+        ///  double GetValue(double[,] data, string varName, int row) {
+        ///    if(nameToCol == null) {
+        ///      /* init mapping */
+        ///      nameToCol = new Dictionary&lt;string, int&gt;();
+        ///      for(int i=0; i&lt;variableNames.Length; i++) {
+        ///        nameToCol[variableNames[i]] = i;
+        ///      }
+        ///    }
+        ///    return x[row, nameToCol[varName]];
+        ///  }
+        ///
+        ///  double RSquared(IEnumerable&lt;double&gt; xs, IEnumerable&lt;double [rest of string was truncated]&quot;;.
+        /// </summary>
+        internal static string symbreg_Koza {
+            get {
+                return ResourceManager.GetString("symbreg_Koza", resourceCulture);
+            }
+        }
+    }
+}
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Properties/Resources.resx
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Properties/Resources.resx	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Properties/Resources.resx	(revision 10055)
@@ -0,0 +1,151 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="Artificial_Ant" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Artificial Ant.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
+  </data>
+  <data name="EvenParity" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\resources\evenparity.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
+  </data>
+  <data name="Factorial" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Factorial.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
+  </data>
+  <data name="Fib" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Fib.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
+  </data>
+  <data name="GPDL" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\GPDL.xshd;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
+  </data>
+  <data name="LawnMower" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\resources\lawnmower.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
+  </data>
+  <data name="Multiplexer" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\resources\multiplexer.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
+  </data>
+  <data name="multi_output_multiplier" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\multi-output-multiplier.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
+  </data>
+  <data name="symbreg_HEAL" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\symbreg HEAL.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
+  </data>
+  <data name="symbreg_Koza" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\symbreg Koza.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
+  </data>
+</root>
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/Artificial Ant.txt
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/Artificial Ant.txt	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/Artificial Ant.txt	(revision 10055)
@@ -0,0 +1,229 @@
+PROBLEM ArtificialAnt
+
+CODE <<
+public struct Point { 
+  public int x; public int y; 
+  public Point(int x, int y) {
+    this.x = x;
+	this.y = y;
+  }
+};
+
+class World {
+
+private static string[] LosAltosTrail = new string[] {
+" ###                                          ",
+"   #                                  .###..  ",
+"   #                                  #    #  ",
+"   #                                  #    #  ",
+"   ####.#####           .############..    .  ",
+"            #           .                  #  ",
+"            #           #                  .  ",
+"            #           #                  .  ",
+"            #           #                  #  ",
+"            .           #                  .  ",
+"            #           .                  .  ",
+"            #           .                  #  ",
+"            #           #                  .  ",
+"            #           #            ...###.  ",
+"            .       .#...            #        ",
+"            .       .                .        ",
+"            #       .                .        ",
+"            #       #                .#...    ",
+"            #       #                    #    ",
+"            #       #                    .    ",
+"            #       #                    .    ",
+"            #       .                ...#.    ",
+"            #       .                #        ",
+" ..##..#####.       #                #        ",
+" #                  #                #        ",
+" #                  #                #        ",
+" #                  #                #        ",
+" #                  #                #        ",
+" #                  #                #        ",
+" #     .#####....##..                #        ",
+" #     #                             #        ",
+" .     #                             #        ",
+" .####..                             #        ",
+"                                   #.#        ",
+"                                   #          ",
+"                                   #          ",
+"                                   #          ",
+"                                   #          ",
+"                                   #          ",
+"                                   #          ",
+"                                   #          ",
+"                              ######          ",
+"                              .               ",
+"                              #               ",
+"                              #               ",
+"                              #               ",
+"                              #               ",
+"                              #               ",
+"                              #               ",
+"                            #..               ",
+"                            #                 ",
+"                            #                 ",
+"                            #                 ",
+"                            #                 ",
+"                            #                 ",
+"                      .######                 ",
+"                      .                       ",
+"                      #                       ",
+"                      #                       ",
+"                      #                       ",
+"                      #                       ",
+"                      #                       ",
+"                      #                       ",
+"                      #                       ",
+"                      #                       ",
+"                      #                       "
+};
+  private char[][] world = LosAltosTrail.Select(l=>l.ToArray()).ToArray();
+  public int TotalFood = LosAltosTrail.Select(l=>l.Where(c=>c=='#').Count()).Sum();
+  public int Width { get { return 100; } }
+  public int Height { get { return 100; } }
+  
+  public void Reset() {
+    world = LosAltosTrail.Select(l=>l.ToArray()).ToArray();
+  }
+  
+  public bool FoodAt(Point p) {
+    if(p.x < 0 || p.y < 0) return false;
+    if(world.Length <= p.y) return false;
+	if(world[p.y].Length <= p.x) return false;
+    return world[p.y][p.x] == '#';
+  }
+  public void RemoveFoodAt(Point p) {
+    if(world.Length < p.y) return;
+	if(world[p.y].Length < p.x) return;
+    world[p.y][p.x] = ' ';
+  }
+}
+
+enum Direction {West, East, North, South};
+
+class AntState {
+  public Point Position { get; set;} 
+  public int MaxSteps { get; set;}
+  public Direction Direction { get; set; }
+  public World World { get; set; }
+  public int Steps { get; set; }
+  public int FoodEaten { get; set; }
+ 
+  public AntState() {
+    Steps = 0;	
+	FoodEaten = 0;
+  }
+ 
+  public void TurnLeft() {
+    Steps++;
+    switch(Direction) {
+	  case Direction.West: Direction = Direction.South; break;
+	  case Direction.South: Direction = Direction.East; break;
+	  case Direction.East: Direction = Direction.North; break;
+	  case Direction.North: Direction = Direction.West; break;
+	}
+  }
+  public void TurnRight() {
+    Steps++;
+    switch(Direction) {
+	  case Direction.West: Direction = Direction.North; break;
+	  case Direction.South: Direction = Direction.West; break;
+	  case Direction.East: Direction = Direction.South; break;
+	  case Direction.North: Direction = Direction.East; break;
+	}
+  }
+  public void MoveForward() { 
+    Position = NextPosition; 
+	Steps++; 
+	if(World.FoodAt(Position)) {
+    	World.RemoveFoodAt(Position);
+		FoodEaten++;
+    }
+  }
+  public Point NextPosition { 
+    get { 
+	    int x, y;
+        switch(Direction) {
+    	  case Direction.West: 
+		    x = (Position.x + World.Width - 1) % World.Width;
+			y = Position.y;
+			return new Point(x, y);
+    	  case Direction.South: 
+  		    x = Position.x;
+			y = (Position.y + World.Height + 1) % World.Height;
+			return new Point(x, y);
+    	  case Direction.East:
+  		    x = (Position.x + World.Width + 1) % World.Width;
+			y = Position.y;
+			return new Point(x, y);
+    	  case Direction.North:
+  		    x = Position.x;
+			y = (Position.y + World.Height - 1) % World.Height;
+			return new Point(x, y);
+    	}
+ 		return new Point(-1,-1);
+    } 
+  }  
+}
+
+World CreateWorld() {   
+  var w = new World();
+  Console.WriteLine("Total food: "+w.TotalFood);
+  return w;
+}
+
+World world;
+>>
+INIT <<
+  world = CreateWorld();
+>>
+
+NONTERMINALS
+  Ant<<World world, AntState state>>. 
+  IfFoodAhead<<World world, AntState state>>.
+  Prog2<<World world, AntState state>>.
+  Prog3<<World world, AntState state>>.
+
+TERMINALS
+  Left. Right. Move.
+ 
+RULES
+  Ant<<World world, AntState state>> = 
+    IfFoodAhead<<world, state>>
+    | Prog2<<world, state>>
+    | Prog3<<world, state>>
+    | Left                                             SEM << state.TurnLeft(); >>
+    | Right                                            SEM << state.TurnRight(); >>
+    | Move                                             SEM << state.MoveForward(); >>
+    .
+    
+  IfFoodAhead<<World world, AntState state>> =     
+                                                   SEM <<
+                                                      if(world.FoodAt(state.NextPosition)) {
+                                                   >>
+                                                   
+    Ant<<world, state>>                            SEM << } else { >>
+    Ant<<world, state>>                            SEM << } >> 
+  .
+
+  Prog2<<World world, AntState state>> = 
+    Ant<<world, state>> Ant<<world, state>>
+  .
+  
+  Prog3<<World world, AntState state>> =
+    Ant<<world, state>> Ant<<world, state>> Ant<<world, state>>
+  .
+
+
+MAXIMIZE                                                   /* could also use the keyword MINIMIZE here */
+  <<    
+    world.Reset();
+    var state = new AntState() {Position = new Point(0,0), MaxSteps=400, Direction=Direction.East, World = world};
+    while(state.Steps < state.MaxSteps) {
+      Ant(world, state);
+    }
+    return (double)state.FoodEaten;
+  >>  
+END ArtificialAnt.
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/EvenParity.txt
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/EvenParity.txt	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/EvenParity.txt	(revision 10055)
@@ -0,0 +1,70 @@
+PROBLEM EvenParity
+CODE <<
+  const int N = 5;
+>>
+
+NONTERMINALS
+  Expr<<bool[] d, out bool p>>.
+  AND<<bool[] d, out bool p>>.
+  OR<<bool[] d, out bool p>>.
+  NAND<<bool[] d, out bool p>>.
+  NOR<<bool[] d, out bool p>>.
+
+TERMINALS
+  D<<out int val>> 
+    CONSTRAINTS 
+      val IN SET <<Enumerable.Range(0, N);>>
+  .
+
+RULES
+  Expr<<bool[] d, out bool p>> =                           LOCAL<< int val = 0; >>
+    AND<<d, out p>>
+    | OR<<d, out p>>
+    | NAND<<d, out p>>
+    | NOR<<d, out p>>
+    | D<<out val>>                                         SEM<< p = d[val]; >>
+  .
+
+  AND<<bool[] d, out bool p>> =                            LOCAL << bool p1, p2; >>
+    Expr<<d, out p1>> Expr<<d, out p2>>                    SEM << p = p1 & p2; >>
+  .
+
+  OR<<bool[] d, out bool p>> =                             LOCAL << bool p1, p2; >>
+    Expr<<d, out p1>> Expr<<d, out p2>>                    SEM << p = p1 | p2; >>
+  .
+
+  NAND<<bool[] d, out bool p>> =                           LOCAL << bool p1, p2; >>
+    Expr<<d, out p1>> Expr<<d, out p2>>                    SEM << p = !(p1 & p2); >>
+  .
+
+  NOR<<bool[] d, out bool p>> =                            LOCAL << bool p1, p2; >>
+    Expr<<d, out p1>> Expr<<d, out p2>>                    SEM << p = !(p1 | p2); >>
+  .
+
+MINIMIZE
+  << 
+    bool[] d = new bool[N];
+    int mistakes = 0;
+    for(int i = 0; i < Math.Pow(2, N); i++) {
+      // generate bit-vector and count number of 1-bits
+      int x = i;
+      int nBitsOne = 0;
+      for(int j = 0; j < N; j++) {
+        if((x % 2) == 1) {
+          d[N - j - 1] = true;
+          nBitsOne++;
+        } else {
+          d[N - j - 1] = false;
+        }
+        x = (x / 2);
+      }
+      bool target = (nBitsOne % 2) == 0;
+      // apply model
+      bool p;
+      Expr(d, out p);
+
+      if(p != target) mistakes++;
+    }
+    return mistakes;
+  >>
+END EvenParity.
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/Factorial.txt
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/Factorial.txt	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/Factorial.txt	(revision 10055)
@@ -0,0 +1,146 @@
+PROBLEM Factorial
+CODE<<
+  string[] allTerminals = new string[] {"a", "b", "c", "d", "e", "n"} ; 
+  SymTab symTab = new SymTab();
+
+  class SymTab {
+    private Dictionary<string, int> values = new Dictionary<string,int>();
+    public void SetValue(string id, int val) {
+      values[id] = val;
+    }
+    public int GetValue(string id) {
+      int val = 0;
+      values.TryGetValue(id, out val);      
+      return val;
+    }
+  }
+>>
+
+NONTERMINALS
+  Program<<int n, out int r>>.                                       /* return value is the result of the last statement. */
+  StatSeq<<out int r>>.                                                  
+  AssignStat<<out int r>>.                                               /* result of assignment is the assigned value */
+  IncStat<<out int r>>.
+  DecStat<<out int r>>.
+  WhileStat<<out int r>>.                                                /* result of while loop is the result of the last executed statement */
+  ReturnStat<<out int r>>.  
+  Expr<<out int r>>.
+  AdditionExpr<<out int r>>.
+  SubtractionExpr<<out int r>>.
+  DivisionExpr<<out int r>>.
+  MultiplicationExpr<<out int r>>.
+  BooleanExpr<<out bool b>>.
+  NotExpr<<out bool b>>.
+  LessThanExpr<<out bool b>>.
+  EqualExpr<<out bool b>>.
+  AssignStatAndStatSeq<<out int r>>.
+  WhileStatAndStatSeq<<out int r>>.
+  ReturnStatAndStatSeq<<out int r>>.
+
+TERMINALS
+  ident<<out string id>> 
+    CONSTRAINTS
+    id IN SET << allTerminals; >>
+  .
+  Const<<out int val>> 
+    CONSTRAINTS
+    val IN SET << Enumerable.Range(0, 100); >>
+  .
+  Nothing<<out int val>>
+     CONSTRAINTS
+     val IN SET << Enumerable.Repeat(0, 1); >>
+  .
+  
+RULES
+  Program<<int n, out int r>> = StatSeq<<out r>>                         SEM << symTab.SetValue("n", n); >>
+  .
+  StatSeq<<out int r>> =                                                 LOCAL << r = 0; >>
+    Nothing<<out r>>                                                              
+    | AssignStatAndStatSeq<<out r>>
+    | WhileStatAndStatSeq<<out r>>
+    | ReturnStatAndStatSeq<<out r>>
+	| IncStat<<out r>>
+	| DecStat<<out r>>
+  .
+  
+  AssignStatAndStatSeq<<out int r>> = 
+    StatSeq<<out r>>  AssignStat<<out r>> 
+  .
+  WhileStatAndStatSeq<<out int r>> = 
+    StatSeq<<out r>> WhileStat<<out r>> 
+  .
+  ReturnStatAndStatSeq<<out int r>> = 
+    StatSeq<<out r>>  ReturnStat<<out r>> 
+  .
+
+  AssignStat<<out int r>> =                                               LOCAL << int e; string id;>>
+    ident<<out id>> Expr<<out e>>                                         SEM  << symTab.SetValue(id, e); r = e; >>
+  .
+  IncStat<<out int r>> =                                                  LOCAL << int e; string id;>>
+    ident<<out id>>                                                       SEM  << r = symTab.GetValue(id) + 1; symTab.SetValue(id, r); >>
+  .
+  DecStat<<out int r>> =                                                  LOCAL << int e; string id;>>
+    ident<<out id>>                                                       SEM  << r = symTab.GetValue(id) - 1; symTab.SetValue(id, r); >>
+  .
+
+  WhileStat<<out int r>> =                                                LOCAL << bool b; int c = 0; >>
+                                                                          SEM  << r = 0; >>
+                                                                          SEM  << while(true && c++ < 100) { >>
+    BooleanExpr<<out b>>                                                  SEM  << if(!b) break; >>
+    StatSeq<<out r>>                                                      SEM  << } >>
+  .
+  ReturnStat<<out int r>> = Expr<<out r>>                                 SEM  << return; >>
+  .
+  Expr<<out int r>> =                                                     LOCAL << string id; >>
+    AdditionExpr<<out r>> 
+    | SubtractionExpr<<out r>> 
+    | MultiplicationExpr<<out r>> 
+    | DivisionExpr<<out r>> 
+    | Const<<out r>> 
+    | ident<<out id>>                                                      SEM  << r = symTab.GetValue(id); >>
+  .
+  AdditionExpr<<out int r>> =                                              LOCAL << int e1, e2; >>
+     Expr<<out e1>> Expr<<out e2>>                                         SEM  << r = e1 + e2; >>
+  .
+  SubtractionExpr<<out int r>> =                                           LOCAL << int e1, e2; >>
+    Expr<<out e1>> Expr<<out e2>>                                          SEM  << r = e1 - e2; >>
+  .
+  MultiplicationExpr<<out int r>> =                                        LOCAL << int e1, e2; >>
+    Expr<<out e1>> Expr<<out e2>>                                          SEM  << r = e1 * e2; >>
+  .
+  DivisionExpr<<out int r>> =                                              LOCAL << int e1, e2; >>
+    Expr<<out e1>> Expr<<out e2>>                                          SEM  << r = e2 == 0 ? 1 : e1 / e2; >>
+  .
+  BooleanExpr<<out bool b>> = 
+    LessThanExpr<<out b>> 
+    | EqualExpr<<out b>> 
+    | NotExpr<<out b>> 
+  .
+  NotExpr<<out bool b>> =                                                  LOCAL << bool notB; >>
+    BooleanExpr<<out notB>>                                                SEM  << b = !notB; >>
+  .
+  LessThanExpr<<out bool b>> =                                             LOCAL << int lhs, rhs; >>
+    Expr<<out lhs>> Expr<<out rhs>>                                        SEM  << b = lhs < rhs; >>
+  .
+  EqualExpr<<out bool b>> =                                                LOCAL << int lhs, rhs; >>
+    Expr<<out lhs>> Expr<<out rhs>>                                        SEM  << b = lhs == rhs; >>
+  .
+  
+  
+MINIMIZE                                                   /* could also use the keyword MAXIMIZE here */
+  <<
+    var ns = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
+    var expected = new int[] { 1,1,2,6,24,120,720,5040,40320,362880,3628800 };
+    
+    double sumOfLogAbsoluteErrors = 0;
+    for(int i=0;i<ns.Length;i++) {
+      int actualResult;
+      Program(ns[i], out actualResult);
+      sumOfLogAbsoluteErrors += Math.Log(Math.Abs(expected[i] - actualResult) + 1);
+    }
+    
+    return sumOfLogAbsoluteErrors;
+  >>
+
+  
+END Factorial.
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/Fib.txt
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/Fib.txt	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/Fib.txt	(revision 10055)
@@ -0,0 +1,146 @@
+PROBLEM Fib
+CODE<<
+  string[] allTerminals = new string[] {"a", "b", "c", "d", "e", "n"} ; 
+  SymTab symTab = new SymTab();
+
+  class SymTab {
+    private Dictionary<string, int> values = new Dictionary<string,int>();
+    public void SetValue(string id, int val) {
+      values[id] = val;
+    }
+    public int GetValue(string id) {
+      int val = 0;
+      values.TryGetValue(id, out val);      
+      return val;
+    }
+  }
+>>
+
+NONTERMINALS
+  Program<<int n, out int r>>.                                       /* return value is the result of the last statement. */
+  StatSeq<<out int r>>.                                                  
+  AssignStat<<out int r>>.                                               /* result of assignment is the assigned value */
+  IncStat<<out int r>>.
+  DecStat<<out int r>>.
+  WhileStat<<out int r>>.                                                /* result of while loop is the result of the last executed statement */
+  ReturnStat<<out int r>>.  
+  Expr<<out int r>>.
+  AdditionExpr<<out int r>>.
+  SubtractionExpr<<out int r>>.
+  DivisionExpr<<out int r>>.
+  MultiplicationExpr<<out int r>>.
+  BooleanExpr<<out bool b>>.
+  NotExpr<<out bool b>>.
+  LessThanExpr<<out bool b>>.
+  EqualExpr<<out bool b>>.
+  AssignStatAndStatSeq<<out int r>>.
+  WhileStatAndStatSeq<<out int r>>.
+  ReturnStatAndStatSeq<<out int r>>.
+
+TERMINALS
+  ident<<out string id>> 
+    CONSTRAINTS
+    id IN SET << allTerminals; >>
+  .
+  Const<<out int val>> 
+    CONSTRAINTS
+    val IN SET << Enumerable.Range(0, 100); >>
+  .
+  Nothing<<out int val>>
+     CONSTRAINTS
+     val IN SET << Enumerable.Repeat(0, 1); >>
+  .
+  
+RULES
+  Program<<int n, out int r>> = StatSeq<<out r>>                         SEM << symTab.SetValue("n", n); >>
+  .
+  StatSeq<<out int r>> =                                                 LOCAL << r = 0; >>
+    Nothing<<out r>>                                                              
+    | AssignStatAndStatSeq<<out r>>
+    | WhileStatAndStatSeq<<out r>>
+    | ReturnStatAndStatSeq<<out r>>
+	| IncStat<<out r>>
+	| DecStat<<out r>>
+  .
+  
+  AssignStatAndStatSeq<<out int r>> = 
+    StatSeq<<out r>>  AssignStat<<out r>> 
+  .
+  WhileStatAndStatSeq<<out int r>> = 
+    StatSeq<<out r>> WhileStat<<out r>> 
+  .
+  ReturnStatAndStatSeq<<out int r>> = 
+    StatSeq<<out r>>  ReturnStat<<out r>> 
+  .
+
+  AssignStat<<out int r>> =                                               LOCAL << int e; string id;>>
+    ident<<out id>> Expr<<out e>>                                         SEM  << symTab.SetValue(id, e); r = e; >>
+  .
+  IncStat<<out int r>> =                                                  LOCAL << int e; string id;>>
+    ident<<out id>>                                                       SEM  << r = symTab.GetValue(id) + 1; symTab.SetValue(id, r); >>
+  .
+  DecStat<<out int r>> =                                                  LOCAL << int e; string id;>>
+    ident<<out id>>                                                       SEM  << r = symTab.GetValue(id) - 1; symTab.SetValue(id, r); >>
+  .
+
+  WhileStat<<out int r>> =                                                LOCAL << bool b; int c = 0; >>
+                                                                          SEM  << r = 0; >>
+                                                                          SEM  << while(true && c++ < 100) { >>
+    BooleanExpr<<out b>>                                                  SEM  << if(!b) break; >>
+    StatSeq<<out r>>                                                      SEM  << } >>
+  .
+  ReturnStat<<out int r>> = Expr<<out r>>                                 SEM  << return; >>
+  .
+  Expr<<out int r>> =                                                     LOCAL << string id; >>
+    AdditionExpr<<out r>> 
+    | SubtractionExpr<<out r>> 
+    | MultiplicationExpr<<out r>> 
+    | DivisionExpr<<out r>> 
+    | Const<<out r>> 
+    | ident<<out id>>                                                      SEM  << r = symTab.GetValue(id); >>
+  .
+  AdditionExpr<<out int r>> =                                              LOCAL << int e1, e2; >>
+     Expr<<out e1>> Expr<<out e2>>                                         SEM  << r = e1 + e2; >>
+  .
+  SubtractionExpr<<out int r>> =                                           LOCAL << int e1, e2; >>
+    Expr<<out e1>> Expr<<out e2>>                                          SEM  << r = e1 - e2; >>
+  .
+  MultiplicationExpr<<out int r>> =                                        LOCAL << int e1, e2; >>
+    Expr<<out e1>> Expr<<out e2>>                                          SEM  << r = e1 * e2; >>
+  .
+  DivisionExpr<<out int r>> =                                              LOCAL << int e1, e2; >>
+    Expr<<out e1>> Expr<<out e2>>                                          SEM  << r = e2 == 0 ? 1 : e1 / e2; >>
+  .
+  BooleanExpr<<out bool b>> = 
+    LessThanExpr<<out b>> 
+    | EqualExpr<<out b>> 
+    | NotExpr<<out b>> 
+  .
+  NotExpr<<out bool b>> =                                                  LOCAL << bool notB; >>
+    BooleanExpr<<out notB>>                                                SEM  << b = !notB; >>
+  .
+  LessThanExpr<<out bool b>> =                                             LOCAL << int lhs, rhs; >>
+    Expr<<out lhs>> Expr<<out rhs>>                                        SEM  << b = lhs < rhs; >>
+  .
+  EqualExpr<<out bool b>> =                                                LOCAL << int lhs, rhs; >>
+    Expr<<out lhs>> Expr<<out rhs>>                                        SEM  << b = lhs == rhs; >>
+  .
+  
+  
+MINIMIZE                                                   /* could also use the keyword MAXIMIZE here */
+  <<
+    var ns = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
+    var expected = new int[] { 1,1,2,3,5,8,13,21,34,55, 89};
+    
+    double sumOfAbsoluteErrors = 0;
+    for(int i=0;i<ns.Length;i++) {
+      int actualResult;
+      Program(ns[i], out actualResult);
+      sumOfAbsoluteErrors += Math.Abs(expected[i] - actualResult);
+    }
+    
+    return sumOfAbsoluteErrors;
+  >>
+
+  
+END Fib.
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/GPDL.xshd
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/GPDL.xshd	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/GPDL.xshd	(revision 10055)
@@ -0,0 +1,130 @@
+﻿<!-- Syntax definition of GPDL for AvalonEdit syntax highlighting -->
+<SyntaxDefinition name="GPDL"
+        xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008">
+  <Color name="Comment" foreground="Green" />
+  <Color name="SourceCode" foreground="SlateGray" />
+
+  <!-- This is the main ruleset. -->
+  <RuleSet ignoreCase="true">
+    <Span color="Comment" multiline="true" begin="/\*" end="\*/" />
+    <Span color="SourceCode" multiline="true" begin="&lt;&lt;" end="&gt;&gt;">
+      <RuleSet>
+        <Span color="Comment" multiline="true" begin="/\*" end="\*/" />
+        <Span color="Comment" multiline="false" begin="//" />
+        <Keywords fontWeight="bold" foreground="Blue">
+          <!-- reduced set of allowed C# keywords -->
+          <Word>abstract</Word>
+          <Word>as</Word>
+          <Word>base</Word>
+          <Word>bool</Word>
+          <Word>break</Word>
+          <Word>byte</Word>
+          <Word>case</Word>
+          <Word>catch</Word>
+          <Word>char</Word>
+          <Word>checked</Word>
+          <Word>class</Word>
+          <Word>const</Word>
+          <Word>continue</Word>
+          <Word>decimal</Word>
+          <Word>default</Word>
+          <Word>delegate</Word>
+          <Word>do</Word>
+          <Word>double</Word>
+          <Word>else</Word>
+          <Word>enum</Word>
+          <Word>event</Word>
+          <Word>explicit</Word>
+          <Word>extern</Word>
+          <Word>false</Word>
+          <Word>finally</Word>
+          <Word>fixed</Word>
+          <Word>float</Word>
+          <Word>for</Word>
+          <Word>foreach</Word>
+          <Word>goto</Word>
+          <Word>if</Word>
+          <Word>implicit</Word>
+          <Word>in</Word>
+          <Word>int</Word>
+          <Word>interface</Word>
+          <Word>internal</Word>
+          <Word>is</Word>
+          <Word>lock</Word>
+          <Word>long</Word>
+          <Word>new</Word>
+          <Word>null</Word>
+          <Word>object</Word>
+          <Word>operator</Word>
+          <Word>out</Word>
+          <Word>override</Word>
+          <Word>params</Word>
+          <Word>private</Word>
+          <Word>protected</Word>
+          <Word>public</Word>
+          <Word>readonly</Word>
+          <Word>ref</Word>
+          <Word>return</Word>
+          <Word>sbyte</Word>
+          <Word>sealed</Word>
+          <Word>short</Word>
+          <Word>sizeof</Word>
+          <Word>stackalloc</Word>
+          <Word>static</Word>
+          <Word>string</Word>
+          <Word>struct</Word>
+          <Word>switch</Word>
+          <Word>this</Word>
+          <Word>throw</Word>
+          <Word>true</Word>
+          <Word>try</Word>
+          <Word>typeof</Word>
+          <Word>uint</Word>
+          <Word>ulong</Word>
+          <Word>unchecked</Word>
+          <Word>unsafe</Word>
+          <Word>ushort</Word>
+          <Word>using</Word>
+          <Word>virtual</Word>
+          <Word>volatile</Word>
+          <Word>void</Word>
+          <Word>while</Word>
+          <!-- GPDL beginning/end of C# source -->
+          <Word>&lt;&lt;</Word>
+          <Word>&gt;&gt;</Word>
+        </Keywords>
+      </RuleSet>
+    </Span>
+    <Keywords fontWeight="bold" foreground="Blue" >
+      <Word>PROBLEM</Word>
+      <Word>END</Word>
+      <Word>EPS</Word>
+      <Word>LOCAL</Word>
+      <Word>NONTERMINALS</Word>
+      <Word>RULES</Word>
+      <Word>SEM</Word>
+      <Word>MAXIMIZE</Word>
+      <Word>MINIMIZE</Word>
+      <Word>TERMINALS</Word>
+      <Word>CONSTRAINTS</Word>
+      <Word>INIT</Word>
+      <Word>CODE</Word>
+      <Word>IN</Word>
+      <Word>SET</Word>
+      <Word>RANGE</Word>
+      <Word>.</Word>
+    </Keywords>
+
+    <!-- Digits -->
+    <!--
+    <Rule foreground="DarkBlue">
+      \b0[xX][0-9a-fA-F]+  # hex number
+      |    \b
+      (    \d+(\.[0-9]+)?   #number with optional floating point
+      |    \.[0-9]+         #or just starting with floating point
+      )
+      ([eE][+-]?[0-9]+)? # optional exponent
+    </Rule>
+    -->
+  </RuleSet>
+</SyntaxDefinition>
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/LawnMower.txt
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/LawnMower.txt	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/LawnMower.txt	(revision 10055)
@@ -0,0 +1,160 @@
+PROBLEM LawnMower
+/* the lawn mower problem with syntax to enforce that constants and sums are only used
+ * in sub-trees under the "frog" symbol. (Original formulation by Koza did not use a grammar)
+ */ 
+CODE <<
+  public static int Width { get { return 16; } }
+  public static int Height { get { return 16; } }
+
+  enum Direction {West, East, North, South};
+
+  class Point { 
+    public int x; 
+    public int y; 
+    public Point(int x, int y) { 
+      this.x = x; this.y = y; 
+    } 
+  }
+
+  class World {
+    private bool[,] mowed = new bool[Width, Height];
+
+    public void SetCellMowed(Point p) {
+      mowed[p.x, p.y] = true;
+    }
+    public bool IsCellMowed(Point p) {
+      return mowed[p.x, p.y];
+    }
+  }
+
+  class MowerState {
+    public Point Position { get; set;} 
+    public Direction Direction { get; set; }
+    public World World { get; set; }
+    public int Energy { get; set; }
+    public int MowedCells { get; set; }
+   
+    public MowerState() {
+      Energy = 0;
+      MowedCells = 0;
+    }
+ 
+    public void TurnLeft() {
+      if (Energy <= 0) return; // don't move when no energy left
+      Energy--;
+      switch(Direction) {
+        case Direction.West: Direction = Direction.South; break;
+        case Direction.South: Direction = Direction.East; break;
+        case Direction.East: Direction = Direction.North; break;
+        case Direction.North: Direction = Direction.West; break;
+      }
+    }
+  
+    public void Forward() { 
+      if(Energy <= 0) return; // don't move when no energy left
+      Position = NextPosition; 
+      Energy--; 
+      if(!World.IsCellMowed(Position)) {
+        World.SetCellMowed(Position);
+        MowedCells++;
+      }
+    }
+
+    public void Jump(int x, int y) {
+      if(Energy <= 0) return; // don't move when no energy left
+      while(x<0) x += Width; // make sure offset is positive for mod-operation
+      while(y<0) y += Height;
+      Position = new Point((Position.x + x) % Width, (Position.y + y) % Height);
+      Energy--; 
+      if(!World.IsCellMowed(Position)) {
+        World.SetCellMowed(Position);
+        MowedCells++;
+      }
+    }
+  
+    public Point NextPosition { 
+      get { 
+        int x, y;
+        switch(Direction) {
+          case Direction.West: 
+            x = (Position.x + Width - 1) % Width;
+            y = Position.y;
+            return new Point(x, y);
+          case Direction.South: 
+            x = Position.x;
+            y = (Position.y + Height + 1) % Height;
+            return new Point(x, y);
+          case Direction.East:
+            x = (Position.x + Width + 1) % Width;
+            y = Position.y;
+            return new Point(x, y);
+          case Direction.North:
+            x = Position.x;
+            y = (Position.y + Height - 1) % Height;
+            return new Point(x, y);
+        }
+        return new Point(-1,-1);
+      }
+    }
+  }
+
+/* set of possible values for constants [-100, 100] */
+int[] ints = Enumerable.Range(-100, 201).ToArray();
+>>
+
+NONTERMINALS
+  LawnMower<<MowerState state>>. 
+  Sum<<out int x, out int y>>.
+  Expr<<out int x, out int y>>. /* helper for expressions containing const and sum */
+  Frog<<MowerState state>>.
+  Prog2<<MowerState state>>.
+
+TERMINALS
+  Left.
+  Forward.
+  Const<<out int x, out int y>>
+    CONSTRAINTS
+      x IN SET <<ints; >> /* x \in [-100, 100] */
+      y IN SET <<ints; >> /* y \in [-100, 100] */
+  .
+
+RULES
+  LawnMower<<MowerState state>> = 
+    Prog2<<state>>
+    | Frog<<state>>
+    | Left                                             SEM << state.TurnLeft(); >>
+    | Forward                                          SEM << state.Forward(); >>
+  .
+    
+  Sum<<out int x, out int y>> =                        LOCAL << int x1, y1, x2, y2; >>
+    Expr<<out x1, out y1>>
+    Expr<<out x2, out y2>>                             SEM << x = x1 + x2; y = y1 + y2; >>
+  .
+
+  Expr<<out int x, out int y>> =
+    Const<<out x, out y>>
+    | Sum<<out x, out y>>
+  .
+
+  Prog2<<MowerState state>> = 
+    LawnMower<<state>> 
+    LawnMower<<state>>
+  .
+  
+  Frog<<MowerState state>> =                          LOCAL << int x; int y; >>
+     Expr<<out x, out y>>                             SEM << state.Jump(x, y); >>
+  .
+
+MAXIMIZE
+  <<    
+    var world = new World();
+    var state = new MowerState() {Position = new Point(0,0), 
+                                  Energy = 2 * Height * Width, 
+                                  Direction = Direction.South, 
+                                  World = world};
+    world.SetCellMowed(state.Position); // set initial cell mowed
+    // execute the mower program once
+    LawnMower(state);
+    return (double)state.MowedCells;
+  >>  
+END LawnMower.
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/Multiplexer.txt
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/Multiplexer.txt	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/Multiplexer.txt	(revision 10055)
@@ -0,0 +1,72 @@
+PROBLEM Multiplexer
+
+NONTERMINALS
+  Expr<<bool[] d, out bool o>>.
+  AND<<bool[] d, out bool o>>.
+  OR<<bool[] d, out bool o>>.
+  NOT<<bool[] d, out bool o>>.
+  IF<<bool[] d, out bool o>>.
+
+TERMINALS
+  A0. A1. A2. D0. D1. D2. D3. D4. D5. D6. D7.
+
+RULES
+  Expr<<bool[] d, out bool o>> =
+    AND<<d, out o>>
+    | OR<<d, out o>>
+    | NOT<<d, out o>>
+    | IF<<d, out o>>
+    | A0                                                   SEM<< o = d[0]; >>
+    | A1                                                   SEM<< o = d[1]; >>
+    | A2                                                   SEM<< o = d[2]; >>
+    | D0                                                   SEM<< o = d[3]; >>
+    | D1                                                   SEM<< o = d[4]; >>
+    | D2                                                   SEM<< o = d[5]; >>
+    | D3                                                   SEM<< o = d[6]; >>
+    | D4                                                   SEM<< o = d[7]; >>
+    | D5                                                   SEM<< o = d[8]; >>
+    | D6                                                   SEM<< o = d[9]; >>
+    | D7                                                   SEM<< o = d[10]; >>
+  .
+
+  AND<<bool[] d, out bool o>> =                            LOCAL << bool o1, o2; >>
+    Expr<<d, out o1>> Expr<<d, out o2>>                    SEM << o = o1 & o2; >>
+  .
+
+  OR<<bool[] d, out bool o>> =                             LOCAL << bool o1, o2; >>
+    Expr<<d, out o1>> Expr<<d, out o2>>                    SEM << o = o1 | o2; >>
+  .
+
+  NOT<<bool[] d, out bool o>> =
+    Expr<<d, out o>>                                       SEM << o = !o; >>
+  .
+
+  IF<<bool[] d, out bool o>> =                             LOCAL << bool pred; >>
+    Expr<<d, out pred>>                                    SEM << if(pred) { >> 
+    Expr<<d, out o>>                                       SEM << } else { >>
+    Expr<<d, out o>>                                       SEM << } >>
+  .
+
+MINIMIZE
+  << 
+    int N = 11;
+    bool[] d = new bool[N];
+    int mistakes = 0;
+    for(int i = 0; i < Math.Pow(2, N); i++) {
+      // generate bit-vector and count number of 1-bits
+      int x = i;
+      for(int j = 0; j < N; j++) {
+        d[N - j - 1] = ((x % 2) == 1);
+        x = (x / 2);
+      }
+      bool target = d[3 + (d[0] ? 1:0) + 2 * (d[1] ? 1:0) + 4 * (d[2] ? 1:0)];
+
+      // apply model
+      bool p;
+      Expr(d, out p);
+
+      if(p != target) mistakes++;
+    }
+    return mistakes;
+  >>
+END Multiplexer.
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/multi-output-multiplier.txt
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/multi-output-multiplier.txt	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/multi-output-multiplier.txt	(revision 10055)
@@ -0,0 +1,102 @@
+PROBLEM MultiOutputMultiplier
+
+CODE <<
+  const int N = 4;
+  class State { public bool[] x1; public bool[] x2; public bool[] output; }
+  private void GenerateProblemData(int n, out bool[][] a, out bool[][] b, out bool[][] expectedOutput) {
+    var nConfigurations = (int)Math.Pow(2, n);
+    var e = from i in Enumerable.Range(0, nConfigurations)
+            from j in Enumerable.Range(0, i+1)
+            select new {a = ToBitArray(N, i), b = ToBitArray(N, j), res = ToBitArray(2*N, i*j) };
+    
+    a = e.Select(x=>x.a).ToArray();
+    b = e.Select(x=>x.b).ToArray();
+    expectedOutput = e.Select(x=>x.res).ToArray();
+  }
+  
+  private bool[] ToBitArray(int n, int x) {
+    var b = new bool[n];
+    for(int i=0; i<n; i++) {
+      b[n - i - 1] = (x % 2) == 0;
+      x = x / 2;
+    }
+    if(x>0) throw new ArgumentException();
+    return b;
+  }
+>>
+
+NONTERMINALS
+  Expr<<State state, out bool res>>.
+  Assign<<State state, out bool res>>.
+  AND<<State state, out bool res>>.
+  AND1<<State state, out bool res>>.
+  XOR<<State state, out bool res>>.
+  OR<<State state, out bool res>>.
+  
+
+TERMINALS
+  InputA<<out int id>> 
+    CONSTRAINTS
+      id IN SET << Enumerable.Range(0, N) >>
+  .
+  
+  InputB<<out int id>> 
+    CONSTRAINTS
+      id IN SET << Enumerable.Range(0, N) >>
+  .
+  
+  Output<<out int id>>  
+    CONSTRAINTS
+      id IN SET << Enumerable.Range(0, 2 * N) >>
+  .
+
+RULES
+  Expr<<State state, out bool res>> =                   LOCAL << int id; >>
+    Assign<<state, out res>>
+    | AND<<state, out res>>
+    | AND1<<state, out res>>
+    | XOR<<state, out res>>
+    | OR<<state, out res>>
+    | InputA<<out id>>                                                          SEM<< res = state.x1[id]; >>
+    | InputB<<out id>>                                                          SEM<< res = state.x2[id]; >>
+    | Output<<out id>>                                                          SEM<< res = state.output[id]; >>
+  .                                                                             
+                                                                                
+  Assign<<State state, out bool res>> =                 LOCAL << int outId; >>
+    Output<<out outId>>  Expr<<state, out res>>                        SEM<< state.output[outId] = res; >>
+  .
+  
+  AND<<State state, out bool res>> =                    LOCAL << bool resA, resB; >>
+    Expr<<state, out resA>> Expr<<state, out resB>>           SEM << res = resA & resB; >>
+  .
+  AND1<<State state, out bool res>> =                   LOCAL << bool resA, resB; >>
+    Expr<<state, out resA>> Expr<<state, out resB>>           SEM << res = resA & !resB; >>
+  .
+  XOR<<State state, out bool res>> =                    LOCAL << bool resA, resB; >>
+    Expr<<state, out resA>> Expr<<state, out resB>>           SEM << res = resA ^ !resB; >>
+  .
+  OR<<State state, out bool res>> =                     LOCAL << bool resA, resB; >>
+    Expr<<state, out resA>> Expr<<state, out resB>>           SEM << res = resA | resB; >>
+  .
+
+MINIMIZE
+  <<
+    bool[][] a, b, expectedOutput;
+    GenerateProblemData(N, out a, out b, out expectedOutput);
+    
+    int sumErr = 0;
+    for(int i=0; i<expectedOutput.Length; i++) {
+      bool tmp;
+      // evaluate tree for inputs a and b
+      var state = new State();
+      state.x1 = a[i]; state.x2 = b[i]; state.output = new bool[2*N];
+      Expr(state, out tmp);
+
+      // count incorrect bits
+      for(int j=0;j<state.output.Length;j++) {
+        if(state.output[j] != expectedOutput[i][j]) sumErr++;
+      }
+    }
+    return (double)sumErr;
+  >>
+END MultiOutputMultiplier.
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/symbreg HEAL.txt
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/symbreg HEAL.txt	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/symbreg HEAL.txt	(revision 10055)
@@ -0,0 +1,102 @@
+PROBLEM SymbReg
+
+CODE <<
+  double[,] x;
+  double[] y;
+  string[] variableNames;
+  Dictionary<string,int> nameToCol;
+  
+  double GetValue(double[,] data, string varName, int row) {
+    if(nameToCol == null) {
+      /* init mapping */
+      nameToCol = new Dictionary<string, int>();
+      for(int i=0; i<variableNames.Length; i++) {
+        nameToCol[variableNames[i]] = i;
+      }
+    }
+    return x[row, nameToCol[varName]];
+  }
+
+  double RSquared(IEnumerable<double> xs, IEnumerable<double> ys) {
+     HeuristicLab.Problems.DataAnalysis.OnlineCalculatorError error;
+     var r2 = HeuristicLab.Problems.DataAnalysis.OnlinePearsonsRSquaredCalculator.Calculate(xs, ys, out error);
+     if(error == HeuristicLab.Problems.DataAnalysis.OnlineCalculatorError.None) return r2;
+     else return 0.0;
+  }
+>>
+
+INIT <<
+  // generate 500 case of poly-10 benchmark function
+  int n = 500;
+  variableNames = new string[] {"x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10" };
+  var rand = new System.Random();
+  x = new double[n, 10];
+  y = new double[n];
+  for(int row = 0; row < 500; row++) {
+    for(int col = 0; col < 10; col++) {
+      x[row, col] = rand.NextDouble() * 2.0 - 1.0;
+    }
+    y[row] = x[row, 0] * x[row, 1] +
+             x[row, 2] * x[row, 3] +
+             x[row, 4] * x[row, 5] +
+             x[row, 0] * x[row, 6] + x[row, 8] +
+             x[row, 2] * x[row, 5] + x[row, 9];
+  }
+>>
+
+NONTERMINALS
+  Model<<int row, out double val>>.
+  RPB<<int row, out double val>>.
+  Addition<<int row, out double val>>.
+  Subtraction<<int row, out double val>>.
+  Multiplication<<int row, out double val>>.
+  Division<<int row, out double val>>.
+
+TERMINALS
+  Const<<out double val>> 
+    CONSTRAINTS
+      val IN RANGE <<-100>> .. <<100>>
+  .
+  Var<<out string varName, out double weight>>  
+    CONSTRAINTS
+      varName IN SET <<variableNames>>
+      weight IN RANGE <<-100>> .. <<100>>
+  .
+
+RULES
+  Model<<int row, out double val>> =                       
+    RPB<<row, out val>> .
+    
+  RPB<<int row, out double val>> =                         LOCAL << string varName; double w; >> 
+    Addition<<row, out val>>
+    | Subtraction<<row, out val>>
+    | Division<<row, out val>>
+    | Multiplication<<row, out val>>                       
+    | Var<<out varName, out w>>                            SEM << val = w * GetValue(x, varName, row); >>
+    | Const<<out val>>
+  .
+
+  Addition<<int row, out double val>> =                    LOCAL << double x1, x2; >>
+    RPB<<row, out x1>> RPB<<row, out x2>>                  SEM << val = x1 + x2; >>
+  .
+  Subtraction<<int row, out double val>> =                 LOCAL << double x1, x2; >>
+    RPB<<row, out x1>> RPB<<row, out x2>>                  SEM << val = x1 - x2; >>
+  .
+  Division<<int row, out double val>> =                    LOCAL << double x1, x2; >>
+    RPB<<row, out x1>> RPB<<row, out x2>>                  SEM << val = x1 / x2; >>
+  .
+  Multiplication<<int row, out double val>> =              LOCAL << double x1, x2; >>
+    RPB<<row, out x1>> RPB<<row, out x2>>                  SEM << val = x1 * x2; >>
+  .
+
+MAXIMIZE                                                   /* could also use the keyword MINIMIZE here */
+  << 
+    var rows = System.Linq.Enumerable.Range(0, x.GetLength(0));
+    var predicted = rows.Select(r => {
+      double result;
+      Model(r, out result);                                /* we can call the root symbol directly */
+      return result;
+    });
+    return RSquared(predicted, y);
+  >>
+END SymbReg.
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/symbreg Koza.txt
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/symbreg Koza.txt	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/Resources/symbreg Koza.txt	(revision 10055)
@@ -0,0 +1,101 @@
+PROBLEM SymbRegKoza
+CODE <<
+  double[,] x;
+  double[] y;
+  string[] variableNames;
+  Dictionary<string,int> nameToCol;
+  
+  double GetValue(double[,] data, string varName, int row) {
+    if(nameToCol == null) {
+      /* init mapping */
+      nameToCol = new Dictionary<string, int>();
+      for(int i=0; i<variableNames.Length; i++) {
+        nameToCol[variableNames[i]] = i;
+      }
+    }
+    return x[row, nameToCol[varName]];
+  }
+
+  double RSquared(IEnumerable<double> xs, IEnumerable<double> ys) {
+     HeuristicLab.Problems.DataAnalysis.OnlineCalculatorError error;
+     var r2 = HeuristicLab.Problems.DataAnalysis.OnlinePearsonsRSquaredCalculator.Calculate(xs, ys, out error);
+     if(error == HeuristicLab.Problems.DataAnalysis.OnlineCalculatorError.None) return r2;
+     else return 0.0;
+  }
+>>
+
+INIT <<
+  // generate 500 case of poly-10 benchmark function
+  int n = 500;
+  variableNames = new string[] {"x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10" };
+  var rand = new System.Random();
+  x = new double[n, 10];
+  y = new double[n];
+  for(int row = 0; row < 500; row++) {
+    for(int col = 0; col < 10; col++) {
+      x[row, col] = rand.NextDouble() * 2.0 - 1.0;
+    }
+    y[row] = x[row, 0] * x[row, 1] +
+             x[row, 2] * x[row, 3] +
+             x[row, 4] * x[row, 5] +
+             x[row, 0] * x[row, 6] + x[row, 8] +
+             x[row, 2] * x[row, 5] + x[row, 9];
+  }
+>>
+
+NONTERMINALS
+  Model<<int row, out double val>>.
+  RPB<<int row, out double val>>.
+  Addition<<int row, out double val>>.
+  Subtraction<<int row, out double val>>.
+  Multiplication<<int row, out double val>>.
+  Division<<int row, out double val>>.
+
+TERMINALS
+  ERC<<out double val>> 
+    CONSTRAINTS
+	  val IN RANGE <<-100>> .. <<100>>
+  .
+
+  Var<<out string varName>> 
+    CONSTRAINTS
+	  varName IN SET <<variableNames>>
+  .
+
+RULES
+  Model<<int row, out double val>> =
+    RPB<<row, out val>> .
+
+  RPB<<int row, out double val>> =                         LOCAL << string varName; >>
+    Addition<<row, out val>>
+    | Subtraction<<row, out val>>
+    | Division<<row, out val>>
+    | Multiplication<<row, out val>>
+    | Var<<out varName>>                                   SEM << val = GetValue(x, varName, row); >>
+    | ERC<<out val>>
+  .
+
+  Addition<<int row, out double val>> =                    LOCAL << double x1, x2; >>
+      RPB<<row, out x1>> RPB<<row, out x2>>                SEM<< val = x1 + x2; >>
+  .
+  Subtraction<<int row, out double val>> =                 LOCAL << double x1, x2; >>
+      RPB<<row, out x1>> RPB<<row, out x2>>                SEM<< val = x1 - x2; >>
+  .
+  Division<<int row, out double val>> =                    LOCAL << double x1, x2; >>
+      RPB<<row, out x1>> RPB<<row, out x2>>                SEM<< val = x1 / x2; >>
+  .
+  Multiplication<<int row, out double val>> =              LOCAL << double x1, x2; >>
+      RPB<<row, out x1>> RPB<<row, out x2>>                SEM<< val = x1 * x2; >>
+  .
+
+MAXIMIZE                                                   /* could also use the keyword MINIMIZE here */
+  << 
+    var rows = System.Linq.Enumerable.Range(0, x.GetLength(0));
+    var predicted = rows.Select(r => {
+      double result;
+      Model(r, out result);                                /* we can call the root symbol directly */
+      return result;
+    });
+    return RSquared(predicted, y);
+  >>
+END SymbRegKoza.
Index: /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/SyntaxDefinition.xsd
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/SyntaxDefinition.xsd	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/HeuristicLab.Problems.GPDL.Views/3.4/SyntaxDefinition.xsd	(revision 10055)
@@ -0,0 +1,167 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xsd:schema version="2" elementFormDefault="qualified" targetNamespace="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008" xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <!-- Font Weight -->
+  <xsd:simpleType name="FontWeight">
+    <xsd:union>
+      <xsd:simpleType>
+        <xsd:restriction base="xsd:integer">
+          <xsd:minInclusive value="1"/>
+          <xsd:maxInclusive value="999"/>
+        </xsd:restriction>
+      </xsd:simpleType>
+      <xsd:simpleType>
+        <xsd:restriction base="xsd:string">
+          <xsd:enumeration value="bold"/>
+          <xsd:enumeration value="normal"/>
+          <xsd:enumeration value="regular"/>
+          <!-- should we support other font weight names? -->
+        </xsd:restriction>
+      </xsd:simpleType>
+    </xsd:union>
+  </xsd:simpleType>
+
+  <!-- Font Style -->
+  <xsd:simpleType name="FontStyle">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="italic"/>
+      <xsd:enumeration value="normal"/>
+      <xsd:enumeration value="oblique"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <!-- Color -->
+  <xsd:attributeGroup name="ColorAttributes">
+    <xsd:attribute name="foreground" type="xsd:string" use="optional" />
+    <xsd:attribute name="background" type="xsd:string" use="optional" />
+    <xsd:attribute name="fontWeight" type="FontWeight" use="optional" />
+    <xsd:attribute name="fontStyle" type="FontStyle" use="optional" />
+    <xsd:anyAttribute namespace="##other" processContents="lax" />
+  </xsd:attributeGroup>
+
+  <xsd:attributeGroup name="ColorReferenceAttributes">
+    <xsd:attributeGroup ref="ColorAttributes" />
+    <xsd:attribute name="color" type="xsd:string" use="optional" />
+  </xsd:attributeGroup>
+
+  <xsd:element name="Color">
+    <xsd:complexType>
+      <xsd:attribute name="name" type="xsd:string" use="required" />
+      <xsd:attribute name="exampleText" type="xsd:string" use="optional" />
+      <xsd:attributeGroup ref="ColorAttributes"/>
+    </xsd:complexType>
+  </xsd:element>
+
+  <xsd:element name="Property">
+    <xsd:complexType>
+      <xsd:attribute name="name" type="xsd:string" use="required" />
+      <xsd:attribute name="value" type="xsd:string" use="required" />
+      <xsd:anyAttribute namespace="##other" processContents="lax" />
+    </xsd:complexType>
+  </xsd:element>
+
+  <!-- Regular expression -->
+  <xsd:simpleType name="regex">
+    <xsd:restriction base="xsd:string"/>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="regexIgnorePatternWhitespace">
+    <xsd:restriction base="xsd:string"/>
+  </xsd:simpleType>
+
+  <!-- Keywords -->
+  <xsd:element name="Keywords">
+    <xsd:complexType>
+      <xsd:sequence>
+        <xsd:element ref="Word" minOccurs="1" maxOccurs="unbounded"/>
+      </xsd:sequence>
+      <xsd:attributeGroup ref="ColorReferenceAttributes"/>
+    </xsd:complexType>
+  </xsd:element>
+
+  <xsd:element name="Word">
+    <xsd:complexType>
+      <xsd:simpleContent>
+        <xsd:extension base="xsd:string">
+          <xsd:anyAttribute namespace="##other" processContents="lax" />
+        </xsd:extension>
+      </xsd:simpleContent>
+    </xsd:complexType>
+  </xsd:element>
+
+  <!-- Spans -->
+  <xsd:element name="Span">
+    <xsd:complexType>
+      <xsd:sequence>
+        <xsd:element ref="Begin" minOccurs="0" maxOccurs="1"/>
+        <xsd:element ref="End" minOccurs="0" maxOccurs="1"/>
+        <xsd:element ref="RuleSet" minOccurs="0" maxOccurs="1"/>
+      </xsd:sequence>
+
+      <xsd:attributeGroup ref="ColorReferenceAttributes"/>
+      <xsd:attribute name="multiline" type="xsd:boolean" use="optional"/>
+      <xsd:attribute name="ruleSet" type="xsd:string" use="optional"/>
+      <xsd:attribute name="begin" type="regex" use="optional"/>
+      <xsd:attribute name="end" type="regex" use="optional"/>
+    </xsd:complexType>
+  </xsd:element>
+
+  <xsd:complexType name="SpanBeginEnd">
+    <xsd:simpleContent>
+      <xsd:extension base="regexIgnorePatternWhitespace">
+        <xsd:attributeGroup ref="ColorReferenceAttributes"/>
+      </xsd:extension>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+  <xsd:element name="Begin" type="SpanBeginEnd"/>
+  <xsd:element name="End" type="SpanBeginEnd"/>
+
+  <!-- Imports -->
+  <xsd:element name="Import">
+    <xsd:complexType>
+      <xsd:attribute name="ruleSet" type="xsd:string" use="required"/>
+    </xsd:complexType>
+  </xsd:element>
+
+  <!-- Rules -->
+  <xsd:element name="Rule">
+    <xsd:complexType>
+      <xsd:simpleContent>
+        <xsd:extension base="regexIgnorePatternWhitespace">
+          <xsd:attributeGroup ref="ColorReferenceAttributes"/>
+        </xsd:extension>
+      </xsd:simpleContent>
+    </xsd:complexType>
+  </xsd:element>
+
+  <!-- Rule set -->
+  <xsd:element name="RuleSet">
+    <xsd:complexType>
+      <xsd:choice minOccurs="0" maxOccurs="unbounded">
+        <xsd:element ref="Keywords"/>
+        <xsd:element ref="Span"/>
+        <xsd:element ref="Import"/>
+        <xsd:element ref="Rule"/>
+        <xsd:any namespace="##other" processContents="lax" />
+      </xsd:choice>
+      <xsd:attribute name="name" type="xsd:string" use="optional" />
+      <xsd:attribute name="ignoreCase" type="xsd:boolean" use="optional" />
+      <xsd:anyAttribute namespace="##other" processContents="lax" />
+    </xsd:complexType>
+  </xsd:element>
+
+  <!-- Main syntax definition -->
+  <xsd:element name="SyntaxDefinition">
+    <xsd:complexType>
+      <xsd:choice minOccurs="1" maxOccurs="unbounded">
+        <xsd:element ref="Property"/>
+        <xsd:element ref="Color"/>
+        <xsd:element ref="RuleSet"/>
+        <xsd:any namespace="##other" processContents="lax" />
+      </xsd:choice>
+      <xsd:attribute name="name" type="xsd:string" use="optional" />
+      <xsd:attribute name="extensions" type="xsd:string" use="optional" />
+      <xsd:anyAttribute namespace="##other" processContents="lax" />
+    </xsd:complexType>
+  </xsd:element>
+</xsd:schema>
Index: /branches/HeuristicLab.Problems.GPDL.Backend/PreBuildEvent.cmd
===================================================================
--- /branches/HeuristicLab.Problems.GPDL.Backend/PreBuildEvent.cmd	(revision 10055)
+++ /branches/HeuristicLab.Problems.GPDL.Backend/PreBuildEvent.cmd	(revision 10055)
@@ -0,0 +1,11 @@
+IF EXIST "%ProjectDir%\Properties\AssemblyInfo.cs.frame" SubWCRev "%ProjectDir%\" "%ProjectDir%\Properties\AssemblyInfo.cs.frame" "%ProjectDir%\Properties\AssemblyInfo.cs"
+IF %ERRORLEVEL% NEQ 0 GOTO Error_Handling
+IF EXIST "%ProjectDir%\Plugin.cs.frame" SubWCRev "%ProjectDir%\" "%ProjectDir%\Plugin.cs.frame" "%ProjectDir%\Plugin.cs"
+IF %ERRORLEVEL% NEQ 0 GOTO Error_Handling
+GOTO Done
+
+:Error_Handling
+ECHO There was an error while running subwcrev. Please verify that the *.cs.frame files have been correctly converted to *.cs files, otherwise HeuristicLab won't build. 
+exit 0
+
+:Done
