Skip to content

Commit

Permalink
Merge pull request #107 from DDP-Projekt/cli-parser
Browse files Browse the repository at this point in the history
Duden/Befehlszeile + examples/cli_rechner
  • Loading branch information
bafto authored Dec 14, 2024
2 parents 803c328 + 4c050ef commit 6557544
Show file tree
Hide file tree
Showing 19 changed files with 758 additions and 69 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ Der Changelog von DDP. Sortiert nach Release.

## In Entwicklung

- [Neu] Duden/Befehlszeile zum Arbeiten mit Befehlszeilenargumenten
- [Fix] Verschachtelte Struktur Literale verhalten sich jetzt mit Einbindungen korrekt
- [Fix] Variablen in Kombinations Literalen werden nun korrekt umgewandelt
- [Fix, Breaking] `Gib wahr/falsch, wenn ..., zurück` benötigt nun das Komma
- [Fix] Fehler mit Referenz Parametern in überladenen Operatoren werden nun korrekt gemeldet
- [Neu] Mehrere Duden Module:
- Duden/Komprimierung: Funktionen um mit Archiven (zip, gzip, xz, bzip2, lz4, 7z) zu arbeiten
Expand Down
62 changes: 62 additions & 0 deletions examples/cli_rechner.ddp
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
[
Dieses Programm ist ein simpler Rechner, der die Summe, das Produkt, das Minimum oder das Maximum von Zahlen berechnet.
Es kann auch Hexadezimalzahlen verarbeiten.

Aufruf: cli_rechner [operation] [argumente | --hex | --ausgabe [Datei]]
]
Binde "Duden/Ausgabe" ein.
Binde "Duden/Laufzeit" ein.
Binde "Duden/Zahlen" ein.
Binde "Duden/Texte" ein.
Binde "Duden/Dateisystem" ein.
Binde "Duden/Statistik" ein.
Binde "Duden/Listen" ein.
Binde "Duden/Befehlszeile" ein.
Binde "Duden/Fehlerbehandlung" ein.

Schreibe ab jetzt alle Fehler.

Füge der Befehlszeile (eine Option mit dem Namen "hex" und der Kurzschreibweise 'h') hinzu.
Füge der Befehlszeile (eine Option mit dem Namen "ausgabe", der Kurzschreibweise 'o' und dem Standardwert ("" als Variable)) hinzu.

Die Text Liste operationen ist eine Liste, die aus "summe", "produkt", "minimum", "maximum" besteht.

Für jeden Text operation in operationen, mache:
Füge der Befehlszeile (einen Befehl mit dem Namen operation) hinzu.

Analysiere die Befehlszeile.

Wenn (die Unterbefehle der Befehlszeile) leer sind, dann:
Schreibe den Fehler "Keine Operation angegeben\n Operationen: summe, produkt, minimum und maximum\n".
Beende das Programm mit Code 1.

Wenn operationen (die Unterbefehle der Befehlszeile an der Stelle 1) nicht enthält, dann:
Schreibe den Fehler "Keine valide Operation\n Operationen: summe, produkt, minimum und maximum\n".
Beende das Programm mit Code 1.

Die Zahlen Liste argumente ist eine leere Zahlen Liste.

Für jeden Text argument in (die Argumente der Befehlszeile), mache:
Die Zahl arg ist 0.
Wenn die Option "hex" vorhanden war, dann:
Speichere die Hexadezimalzahl argument in arg.
Wenn es dabei einen Fehler gab, fahre mit der Schleife fort.
Wenn aber argument in eine Zahl umgewandelt werden kann, speichere argument als Zahl in arg.
Sonst:
Schreibe den Fehler ("Ungültiges Argument: " verkettet mit argument verkettet mit '\n').
Fahre mit der Schleife fort.

Füge arg an argumente an.

Die Zahl ergebnis ist 0.
Der Text operation ist (die Unterbefehle der Befehlszeile an der Stelle 1).
Wenn operation gleich "summe" ist, speichere die Summe aller Zahlen in argumente in ergebnis.
Wenn aber operation gleich "produkt" ist, speichere das Produkt aller Zahlen in argumente in ergebnis.
Wenn aber operation gleich "minimum" ist, speichere die kleinste Zahl in argumente in ergebnis.
Wenn aber operation gleich "maximum" ist, speichere die größte Zahl in argumente in ergebnis.

