Index: /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/CreateProblemMenuItem.cs
===================================================================
--- /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/CreateProblemMenuItem.cs	(revision 9518)
+++ /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/CreateProblemMenuItem.cs	(revision 9519)
@@ -34,241 +34,6 @@
 namespace HeuristicLab.Problems.GPDL.Views {
   internal class CreateProblemMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
-    private const string gpdlString = @"
-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<<>> CONSTRAINTS .
-  Right<<>> CONSTRAINTS .
-  Move<<>> CONSTRAINTS .
- 
-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 ArtitificialAnt.
-";
-
-    
     public override string Name {
-      get { return "Create &Problem"; }
+      get { return "Open &GPDL Editor"; }
     }
     public override IEnumerable<string> Structure {
@@ -294,30 +59,6 @@
 
     public override void Execute() {
-      Utils.InstallModule("Utils", new Utils.ModuleMethodDelegate(Utils.UtilsMethod));
-      Utils.InstallModule("Sets", new Utils.ModuleMethodDelegate(Sets.SetsMethod));
-      Utils.InstallModule("Errors", new Utils.ModuleMethodDelegate(Errors.ErrorsMethod));
-
-      Utils.InstallModule("GPDefLex", new Utils.ModuleMethodDelegate(GPDefLex.GPDefLexMethod));
-      Utils.InstallModule("GPDefSem", new Utils.ModuleMethodDelegate(GPDefSem.GPDefSemMethod));
-      Utils.InstallModule("GPDefSyn", new Utils.ModuleMethodDelegate(GPDefSyn.GPDefSynMethod));
-
-      // --- initialize modules ---
-      Utils.Modules(Utils.ModuleAction.initModule);
-
-      Errors.PushAbortMethod(new Errors.AbortMethod(Abort));
-      
-      using (var src = new StringReader(gpdlString)) {
-        GPDefLex.src = src;
-        GPDefSyn.Parse();
-      }
-
-      GPDefLex.InitLex();
-      GPDefSyn.Interpret();
-      MainFormManager.MainForm.ShowContent(GPDefSem.problem);
-    }
-
-    private void Abort(string abortKind, string moduleName, string methodName, string descr) {
-      
-      
+      var view = MainFormManager.CreateView(typeof(GpdlEditor));
+      view.Show();
     }
   }
Index: /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/GpdlEditor.Designer.cs
===================================================================
--- /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/GpdlEditor.Designer.cs	(revision 9519)
+++ /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/GpdlEditor.Designer.cs	(revision 9519)
@@ -0,0 +1,122 @@
+﻿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.gpdlTextBox = new System.Windows.Forms.TextBox();
+      this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      ((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);
+      // 
+      // gpdlTextBox
+      // 
+      this.gpdlTextBox.AcceptsReturn = true;
+      this.gpdlTextBox.AcceptsTab = true;
+      this.gpdlTextBox.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.gpdlTextBox.Font = new System.Drawing.Font("Courier New", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.gpdlTextBox.Location = new System.Drawing.Point(3, 3);
+      this.gpdlTextBox.Multiline = true;
+      this.gpdlTextBox.Name = "gpdlTextBox";
+      this.gpdlTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both;
+      this.gpdlTextBox.Size = new System.Drawing.Size(655, 422);
+      this.gpdlTextBox.TabIndex = 1;
+      // 
+      // 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.compileButton);
+      this.splitContainer.Panel2.Controls.Add(this.gpdlTextBox);
+      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;
+      // 
+      // 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);
+      this.splitContainer.Panel2.PerformLayout();
+      ((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.TextBox gpdlTextBox;
+    private System.Windows.Forms.SplitContainer splitContainer;
+  }
+}
Index: /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/GpdlEditor.cs
===================================================================
--- /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/GpdlEditor.cs	(revision 9519)
+++ /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/GpdlEditor.cs	(revision 9519)
@@ -0,0 +1,61 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.Optimization.Views;
+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;
+      ProblemInstanceConsumerView view = (ProblemInstanceConsumerView)viewHost.ActiveView;
+      splitContainer.Panel1Collapsed = !view.ProblemInstanceProviders.Any();
+    }
+
+    private void compileButton_Click(object sender, EventArgs e) {
+      Utils.InstallModule("Utils", new Utils.ModuleMethodDelegate(Utils.UtilsMethod));
+      Utils.InstallModule("Sets", new Utils.ModuleMethodDelegate(Sets.SetsMethod));
+      Utils.InstallModule("Errors", new Utils.ModuleMethodDelegate(Errors.ErrorsMethod));
+
+      Utils.InstallModule("GPDefLex", new Utils.ModuleMethodDelegate(GPDefLex.GPDefLexMethod));
+      Utils.InstallModule("GPDefSem", new Utils.ModuleMethodDelegate(GPDefSem.GPDefSemMethod));
+      Utils.InstallModule("GPDefSyn", new Utils.ModuleMethodDelegate(GPDefSyn.GPDefSynMethod));
+
+      // --- initialize modules ---
+      Utils.Modules(Utils.ModuleAction.initModule);
+
+      Errors.PushAbortMethod(new Errors.AbortMethod(Abort));
+
+      using (var src = new StringReader(gpdlTextBox.Text)) {
+        GPDefLex.src = src;
+        GPDefSyn.Parse();
+      }
+
+      GPDefLex.InitLex();
+      GPDefSyn.Interpret();
+
+      MainForm.MainFormManager.MainForm.ShowContent(GPDefSem.problem);
+    }
+
+    private void Abort(string abortKind, string moduleName, string methodName, string descr) {
+
+    }
+
+    void IProblemInstanceConsumer<string>.Load(string data) {
+      this.gpdlTextBox.Text = data;
+    }
+
+  }
+}
Index: /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/GpdlEditor.resx
===================================================================
--- /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/GpdlEditor.resx	(revision 9519)
+++ /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/GpdlEditor.resx	(revision 9519)
@@ -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/HeuristicLab.Problems.GPDL.Views/3.4/GpdlExampleDataDescriptor.cs
===================================================================
--- /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/GpdlExampleDataDescriptor.cs	(revision 9519)
+++ /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/GpdlExampleDataDescriptor.cs	(revision 9519)
@@ -0,0 +1,18 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+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/HeuristicLab.Problems.GPDL.Views/3.4/GpdlExampleProvider.cs
===================================================================
--- /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/GpdlExampleProvider.cs	(revision 9519)
+++ /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/GpdlExampleProvider.cs	(revision 9519)
@@ -0,0 +1,42 @@
+﻿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("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("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/HeuristicLab.Problems.GPDL.Views/3.4/GpdlProblemInstanceConsumerView.cs
===================================================================
--- /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/GpdlProblemInstanceConsumerView.cs	(revision 9519)
+++ /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/GpdlProblemInstanceConsumerView.cs	(revision 9519)
@@ -0,0 +1,10 @@
+﻿using System;
+using System.Collections.Generic;
+using HeuristicLab.Problems.GPDL.Views.Properties;
+using HeuristicLab.Problems.Instances;
+using HeuristicLab.Problems.Instances.Views;
+
+namespace HeuristicLab.Problems.GPDL.Views {
+  public class GpdlProblemInstanceConsumerView : ProblemInstanceConsumerViewGeneric<GpdlExampleDataDescriptor> {
+  }
+}
Index: /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/HeuristicLab.Problems.GPDL.Views-3.4.csproj
===================================================================
--- /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/HeuristicLab.Problems.GPDL.Views-3.4.csproj	(revision 9518)
+++ /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/HeuristicLab.Problems.GPDL.Views-3.4.csproj	(revision 9519)
@@ -173,4 +173,8 @@
       <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Instances.DataAnalysis-3.3.dll</HintPath>
     </Reference>
+    <Reference Include="HeuristicLab.Problems.Instances.Views-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.Instances.Views-3.3.dll</HintPath>
+    </Reference>
     <Reference Include="HeuristicLab.Random-3.3">
       <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.Random-3.3.dll</HintPath>
@@ -196,6 +200,22 @@
   </ItemGroup>
   <ItemGroup>
+    <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" />
@@ -226,4 +246,31 @@
     </ProjectReference>
   </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\multi-output-multiplier.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\symbreg HEAL.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\symbreg Koza.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. 
Index: /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/Properties/Resources.Designer.cs
===================================================================
--- /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/Properties/Resources.Designer.cs	(revision 9519)
+++ /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/Properties/Resources.Designer.cs	(revision 9519)
@@ -0,0 +1,222 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.18047
+//
+//     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 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 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 SymbReg
+        ///
+        ///CODE &lt;&lt;
+        ///  double[,] inputValues;
+        ///  double[] targetValues;
+        ///  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 data[row, nameToCol[varName]];
+        ///  }
+        ///
+        ///  double RSquared(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[,] inputValues;
+        ///  double[] targetValues;
+        ///  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 data[row, nameToCol[varName]];
+        ///  }
+        ///
+        ///  double RSquared(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/HeuristicLab.Problems.GPDL.Views/3.4/Properties/Resources.resx
===================================================================
--- /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/Properties/Resources.resx	(revision 9519)
+++ /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/Properties/Resources.resx	(revision 9519)
@@ -0,0 +1,139 @@
+﻿<?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="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="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/HeuristicLab.Problems.GPDL.Views/3.4/Resources/Artificial Ant.txt
===================================================================
--- /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/Resources/Artificial Ant.txt	(revision 9519)
+++ /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/Resources/Artificial Ant.txt	(revision 9519)
@@ -0,0 +1,231 @@
+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<<>> CONSTRAINTS .
+  Right<<>> CONSTRAINTS .
+  Move<<>> CONSTRAINTS .
+ 
+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 ArtitificialAnt.
Index: /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/Resources/Factorial.txt
===================================================================
--- /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/Resources/Factorial.txt	(revision 9519)
+++ /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/Resources/Factorial.txt	(revision 9519)
@@ -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/HeuristicLab.Problems.GPDL.Views/3.4/Resources/Fib.txt
===================================================================
--- /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/Resources/Fib.txt	(revision 9519)
+++ /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/Resources/Fib.txt	(revision 9519)
@@ -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/HeuristicLab.Problems.GPDL.Views/3.4/Resources/multi-output-multiplier.txt
===================================================================
--- /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/Resources/multi-output-multiplier.txt	(revision 9519)
+++ /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/Resources/multi-output-multiplier.txt	(revision 9519)
@@ -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/HeuristicLab.Problems.GPDL.Views/3.4/Resources/symbreg HEAL.txt
===================================================================
--- /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/Resources/symbreg HEAL.txt	(revision 9519)
+++ /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/Resources/symbreg HEAL.txt	(revision 9519)
@@ -0,0 +1,104 @@
+PROBLEM SymbReg
+
+CODE <<
+  double[,] inputValues;
+  double[] targetValues;
+  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 data[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;
+  }
+  
+
+  void LoadData(string fileName, out double[,] inputValues, out string[] variableNames, out double[] target) {
+    var prov = new HeuristicLab.Problems.Instances.DataAnalysis.RegressionRealWorldInstanceProvider();
+    var dd = prov.GetDataDescriptors().OfType<HeuristicLab.Problems.Instances.DataAnalysis.Housing>().Single();
+    var problemData = prov.LoadData(dd);    
+    
+    inputValues = new double[problemData.TrainingIndices.Count(), problemData.AllowedInputVariables.Count()];
+    foreach(var r in problemData.TrainingIndices) {
+       int i=0;
+       foreach(var v in problemData.AllowedInputVariables) {
+          inputValues[r, i++] = problemData.Dataset.GetDoubleValue(v, r);
+       }
+    }
+    variableNames = problemData.AllowedInputVariables.ToArray();
+    target = problemData.Dataset.GetDoubleValues(problemData.TargetVariable, problemData.TrainingIndices).ToArray();
+  }
+>>
+
+INIT <<
+  LoadData("filename.csv", out inputValues, out variableNames, out targetValues);
+>>
+
+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(inputValues, 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, inputValues.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, targetValues);
+  >>
+END SymbReg.
Index: /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/Resources/symbreg Koza.txt
===================================================================
--- /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/Resources/symbreg Koza.txt	(revision 9519)
+++ /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL.Views/3.4/Resources/symbreg Koza.txt	(revision 9519)
@@ -0,0 +1,103 @@
+PROBLEM SymbRegKoza
+CODE <<
+  double[,] inputValues;
+  double[] targetValues;
+  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 data[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;
+  }
+  
+
+  void LoadData(string fileName, out double[,] inputValues, out string[] variableNames, out double[] target) {
+    var prov = new HeuristicLab.Problems.Instances.DataAnalysis.RegressionRealWorldInstanceProvider();
+    var dd = prov.GetDataDescriptors().OfType<HeuristicLab.Problems.Instances.DataAnalysis.Housing>().Single();
+    var problemData = prov.LoadData(dd);    
+    
+    inputValues = new double[problemData.TrainingIndices.Count(), problemData.AllowedInputVariables.Count()];
+    foreach(var r in problemData.TrainingIndices) {
+       int i=0;
+       foreach(var v in problemData.AllowedInputVariables) {
+          inputValues[r, i++] = problemData.Dataset.GetDoubleValue(v, r);
+       }
+    }
+    variableNames = problemData.AllowedInputVariables.ToArray();
+    target = problemData.Dataset.GetDoubleValues(problemData.TargetVariable, problemData.TrainingIndices).ToArray();
+  }
+>>
+
+INIT <<
+  LoadData("filename.csv", out inputValues, out variableNames, out targetValues);
+>>
+
+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(inputValues, 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, inputValues.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, targetValues);
+  >>
+END SymbRegKoza.
Index: /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL/3.4/HeuristicLab.Problems.GPDL-3.4.csproj
===================================================================
--- /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL/3.4/HeuristicLab.Problems.GPDL-3.4.csproj	(revision 9518)
+++ /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL/3.4/HeuristicLab.Problems.GPDL-3.4.csproj	(revision 9519)
@@ -196,5 +196,4 @@
     <Compile Include="InterpreterBuilder.cs" />
     <Compile Include="MethodBuilder.cs" />
-    <Compile Include="Problem.cs" />
     <Compile Include="ProblemGenerator.cs" />
     <Compile Include="SourceReader.cs" />
Index: anches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL/3.4/Problem.cs
===================================================================
--- /branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL/3.4/Problem.cs	(revision 9518)
+++ 	(revision )
@@ -1,30 +1,0 @@
-﻿#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 System.Text;
-using HeuristicLab.PluginInfrastructure;
-
-namespace HeuristicLab.Problems.GPDL {
-  public class Problem :  {
-  }
-}
