Der Kompilierer

In diesem Artikel wird der Kompilierer der Deutschen Programmiersprache (kurz kddp) und seine Nutzung erklärt.

Übersicht

KDDP ist ein Konsolen Programm, das über eine Befehlszeile (wie Powershell, bash, etc.) benutzt wird. Die Nutzung des kddp Befehls sieht allgemein so aus:

$ kddp <Befehl> [Optionen] [Argumente]

wobei [Argumente] meistens eine Eingabedatei ist, die vom Befehl verarbeitet wird. Nicht alle Befehle brauchen eine Eingabedatei, und die möglichen Optionen sind immer optional.

Hilfe

Um alle möglichen Befehle und Optionen zu sehen, kann kddp selbst benutzt werden:

$ kddp
Der Kompilierer der deutschen Programmiersprache (DDP)

Nutzung:
  kddp <Befehl> [Optionen] [Argumente]

Verfügbare Befehle:
  formatiere     Formatiert eine .ddp Datei
  hilfe          Zeigt Informationen zu einem Befehl
  kompiliere     Kompiliert eine .ddp Datei
  parse          Parst eine .ddp Datei in einen Abstrakten Syntaxbaum
  starte         Kompiliert und führt die angegebene .ddp Datei aus
  update         Aktualisiert kddp
  version        Zeigt Versionsinformationen des Kompilierers

Optionen:
  -h, --hilfe        Zeigt Informationen zum Befehl
  -v, --version      Zeigt die Version des Kompilierers
  -w, --wortreich    Gibt wortreiche Informationen aus
  -t, --zeitmessen   Gibt in Kombination mit --wortreich Zeitmessungen aus

Probiere "kddp hilfe <Befehl>" oder "kddp <Befehl> [-h | --hilfe]" für mehr Informationen zu einem Befehl.

Beispiel hilfe für den kompiliere Befehl:

$ kddp hilfe kompiliere
Kompiliert eine .ddp Datei in eine ausführbare, llvm oder objekt Datei.