Der Text ausgabe ist ergebnis in Hexadezimal, falls "hex" vom Nutzer gesetzt wurde, ansonsten ergebnis als Text.
Wenn "ausgabe" nicht vom Nutzer gesetzt wurde, dann:
Schreibe ausgabe auf eine Zeile.
Sonst:
Schreibe den Text ausgabe in die Datei (der Optionnwert für "ausgabe" als Text).
463 changes: 463 additions & 0 deletions lib/stdlib/Duden/Befehlszeile.ddp

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions lib/stdlib/Duden/Eingabe.ddp
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ Die öffentliche Funktion Hat_Token gibt einen Wahrheitswert zurück, macht:
Wenn die Länge von Eingabe_Puffer größer als 0 ist, gib wahr zurück.
Wenn die Benutzereingabe zu Ende gewesen ist, gib falsch zurück.
Speichere den nächsten Text in Eingabe_Puffer.
Gib wahr, wenn die Länge von Eingabe_Puffer größer als 0 ist zurück.
Gib wahr, wenn die Länge von Eingabe_Puffer größer als 0 ist, zurück.
Und kann so benutzt werden:
"<!k>eine Eingabe vorhanden ist"

Expand All @@ -201,7 +201,7 @@ Und kann so benutzt werden:
zu einer Zahl umgewandelt werden kann.
]
Die öffentliche Funktion Hat_Zahl gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn eine Eingabe vorhanden ist und Eingabe_Puffer in eine Zahl umgewandelt werden kann zurück.
Gib wahr, wenn eine Eingabe vorhanden ist und Eingabe_Puffer in eine Zahl umgewandelt werden kann, zurück.
Und kann so benutzt werden:
"die nächste Eingabe <!k>eine Zahl ist" oder
"die naechste Eingabe <!k>eine Zahl ist"
Expand All @@ -211,6 +211,6 @@ Und kann so benutzt werden:
gelesen werden kann.
]
Die öffentliche Funktion Hat_Buchstabe gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn nicht war_eof oder die Länge von Eingabe_Puffer ungleich 0 ist oder Gepufferter_Buchstabe als Zahl ungleich 0 ist zurück.
Gib wahr, wenn nicht war_eof oder die Länge von Eingabe_Puffer ungleich 0 ist oder Gepufferter_Buchstabe als Zahl ungleich 0 ist, zurück.
Und kann so benutzt werden:
"<!k>ein Buchstabe vorhanden ist"
13 changes: 7 additions & 6 deletions lib/stdlib/Duden/HashTabelle.ddp
Original file line number Diff line number Diff line change
Expand Up @@ -43,17 +43,17 @@ Und kann so benutzt werden:
"einem Grabstein"

Die Funktion Ist_Leerer_Eintrag mit dem Parameter e vom Typ Eintrag Referenz, gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn art von e gleich 0 ist zurück.
Gib wahr, wenn art von e gleich 0 ist, zurück.
Und kann so benutzt werden:
"<e> ein leerer Eintrag ist"

Die Funktion Ist_Grabstein mit dem Parameter e vom Typ Eintrag Referenz, gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn art von e gleich 1 ist zurück.
Gib wahr, wenn art von e gleich 1 ist, zurück.
Und kann so benutzt werden:
"<e> ein Grabstein ist"

Die Funktion Ist_Leer_Oder_Grabstein mit dem Parameter e vom Typ Eintrag Referenz, gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn art von e gleich 0 ist oder art von e gleich 1 ist zurück.
Gib wahr, wenn art von e gleich 0 ist oder art von e gleich 1 ist, zurück.
Und kann so benutzt werden:
"<e> <!nicht> leer oder ein Grabstein ist"

Expand Down Expand Up @@ -140,7 +140,7 @@ Und kann so benutzt werden:
"Passe die Kapazität von <tabelle> auf <neue_kapazität> an"

Die Funktion Ist_Neuer_Schlüssel_Index mit den Parametern index und tabelle vom Typ Zahl und HashTabelle Referenz, gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn (einträge von tabelle an der Stelle index) ein leerer Eintrag ist zurück.
Gib wahr, wenn (einträge von tabelle an der Stelle index) ein leerer Eintrag ist, zurück.
Und kann so benutzt werden:
"<index> für einen neuen Schlüssel in <tabelle> steht"

