Category Archives: Compiler Construction

Compiler Construction, WS1011

Für die zukünftige Abgabe der Übungen erhält jeder Teilnehmer Zugriff auf ein eigenes CVS-Repository, über das die eigene Implementierung verwaltet werden soll. Dadurch wird die Bewertung für uns vereinfacht und Ihr könnt sicher sein, dass alle Abgaben auch bei uns ankommen.


Hierzu sollte sich jeder, der noch keinen Account auf dem Fusion Forge besitzt, dort registrieren. Jeder mit existierendem Account ist bereits einem Projekt zugewiesen worden (unter “Mein Account” -> “Meine persönliche Seite” -> “Projekte” muss es aufgeführt sein). Alle Teilnehmer (egal ob neuer oder existierender Account), die noch ein solches Projekt benötigen, melden sich am besten kurz per Mail (den gewählten Accountnamen auf dem Fusion Forge nicht vergessen mitzuschicken, damit ich euch zuordnen kann), damit ich es erstellen und euch zuweisen kann.


Die URL zu eurem CVS-Repository findet ihr, wenn ich euer Projekt auswählt und in der oberen Leiste auf “SCM” klickt.


Ändert die Namen eurer (Eclipse-)Projekte bitte derart, dass sie ein Namenskürzel von euch enthalten, bevor ihr sie eincheckt. Das ermöglicht uns die schnellere Zuordnung.


Die Bewertung der einzelnen Übungen erfolgt über diese Projekte. Dazu werden sie zum angegebenen Abgabezeitpunkt mit dem von Euch eingepflegten Stand ausgelesen. Später hinzugefügte Änderungen können für die jeweilige Übung nicht gewertet werden. Abgaben per Mail bitte nur in Ausnahmefällen.


Bei Unklarheiten oder Fragen meldet Euch am Besten kurz per Mail oder kommt bei mir vorbei (R1338).

Compiler Construction, WS0910

This homework continues the Xtext exercise from homework #10. This time, you have to generate Java code from EngineeringC code. Add this example model to your EngineeringC project:


EngineeringCDiagram diag {
  ECBlockDecl test {
    ECStore x {
      value : "0"
    }

    ECStore y {
      value : "7"
    }

    ECComputeBlock comp1 {
      expression : "x = 6 * y"
    }
  }

  ECBlockDecl callTest {
    ECStore z {
      value : "0"
    }

    ECBlockAppl callTest {
      instanceof : test
    }

    ECComputeBlock comp2 {
      expression : "z = x + 42"
    }
  }
}

(Remember to first modify your grammar before creating a code generation template!)

The generated Java code should calculate the correct result for all ECComputeBlocks. To ensure this, create a JUnit test in the same package as the generated class. Call the generated methods from the test and ensure that the expected values are computed. To make cross-block variable access possible, you have to modify the Xpand template so that these variables are accessible from the generated methods.

Xtext Workflow from the lecture:

<workflow>
  <property file="workflow.properties"/>
  <component	class="org.eclipse.xtext.MweReader" uri="${modelFile}">
    <register class="de.unikassel.se.compilerbau.ECStandaloneSetup"/>
  </component>

  <component id="generator" class="org.eclipse.xpand2.Generator">
    <metaModel id="mm" class="org.eclipse.xtend.typesystem.emf.EmfMetaModel">
      <metaModelPackage value="de.unikassel.se.compilerbau.eC.ECPackage"/>
    </metaModel>
    <expand value="GenerateEC::Root FOR model"/>
    <outlet path="${srcGenPath}/">
      <postprocessor class="org.eclipse.xpand2.output.JavaBeautifier"/>
    </outlet>
  </component>
</workflow>

Helpful links: