Alles auf einen Blick: sämtliche Satzmuster, die reservierten Wörter, der Aufruf des Interpreters samt Prüfmodus und Formatierer, die Sicherheitsvorkehrungen und die bekannten Grenzen. Stand: Version 0.2.0.
Alle Satzmuster
Nachschlagewerk
Ausgabe und Eingabe
Zeige Wert.
Gibt eine Zeile aus
Zeige a und b.
Hängt Teile direkt aneinander
Frage "…" und merke die Antwort als N.
Liest eine Eingabe ein
Variablen
Merke Wert als N.
Anlegen oder überschreiben
Merke für immer Wert als N.
Konstante
Setze N auf Wert.
Ändern, Name muss existieren
Erhöhe N um n. · Verringere N um n.
Ohne um um 1
Verdopple N. · Halbiere N.
Mal zwei, geteilt durch zwei
Verbinde a und b zu N.
Zu einem Text zusammenhängen
Kopiere L als N.
Echte Kopie einer Liste oder Tabelle
Rechnen
a plus b · a minus b · a mal b
Grundrechenarten
a geteilt durch b · a hoch b
Teilen, Potenz
der Rest von a geteilt durch b
Divisionsrest
-5 · minus x
Negative Zahl, Vorzeichen
die Wurzel von x · der Betrag von x
Wurzel, Betrag
der Sinus von g · Kosinus · Tangens
Winkel in Grad; Cosinus geht auch
der Arkussinus von x · Arkuskosinus · Arkustangens
Kurzform: ganzes Programm im Takt neu (auch alle n Sekunden)
Listen
Erstelle eine Liste namens L.
Leere Liste
Erstelle eine Liste namens L mit a und b.
Gefüllte Liste
Füge Wert zur L hinzu.
Hinten anhängen
Entferne Wert aus L.
Wert herausnehmen
Entferne Element n aus L.
n-ten Eintrag herausnehmen
Entferne das erste / das letzte Element aus L.
Vorne bzw. hinten wegnehmen
Sortiere L. · Sortiere L absteigend.
Sortieren
das erste / das letzte Element von L
Randeinträge
Element n von L
Gezählt ab 1
Elemente a bis b von L
Ausschnitt
ein zufälliges Element von L
Zufälliger Eintrag
Tabellen
Erstelle eine Tabelle namens T.
Leere Tabelle
Erstelle eine Tabelle namens T mit "a" als 1.
Gefüllte Tabelle
Trage Schlüssel mit Wert in T ein.
Eintragen oder überschreiben
Wert für Schlüssel in T
Wert lesen
Entferne Schlüssel aus T.
Eintrag löschen
Texte
Teile t bei "…" zu L.
Text zerlegen
Verkettet von L mit ", "
Liste zu Text verbinden
Zeichen a bis b von t
Ausschnitt, ab 1 gezählt
Ersetze "alt" durch "neu" in N.
Im Text unter N ersetzen
Dinge
Ein X hat einen A und ein B.
Ding beschreiben
Erschaffe einen X mit A … und B … als N.
Ding erschaffen
den A von N
Feld lesen
Setze den A von N auf Wert.
Feld ändern
Aufgaben, Fehler, Dateien
Definiere Aufgabe N mit a und b: … Ende.
Definition (von = mit)
Gib Wert zurück.
Ergebnis liefern
Führe N mit x aus.
Aufruf als Befehl
Versuche: … Bei Fehler: … Ende.
Fehlermeldung ist gefüllt
Stelle sicher, dass … .
Zusicherung, bricht sonst ab
Lies die Datei "…" als N.
Datei lesen
Schreibe "…" in die Datei "…".
Datei schreiben
Anmerkung: …
Kommentar bis Zeilenende
Reservierte Wörter
Taugen nicht als Namen
als auf aus bei bis dass durch
ende enthält falsch geteilt gleich größer hat
hinzu hoch höchstens in ist jede jeden
jedes keine kleiner mal mindestens minus mit
nicht oder plus sind solange sonst teilbar
um und von wahr wenn zu zurück
Umlaute zählen doppelt
Da ä ö ü ß wie ae oe ue ss behandelt werden, ist mit größer auch groesser belegt. Alltagswörter wie Zahl, Text oder Wert sind dagegen bewusst nicht reserviert — sie dürfen Namen sein. Eine Variable darf allerdings nicht heißen wie eine Aufgabe.
Interpreter aufrufen
Reines Python 3, ab Version 3.10, ohne weitere Abhängigkeiten
Prüft ohne auszuführen: Tippfehler mit „Meintest du …?“, Endlosschleifen, unerreichbarer Code, Aufgaben ohne Rückgabe und mehr.
--streng
Mit --pruefe: auch Hinweise und Warnungen gelten als Fehler.
--formatiere [--ersetzen]
Rückt das Programm sauber ein, ohne den Inhalt zu ändern.
--nach-python
Übersetzt das Programm in lesbares Python — die Brücke zu einer verbreiteten Sprache.
--tokens · --ast
Zeigt die gelesenen Wörter beziehungsweise den Syntaxbaum.
--limit SCHRITTE
Abbruch nach so vielen Schritten. Nicht mit Versuche abfangbar.
--zeit SEKUNDEN
Abbruch nach so vielen Sekunden.
--streng-grenzen
Knappe Grenzen für Zeit, Speicher und Größe — für fremde Programme.
--seed N
Macht Zufallszahl reproduzierbar.
--bild DATEI.SVG
Speichert die Zeichnung des Programms als SVG-Bild.
--ohne-dateien
Sperrt jeden Dateizugriff.
--dateien-ordner ORDNER
Erlaubt Dateien nur in diesem Ordner.
--dateien-ueberall
Hebt den Ordnerschutz auf — nur für eigene Programme.
Der Interpreter besteht aus den Stufen Lexer → Satzmuster-Parser → Syntaxbaum → Interpreter, dazu Prüfer, Formatierer, Konsole und die Web-Schnittstelle, über die auch der Spielplatz läuft.
Sicherheitsvorkehrungen
Was der Interpreter absichert — und was nicht
Gefahr
Maßnahme
Endlosschleife
--limit (Schritte) und --zeit (Sekunden); beides nicht mit Versuche abfangbar
Speicherfresser
Grenzen für Text, Liste, Tabelle, Zahlengröße, Ausgabe, Eingabezeile und Programmgröße
Absturz durch Verschachtelung
Tiefengrenze im Parser, Rekursionsgrenze für Aufgaben — kein Python-Traceback dringt durch
Dateien
Standard: nur der Arbeitsordner und darunter — kein .., keine absoluten Pfade, kein Ausbruch über Verknüpfungen
Code-Einschleusung
Kein eval, kein exec, kein Nachladen, kein Zugriff auf Python-Objekte
Netzwerk, Prozesse
Gibt es in der Sprache nicht
Was nicht abgesichert ist
Der Interpreter läuft im selben Python-Prozess: ein Fehler im Interpreter selbst könnte Grenzen umgehen.
Die Zeitgrenze wird nur zwischen Schritten geprüft — eine einzelne, sehr teure Rechnung läuft zu Ende, begrenzt durch die Zahlengröße.
--dateien-ueberall hebt den Ordnerschutz bewusst auf.
Keine Prüfung durch Dritte, kein Fuzzing über die mitgelieferten Tests hinaus.
Ehrlich gesagt
Klarsatz ist ein Lern- und Hobbyprojekt. Der Interpreter ist so gebaut, dass ein Programm möglichst wenig anrichten kann — er ist aber keine geprüfte Sandbox. Fremde, nicht vertrauenswürdige Programme gehören zusätzlich in einen Container oder unter einen Benutzer mit wenigen Rechten. Der Spielplatz dieser Seite geht deshalb den anderen Weg: Er führt gar nichts auf dem Server aus, sondern alles im Browser des Besuchers.
Bekannte Grenzen
Stand Version 0.2.0
Kein Dezimalkomma in Zahleneingaben — das Komma trennt Satzteile. Die Ausgabe ist deutsch, und Zahlenwert von "3,5" versteht das Komma.
Die Kurzform von Wenn …, … führt genau einen Satz aus; für mehrere Befehle die Blockform nehmen. In Sonst-Ketten bindet ein Sonst an das nächstliegende passende Wenn.
Argumente von Aufgaben sind einfache Werte: Quadrat von x plus 1 bedeutet (Quadrat von x) plus 1. --pruefe weist darauf hin.
Beim Anzeigen eines Dings steht der Feldname so, wie er in der Definition stand (Namen: Rocco).
Zähle von 5 bis 1 läuft nie — abwärts zählt man mit rückwärts. In Version 0.1 war das noch anders.
Der Prüfer arbeitet ohne Datenfluss: kein Typwissen, „benutzt vor angelegt“ nur nach Zeilenreihenfolge.