Expand Down Expand Up @@ -173,9 +173,10 @@ Und überlädt den "an der Stelle" Operator.

Die öffentliche Funktion Tabelle_Hat_Schlüssel mit den Parametern tabelle und schlüssel vom Typ HashTabelle Referenz und Text, gibt einen Wahrheitswert zurück, macht:
Die Zahl eintrag_index ist der Index für schlüssel in tabelle.
Gib falsch, wenn (einträge von tabelle an der Stelle eintrag_index) leer oder ein Grabstein ist zurück.
Gib falsch, wenn (einträge von tabelle an der Stelle eintrag_index) leer oder ein Grabstein ist, zurück.
Und kann so benutzt werden:
"<schlüssel> <!nicht> in <tabelle> enthalten ist"
"<schlüssel> <!nicht> in <tabelle> enthalten ist",
"<tabelle> <schlüssel> <!nicht> enthält"

Die öffentliche Funktion Tabellen_Wert_Löschen mit den Parametern tabelle und schlüssel vom Typ HashTabelle Referenz und Text, gibt eine Variable zurück, macht:
Die Zahl eintrag_index ist der Index für schlüssel in tabelle.
Expand Down
72 changes: 42 additions & 30 deletions lib/stdlib/Duden/Listen.ddp
Original file line number Diff line number Diff line change
Expand Up @@ -131,25 +131,27 @@ Und kann so benutzt werden:
Gibt zurück ob die Zahl in der Liste vorhanden ist.
]
Die öffentliche Funktion Enthält_Zahl mit den Parametern liste und elm vom Typ Zahlen Liste und Zahl, gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn liste elm enthält zurück.
Gib wahr, wenn liste elm enthält, zurück.
Und kann so benutzt werden:
"<liste> <elm> <!nicht> enthält"

[
Gibt zurück ob die Zahlen Liste leer ist.
]
Die öffentliche Funktion Ist_Leer_Zahl_Ref mit dem Parameter liste vom Typ Zahlen Listen Referenz, gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn die Länge von liste gleich 0 ist zurück.
Gib wahr, wenn die Länge von liste gleich 0 ist, zurück.
Und kann so benutzt werden:
"<liste> <!nicht> leer ist"
"<liste> <!nicht> leer ist",
"<liste> <!nicht> leer sind"

[
Gibt zurück ob die Zahlen Liste leer ist.
]
Die öffentliche Funktion Ist_Leer_Zahl mit dem Parameter liste vom Typ Zahlen Liste, gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn liste leer ist zurück.
Gib wahr, wenn liste leer ist, zurück.
Und kann so benutzt werden:
"<liste> <!nicht> leer ist"
"<liste> <!nicht> leer ist",
"<liste> <!nicht> leer sind"

[
Gibt liste bis zum n. Element zurück.
Expand Down Expand Up @@ -397,22 +399,24 @@ Und kann so benutzt werden:
Gibt zurück ob die Kommazahl in der Liste vorhanden ist.
]
Die öffentliche Funktion Enthält_Kommazahl mit den Parametern liste und elm vom Typ Kommazahlen Liste und Kommazahl, gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn liste elm enthält zurück.
Gib wahr, wenn liste elm enthält, zurück.
Und kann so benutzt werden:
"<liste> <elm> <!nicht> enthält"

Die öffentliche Funktion Ist_Leer_Kommazahl_Ref mit dem Parameter liste vom Typ Kommazahlen Listen Referenz, gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn die Länge von liste gleich 0 ist zurück.
Gib wahr, wenn die Länge von liste gleich 0 ist, zurück.
Und kann so benutzt werden:
"<liste> <!nicht> leer ist"
"<liste> <!nicht> leer ist",
"<liste> <!nicht> leer sind"

[
Gibt zurück ob die Kommazahlen Liste leer ist.
]
Die öffentliche Funktion Ist_Leer_Kommazahl mit dem Parameter liste vom Typ Kommazahlen Liste, gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn liste leer ist zurück.
Gib wahr, wenn liste leer ist, zurück.
Und kann so benutzt werden:
"<liste> <!nicht> leer ist"
"<liste> <!nicht> leer ist",
"<liste> <!nicht> leer sind"

