Kompilierer

module
v0.5.0-alpha Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 2, 2024 License: MIT

README

Der Kompilierer Der Deutschen Programmiersprache

Die Deutsche Programmiersprache (DDP) ist eine (Witz-)Programmiersprache von NotLe0n und bafto, die so entworfen wurde, dass in ihr geschriebene Programme so gelesen werden können wie (annähernd) korrektes Deutsch.

Die Bedienungsanleitung ist ein guter Startpunkt um DDP (kennen) zu lernen, dort ist auch eine Installations-Anleitung zu finden.

Der Spielplatz ermöglicht es DDP ausprobieren zu können ohne den Kompiler installieren zu müssen.

Wer am Kompilierer mitarbeiten möchte, findet mehr dazu in CONTRIBUTING.

Installation

Um DDP zu installieren braucht man bloß den aktuellsten Release für das gewünschte Betriebssystem hier von Github zu Downloaden, das Archiv zu entpacken, und den Installer (ddp-setup.exe) auszuführen.

Eine detaillierte Installationsanleitung gibt es hier.

Feature Übersicht

DDP ist eine statisch typisierte, modulare und imperative Sprache. Die meisten Features werden Programmierern bekannt sein.

Ausdrücke

Jeder Ausdruck in DDP produziert einen Wert mit festem Typ.

Variablen haben ebenfalls einen festen Typ.

DDP hat auch Listen

Anweisungsblöcke

In DDP können mehrere Anweisungen in einem Block zusammengefasst werden.

Wie man sieht beginnt jeder Block mit einem ":". Variablen werden auf Unter-Blöcke übertragen, aber neue Deklarationen mit dem selben Namen überschatten alte Deklarationen.

Da {} keine Symbole von Deutschen Texten sind wird die Einrückungstiefe (4 Leerzeichen oder 1 Tab) benutzt um zu bestimmen wann ein Block fertig ist.

If-Anweisungen

Für simple Verzweigungen bietet DDP Wenn Anweisungen.

Das geht natürlich auch ohne Anweisungsblöcke, allerdings nur für einzelne Anweisungen.

Schleifen

DDP unterstützt die meisten bekannten Schleifen.

While-Schleifen:

Do-While-Schleifen:

Und am wichtigsten, For-Schleifen:

Damit man nicht immer eine lange For-Schleife schreiben muss gibt es auch Wiederholungen:

So wie bei If-Anweisungen geht das alles auch mit einzelnen Anweisungen.

Funktionen

Funktionen sind mit Abstand das wichtigste Feature von DDP, denn sie erlauben es, so gut wie jeden deutschen Satz oder Ausdruck in Code zu verwandeln.

Das liegt an der Art wie man sie Aufruft, nämlich über so gennante Aliase.

Wie man sieht wurde die Funktion foo wie ein normaler deutscher Ausdruck aufgerufen, ohne die grammatikalischen Regeln zu verletzten.

Funktionen sind ein sehr großes Thema in DDP und dieses kleine Beispiel zeigt nur einen Bruchteil ihrer Komplexen Syntax.

Für mehr details empfehle ich dringen diesen Artikel aus der Bedienungsanleitung gründlich durchzulesen, oder zumindest die Beispiele zu überfliegen.

Module

In DDP ist Quellcode in Modulen organisiert, wobei ein Modul einfach eine Quelldatei ist.

Tatsächlich haben alle obigen Beispiele bereits das Module "Duden/Ausgabe" benutzt, um die Schreibe x Funktion nutzen zu können.

Wenn man ein Module einbindet, werden nur die als öffentliche markierten Funktionen/Variablen sichtbar.

Man kann auch bloß die Funktionen/Variablen einbinden, die man braucht.

include.ddp:

main.ddp:

Directories

Path Synopsis
cmd
kddp
entry point of kddp
entry point of kddp
Description: This script is used to generate compile_commands.json file for the runtime and stdlib example usage:
Description: This script is used to generate compile_commands.json file for the runtime and stdlib example usage:
src
ast
ast/annotators
This file contains an example annotator that attaches metadata to Bad nodes The metadata is a simple counter that is attached to each Bad node
This file contains an example annotator that attaches metadata to Bad nodes The metadata is a simple counter that is attached to each Bad node
compiler
This file defines often used utility functions to generate ir
This file defines often used utility functions to generate ir
parser
This file defines the functions used to parse Aliases
This file defines the functions used to parse Aliases
parser/resolver
The resolver package should not be used independently from the parser.
The resolver package should not be used independently from the parser.
scanner
much of this code was inspired (meaning copied) from craftinginterpreters
much of this code was inspired (meaning copied) from craftinginterpreters
token
range.go defines types to work with token positions in an AST these types are not used by Token itself, but are meant to be used by code-analysis tools
range.go defines types to work with token positions in an AST these types are not used by Token itself, but are meant to be used by code-analysis tools

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL