Uni-GH PBPraktikum Sprachimplementierung mit Werkzeugen WS 1996/97


Projekt HaKo

(Haushaltskontenführung)


Autor: Stephan Wegmann

Der mit Hilfe von Eli generierte Übersetzer soll dazu dienen, die Kontenführung in Haushalten oder auch kleinen Betrieben, d.h. insbesondere die Ausgaben in bestimmten Bereichen, einfach und übersichtlich zu gestalten. 

Für die Ermittlung der Ausgaben in einem einfachen Haushalt ist die angebotene Software oft zu komplex, Buchungen sind kompliziert einzugeben und Fehler nur durch entsprechende Umbuchungen zu behandeln. Daher entstand die Idee und Motivation, eine kleine, einfache Programmiersprache zur Haushaltsführung zu entwickeln. 

Kontenrahmen und Buchungen werden in dieser Sprache direkt als Programmtext formuliert. Dabei soll es möglich sein, einmal entworfene Kontenrahmen und Buchungstexte durch Einbindung der entsprechenden Dateien wiederzuverwenden. 

Ein Programmtext besteht im wesentlichen aus Deklarations-, Buchungs- und Ausgabeteil. Gleichartige Programmteile können dabei mehrfach hintereinander auftreten. Da der Deklarationsteil meist über lägere Zeit unverändert bleibt und die Buchungen immer weiter fortgeführt werden, sollen diese Programmteile in separaten Dateien abgelegt werden können. Zur Bildung des Gesamtprogramms werden diese Dateien zusammengefügt. 

Die Sprache enthält die folgenden Wortsymbole: Deklaration, Kontogruppe, Konto, Buchung, Ausgabe, Alle_Salden, Saldo, Kontogruppensaldo 

Spezialsymbole: 
Blöcke werden durch {} gekennzeichnet, Trennzeichen sind Semikolon (nach Anweisungen) und Komma (in Listen von Konten und zum Abtrennen des Buchungstextes), der Buchungstext wird in "" gesetzt, zum Auswählen eines Elementes einer Kontogruppe dient der Punkt, der Buchungsbetrag kann ein Ausdruck mit +,-,*,/ sein, und für Umbuchungen benutzt man <-
Bezeichner: 
C_IDENTIFIER (für Kontogruppen und Konten)  
Literale: 
Zeichenreihenkonstanten (Buchungstexte), Festpunktzahlen mit bis zu 2 Nachkommastellen (Buchungsbeträge). 
Kommentare: 
C_COMMENT 

Nach der Prüfung auf korrekte Notation findet eine Typprüfung im Buchungs- und Ausgabeteil statt: Im Buchungsteil dürfen Buchungen nur auf Konten vorgenommen werden; der Kontogruppenname steht vor dem Block. Im Ausgabeteil werden die Typen der Parameter von 'Saldo' und 'Kontogruppensaldo' geprüft. 

Für die Ausgabe soll der mit Eli generierte Übersetzer die Salden der angegebenen Konten und Kontogruppen berechnen und als Bildschirmausgabe aufbereiten. 

Programm-Beispiel

Deklaration
{
  Kontogruppe Haushalt
  {
    Kontogruppe Kueche
    {
      Konto Lebensmittel, Inventar, Reparatur;
    }
    Kontogruppe Wohnen
    {
      Konto Inventar, Reparatur;
    }
    Kontogruppe Global
    {
      Kontogruppe Heizung
      {
        Kontogruppe Brennstoff, Reparatur;
      }
      Konto Strom, Wasser, Sonstiges;
      Konto Kasse;
    }
  }
}

Buchung
{
  Haushalt:
  {
    Wohnen: { Inventar: -1200, "Neuer Fernseher"; }
    Kueche: { Lebensmittel: -55.20, "Wocheneinkauf"; }
    Global: { Kasse: +3333.33, "Gehalt";
              Heizung: { Brennstoff: -1583.36, "Heizoel"; }
            }
  }
}

Ausgabe
{
  Kontogruppensaldo(Haushalt, einfach);  /* nur Saldo von Haushalt ausgeben */
}

Projektbeschreibungen