[
Gibt liste bis zum n. Element zurück.
Expand Down Expand Up @@ -662,25 +666,27 @@ Und kann so benutzt werden:
Gibt zurück ob der Wahrheitswert in der Liste vorhanden ist.
]
Die öffentliche Funktion Enthält_Wahrheitswert mit den Parametern liste und elm vom Typ Wahrheitswert Liste und Wahrheitswert, gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn liste elm enthält zurück.
Gib wahr, wenn liste elm enthält, zurück.
Und kann so benutzt werden:
"<liste> <elm> <!nicht> enthält"

[
Gibt zurück ob die Wahrheitswert Liste leer ist.
]
Die öffentliche Funktion Ist_Leer_Wahrheitswert_Ref mit dem Parameter liste vom Typ Wahrheitswert Listen Referenz, gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn die Länge von liste gleich 0 ist zurück.
Gib wahr, wenn die Länge von liste gleich 0 ist, zurück.
Und kann so benutzt werden:
"<liste> <!nicht> leer ist"
"<liste> <!nicht> leer ist",
"<liste> <!nicht> leer sind"

[
Gibt zurück ob die Wahrheitswert Liste leer ist.
]
Die öffentliche Funktion Ist_Leer_Wahrheitswert mit dem Parameter liste vom Typ Wahrheitswert Liste, gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn liste leer ist zurück.
Gib wahr, wenn liste leer ist, zurück.
Und kann so benutzt werden:
"<liste> <!nicht> leer ist"
"<liste> <!nicht> leer ist",
"<liste> <!nicht> leer sind"

[
Gibt liste bis zum n. Element zurück.
Expand Down Expand Up @@ -858,25 +864,27 @@ Und kann so benutzt werden:
Gibt zurück ob der Buchstabe in der Liste vorhanden ist.
]
Die öffentliche Funktion Enthält_Buchstabe mit den Parametern liste und elm vom Typ Buchstaben Liste und Buchstabe, gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn liste elm enthält zurück.
Gib wahr, wenn liste elm enthält, zurück.
Und kann so benutzt werden:
"<liste> <elm> <!nicht> enthält"

[
Gibt zurück ob die Buchstaben Liste leer ist.
]
Die öffentliche Funktion Ist_Leer_Buchstabe_Ref mit dem Parameter liste vom Typ Buchstaben Listen Referenz, gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn die Länge von liste gleich 0 ist zurück.
Gib wahr, wenn die Länge von liste gleich 0 ist, zurück.
Und kann so benutzt werden:
"<liste> <!nicht> leer ist"
"<liste> <!nicht> leer ist",
"<liste> <!nicht> leer sind"

[
Gibt zurück ob die Buchstaben Liste leer ist.
]
Die öffentliche Funktion Ist_Leer_Buchstabe mit dem Parameter liste vom Typ Buchstaben Liste, gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn liste leer ist zurück.
Gib wahr, wenn liste leer ist, zurück.
Und kann so benutzt werden:
"<liste> <!nicht> leer ist"
"<liste> <!nicht> leer ist",
"<liste> <!nicht> leer sind"

[
Gibt liste bis zum n. Element zurück.
Expand Down Expand Up @@ -1073,24 +1081,26 @@ Und kann so benutzt werden:
Gibt zurück ob der Text in der Liste vorhanden ist.
]
Die öffentliche Funktion Enthält_Text mit den Parametern liste und elm vom Typ Text Liste und Text, gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn liste elm enthält zurück.
Gib wahr, wenn liste elm enthält, zurück.
Und kann so benutzt werden:
"<liste> <elm> <!nicht> enthält"
[
Gibt zurück ob die Text Liste leer ist.
]
Die öffentliche Funktion Ist_Leer_Text_Ref mit dem Parameter liste vom Typ Text Listen Referenz, gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn die Länge von liste gleich 0 ist zurück.
Gib wahr, wenn die Länge von liste gleich 0 ist, zurück.
Und kann so benutzt werden:
"<liste> <!nicht> leer ist"
"<liste> <!nicht> leer ist",
"<liste> <!nicht> leer sind"