Nutzung:
  kddp kompiliere [-o Ausgabe-Datei [--main main.o] [--gcc-flags GCC-Flags] [--extern-gcc-flags Externe-GCC-Flags] [--nodeletes] [--verbose] [--link-modules] [--link-list-defs] [--gcc-executable Pfad-zu-GCC>] <Datei>

Optionen:
  -o, --ausgabe string                Optionaler Pfad der Ausgabedatei (.exe, .ll, .o, .obj, .s, .asm).
      --externe-gcc-optionen string   Benutzerdefinierte Optionen, die gcc für jede externe .c Datei übergeben werden
      --gcc-executable string         Pfad zur gcc executable, die genutzt werden soll (default "gcc")
      --gcc-optionen string           Benutzerdefinierte Optionen, die gcc übergeben werden
  -h, --hilfe                         Zeigt Informationen zum Befehl
      --list-defs-linken              Ob die eingebauten Listen Definitionen in das Hauptmodul gelinkt werden sollen (default true)
      --main string                   Optionaler Pfad zur main.o Datei
      --module-linken                 Ob alle Module in das Hauptmodul gelinkt werden sollen (default true)
      --nichts-loeschen               Keine temporären Dateien löschen
  -O, --optimierungs-stufe uint       Menge und Art der Optimierungen, die angewandt werden (default 1)

Globale Optionen:
  -w, --wortreich    Gibt wortreiche Informationen aus
  -t, --zeitmessen   Gibt in Kombination mit --wortreich Zeitmessungen aus

Befehle und Optionen

Hier ist eine Liste aller Befehle und Optionen mit einer kurzen Erklärung. Details folgen unten.

BefehlsnameBefehlssyntaxBefehlsbeschreibungBefehlsoptionenOptionsbeschreibungen
hilfehilfe <Befehl>Zeigt Nutzungsinformationen über den Befehl--
kompilierekompiliere <Eingabedatei> <Optionen>Kompiliert die gegebene .ddp Datei zu einer ausführbaren Datei-o, --ausgabe <Ausgabepfad>
-O, --optimierungs-stufe <Stufe>
--nichts-loeschen
--gcc-optionen
--externe-gcc-optionen
--gcc-executable <Pfad>
--main <Pfad>
--module-linken
--list-defs-linken
Optionaler Pfad der Ausgabedatei
Menge und Art der Optimierungen, die angewandt werden (Standard: 1)
Temporäre Dateien werden nicht gelöscht
Benutzerdefinierte Optionen, die gcc übergeben werden
Benutzerdefinierte Optionen, die gcc für jede externe .c Datei übergeben werden
Pfad zur gcc executable, die genutzt werden soll
Optionaler Pfad zur main.o Datei
Ob alle Module in das Hauptmodul gelinkt werden sollen (Standard: wahr)
Ob die eingebauten Listen Definitionen in das Hauptmodul gelinkt werden sollen (Standard: wahr)
startestarte <Eingabedatei> <Optionen>Kompiliert und führt die gegebene .ddp Datei aus--gcc-optionen
--externe-gcc-optionen
Benutzerdefinierte Optionen, die gcc übergeben werden
Benutzerdefinierte Optionen, die gcc für jede externe .c Datei übergeben werden
formatiereformatiere <Eingabedatei> <Optionen>Formatiert die gegebene .ddp Datei--leerzeichenLeerzeichen statt Tabs für die Einrückung benutzen
parseparse <Eingabedatei> <Optionen>Parse die Eingabedatei zu einem Abstrakten Syntaxbaum-o, --ausgabe <Ausgabepfad>Optionaler Pfad der Ausgabedatei
updateupdate <Optionen>Aktualisiert kddp (siehe Updates)--jetzt
--vergleiche-version
--pre-release
Aktualisiert sofort ohne zu fragen
Vergleicht neue Version mit der installierten
Aktualisiert auf eine Vorabversion
versionversion <Optionen>Zeige Informationen zu dieser DDP Version--go-build-infoZeige Go build Informationen

Die globalen Optionen -w, --wortreich (gibt wortreiche Informationen während des Befehls aus) und -t, --zeitmessen (gibt zusammen mit --wortreich Zeitmessungen aus) können bei jedem Befehl angegeben werden.

kompiliere

$ kddp kompiliere <Eingabedatei> <Optionen> ist der wichtigste Befehl, und wird am meisten genutzt.

Die Eingabedatei muss eine .ddp Datei sein.

Mit der -o Option kann der Name der Ausgabedatei angegeben werden, typischerweise .exe auf Windows. Es können aber auch die Dateierweiterungen .ll, .o, .obj, .s und .asm. Wenn die Erweiterung .ll angegeben wird, wird llvm-ir ausgegeben. Das könnte interessant sein für Menschen die einfach daran interessiert sind, um Bugs zu finden oder Ähnliches. Bei den Erweiterungen .s oder .asm wird assembler-Sprache ausgegeben. Bei den Erweiterungen .o oder .obj werden Objektdateien ausgegeben, falls man andere Programme zu diesen linken möchte.

Mit den Optionen –gcc-optionen und –externe-gcc-optionen können weitere Argumente angegeben werden, die beim Linken an GCC übergeben werden.

Die Argumente aus –gcc-optionen werden beim finalen Link-Schritt übergeben und werden Benutzt wenn man z.B. zu externen Bibliotheken linken möchte (zu einer Grafikbibliothek o.ä.).

Die Argumente aus –externe-gcc-optionen werden nur benutzt falls es externe Funktionen gibt, die in .c Dateien definiert werden. Sollte das der Fall sein, wird jede angegebene .c Datei separat mit GCC kompiliert, und dabei werden die Argumente aus –externe-gcc-optionen übergeben. Das ist nützlich, wenn man Include-Verzeichnisse (wie die DDP-Runtime) oder C-Präprozessor Direktiven angeben muss/möchte.

Mit der Option -O (oder --optimierungs-stufe) kann man einstellen, wie stark das Programm optimiert wird:

Mit --nichts-loeschen werden die temporären Dateien, die beim Kompilieren entstehen, nicht gelöscht. Das ist vor allem bei der Fehlersuche nützlich.

starte

$ kddp starte <Eingabedatei> <Optionen> kompiliert die Eingabedatei in einen temporären Ordner und führt das Programm danach direkt aus. Die ausführbare Datei wird anschließend wieder gelöscht.

Alle Argumente nach der Eingabedatei werden an das Programm weitergegeben:

$ kddp starte Programm.ddp hallo 42

Hier bekommt das Programm die Befehlszeilenargumente hallo und 42. Wie man diese im Programm benutzt, steht im Artikel zum Duden Modul Befehlszeile.

formatiere

$ kddp formatiere <Eingabedatei> formatiert eine .ddp Datei, also zum Beispiel die Einrückung. Die Datei wird dabei direkt überschrieben.

Standardmäßig wird mit Tabs eingerückt. Mit der Option --leerzeichen werden stattdessen Leerzeichen benutzt.

parse

$ kddp parse <Eingabedatei> liest die Eingabedatei ein und gibt den abstrakten Syntaxbaum aus. Das ist vor allem für die Entwicklung des Kompilierers nützlich. Mit der Option -o wird der Syntaxbaum in eine Datei geschrieben, anstatt ihn in der Konsole anzuzeigen.

update

$ kddp update aktualisiert kddp auf die neuste Version. Mehr dazu im Artikel Updates.

version

$ kddp version zeigt die Version von kddp an. Mit --wortreich werden zusätzlich die Versionen von GCC, LLVM und Go angezeigt. Die Option --go-build-info zeigt noch mehr Informationen darüber, wie kddp gebaut wurde.

Globale Optionen

Die Option --wortreich (oder -w) kann bei jedem Befehl benutzt werden. Dann gibt kddp aus, was es gerade macht. Zusammen mit --zeitmessen (oder -t) wird außerdem angezeigt, wie lange die einzelnen Schritte gedauert haben.