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.11.2.
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
Umkehrung, liefert Grad
die Länge von x
Zeichen, Einträge oder Tabellengröße
Kleinbuchstaben von t · Großbuchstaben von t
Schreibweise ändern
Abgerundet / Aufgerundet / Gerundet von x
Ganze Zahlen (kaufmännisch)
Gerundet von x auf n Stellen
Zahl mit n Nachkommastellen
Formatiert von x auf n Stellen
Text mit Komma: "3,14"
Rechtsbündig von x auf n Zeichen · Linksbündig
Füllt mit Leerzeichen auf — für Tabellen
Zahlenwert von t
Text → Zahl, versteht das Komma
Zufallszahl von a bis b
Grenzen inklusive
die aktuelle Stunde · Minute · Sekunde
Uhr des Rechners, je Lauf einmal abgelesen
der aktuelle Tag · Monat · das aktuelle Jahr
Datum
Vergleichen und Verknüpfen
a gleich b · a nicht gleich b
Gleichheit
a größer als b · a kleiner als b
Echter Vergleich
a mindestens b · a höchstens b
Mit Gleichheit
a durch n teilbar · a nicht durch n teilbar
Teilbarkeit
L enthält Wert · Text enthält Stück
Enthaltensein (auch Tabellenschlüssel)
x eine Zahl · x keine Zahl
Typprüfung
x ein Text · x eine Liste · x eine Tabelle
Typprüfung
und · oder · nicht
und bindet vor oder
( … )
Klammern, auch in Bedingungen
Ablauf
Wenn … : … Sonst wenn … : … Sonst: … Ende.
Bedingung, Blockform
Wenn …, satz. · Sonst satz.
Kurzform, genau ein Satz
Wiederhole n Mal: … Ende.
Feste Anzahl
Wiederhole solange …: … Ende.
Bedingte Schleife
Zähle von a bis b mit i: … Ende.
Aufwärts; Start > Ziel läuft nie
Zähle von a bis b rückwärts mit i:
Abwärts (auch abwärts)
Zähle von a bis b in Schritten von n mit i:
Schrittweite
Für jedes Element in Liste: … Ende.
Liste, Text oder Tabellenschlüssel — jeden, jede und jedes sind gleichwertig, nimm das passende
Höre auf. · Mach weiter.
Abbrechen, überspringen
Zeichnen
Gehe n Schritte vor. · zurück.
Stift bewegen, dabei malen (bei eins auch Schritt)
fester Rahmen statt mitwanderndem Ausschnitt, 20 bis 4000 je Seite
Beschrifte "Wien".
schreibt an der Stelle des Stifts; mit 20 setzt die Größe (4 bis 400)
Lösche die Zeichnung.
Leert die Fläche, der Stift bleibt stehen
Warte n Sekunden.
Pause, 0 bis 60 s; zählt nicht als Rechenzeit
Wiederhole dieses Programm jede Sekunde.
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
Setze Element n von L auf x.
Stelle beschreiben — auch das erste / das letzte Element
Erhöhe Element n von L um 1.
ebenso Verringere, Verdopple, Halbiere
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
Setze Wert für k in T auf x.
legt den Eintrag an, wenn es ihn nicht gibt; Erhöhe … um 1. setzt ihn voraus
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.11.2
Kommazahlen stehen im Quelltext mit Punkt (3.14), weil das Komma dort Satzteile trennt. In Antworten auf Frage ist das Komma erlaubt, ebenso in Zahlenwert von "3,5". Ausgegeben wird deutsch.
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.