[
Gibt zurück ob die Text Liste leer ist.
]
Die öffentliche Funktion Ist_Leer_Text mit dem Parameter liste vom Typ Text Liste, gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn liste leer ist zurück.
Gib wahr, wenn liste leer ist, zurück.
Und kann so benutzt werden:
"<liste> <!nicht> leer ist"
"<liste> <!nicht> leer ist",
"<liste> <!nicht> leer sind"

[
Gibt liste bis zum n. Element zurück.
Expand Down Expand Up @@ -1368,25 +1378,27 @@ Und kann so benutzt werden:
Gibt zurück ob die Variable in der Liste vorhanden ist.
]
Die öffentliche Funktion Enthält_Variable mit den Parametern liste und elm vom Typ Variablen Liste und Variable, gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn liste elm enthält zurück.
Gib wahr, wenn liste elm enthält, zurück.
Und kann so benutzt werden:
"<liste> <elm> <!nicht> enthält"

[
Gibt zurück ob die Variablen Liste leer ist.
]
Die öffentliche Funktion Ist_Leer_Variable_Ref mit dem Parameter liste vom Typ Variablen Listen Referenz, gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn die Länge von liste gleich 0 ist zurück.
Gib wahr, wenn die Länge von liste gleich 0 ist, zurück.
Und kann so benutzt werden:
"<liste> <!nicht> leer ist"
"<liste> <!nicht> leer ist",
"<liste> <!nicht> leer sind"

[
Gibt zurück ob die Variablen Liste leer ist.
]
Die öffentliche Funktion Ist_Leer_Variable mit dem Parameter liste vom Typ Variablen Liste, gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn liste leer ist zurück.
Gib wahr, wenn liste leer ist, zurück.
Und kann so benutzt werden:
"<liste> <!nicht> leer ist"
"<liste> <!nicht> leer ist",
"<liste> <!nicht> leer sind"

[
Gibt liste bis zum n. Element zurück.
Expand Down
2 changes: 1 addition & 1 deletion lib/stdlib/Duden/Mathe.ddp
Original file line number Diff line number Diff line change
Expand Up @@ -422,7 +422,7 @@ Und kann so benutzt werden:
Auch: Ob divident modulo divisor = 0 ist.
]
Die öffentliche Funktion Ist_Teilbar mit den Parametern dividend und divisor vom Typ Zahl und Zahl, gibt einen Wahrheitswert zurück, macht:
Gib wahr, wenn dividend modulo divisor gleich 0 ist zurück.
Gib wahr, wenn dividend modulo divisor gleich 0 ist, zurück.
Und kann so benutzt werden:
"<dividend> <!nicht> durch <divisor> teilbar ist"

Expand Down
4 changes: 2 additions & 2 deletions lib/stdlib/Duden/Pfade.ddp
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ Und kann so benutzt werden:
]
Die öffentliche Funktion UNIX_Ist_Absolut mit dem Parameter t vom Typ Text, gibt einen Wahrheitswert zurück, macht:
Wenn t leer ist, gib falsch zurück.
Gib wahr, wenn (t an der Stelle 1) gleich '/' ist zurück.
Gib wahr, wenn (t an der Stelle 1) gleich '/' ist, zurück.
Und kann so benutzt werden:
"<t> <!k>ein absoluter UNIX Pfad ist"

Expand Down Expand Up @@ -245,7 +245,7 @@ Und kann so benutzt werden:
Die öffentliche Funktion Windows_Ist_Absolut mit dem Parameter t vom Typ Text, gibt einen Wahrheitswert zurück, macht:
Wenn t gleich "" ist, gib falsch zurück.
Wenn t an der Stelle 1 gleich '\\' ist, gib wahr zurück. [ "\Users\admin\" ]
Gib wahr, wenn die Länge von t größer als, oder 2 ist und (t an der Stelle 1) ein lateinischer Buchstabe ist und t an der Stelle 2 gleich ':' ist zurück. [ "C:\Users\admin\" ]
Gib wahr, wenn die Länge von t größer als, oder 2 ist und (t an der Stelle 1) ein lateinischer Buchstabe ist und t an der Stelle 2 gleich ':' ist, zurück. [ "C:\Users\admin\" ]
Und kann so benutzt werden:
"<t> <!k>ein absoluter Windows Pfad ist"

Expand Down
Loading

0 comments on commit 6557544

Please sign in to comment.