WikiDer > Programmiersprache l33t
l33t ist ein esoterische Programmiersprache von Stephen McGreal und Alex Mole entwickelt. Das ist vergleichbar mit Gehirnfick. Ziel war es, eine Sprache zu schaffen, mit der Sie den Internet-Dialekt verwenden können leet programmieren kann, eher amüsant als ernst. Es ist absichtlich selbstmodifizierend und Sie können eine Verbindung über verbinding herstellen Steckdosen. Theoretisch kannst du das machen hacken oder ein Virus Schreiben, wenn auch in minimalistischen Sprachen, das ist ein heidnischer Beruf.
Überblick
Quellcode, den Sie eingeben l33t sp34k, und der Dolmetscher übersetzt jedes Wort (durch Leerzeichen oder 'newline' getrennte Zeichenfolge) wie folgt in eine Zahl: Der Wert eines Wortes wird durch Addition vorhandener Zahlen bestimmt, z.B. l33t = 3 3 = 6. Alle anderen Zeichen lassen ihn unberücksichtigt. Wörter ohne Zahlen oder mit Nullen haben den Wert 0. Sie können l33t nur mit Zahlen schreiben, aber manche Interpreten bestrafen Sie gnadenlos, wenn Sie sich diese unhöfliche Handlung erlauben. Es versteht sich von selbst, dass l33T die Groß-/Kleinschreibung nicht berücksichtigt.
Die Sprache belegt einen 64. Speicherblock K B und zwei Register (eines für den Speicher und eines für den Befehl). Der l33t-Interpreter wandelt alle Wörter im Quellprogramm in eine Reihe um Anleitung und ordne sie ab Byte 0 im Speicherblock an. Das Befehlsregister beginnt bei Byte 0 und führt dort die Anweisung aus. Jeder andere Befehl als END ändert das Befehlsregister, wie unten gezeigt. Das Speicherregister beginnt mit dem ersten Byte nach den Anweisungen. Die Erinnerung geht auf unbestimmte Zeit weiter. Wenn das Speicherregister 64k überschreitet, beginnt es wieder bei 0 und umgekehrt. Das Befehlsregister verhält sich auch so.
Es ist erlaubt, das Speicherregister auf eine Adresse zu verweisen, die zuvor von Befehlen belegt war, und somit den Code selbstmodifizierend zu machen. Das Befehlsregister läuft nach oben oder unten, bis es auf ein vorhandenes oder dynamisch erzeugtes END stößt (siehe unten). Wenn nicht, wird das Programm fortgesetzt, bis der Strom ausfällt.
Anleitung
| Wert | Auftrag | Beschreibung |
|---|---|---|
| 0 | NOP | Macht nichts, außer Befehlsregister inkrementieren. |
| 1 | WRT | Schreibt den ASCII-Wert des Bytes unterhalb des Speicherregisters in die aktuelle Verbindung (siehe CON). Auftragsregister erhöhen. |
| 2 | RD | Liest ein Zeichen aus der aktuellen Verbindung (siehe CON) und schreibt in das Byte unterhalb des Speicherregisters. Auftragsregister erhöhen. |
| 3 | WENN | Erhöht das Befehlsregister auf den Befehl, der dem entsprechenden EIF folgt, wenn das Byte unter dem Speicherregister 0 ist. Wenn nicht 0, inkrementiert IF nur das Befehlsregister. |
| 4 | EIF | Dekrementiert das Befehlsregister um den Befehl, der dem entsprechenden IF folgt, wenn das Byte unter dem Speicherregister nicht 0 ist. Wenn es 0 ist, inkrementiert IF nur das Befehlsregister. |
| 5 | FWD | Erhöht das Speicherregister um (nächstes Wort 1) Bytes. Befehlsregister um 2 erhöhen. |
| 6 | BEHÄLTER | Verkleinert das Speicherregister um (nächstes Wort 1) Bytes. Befehlsregister um 2 erhöhen. |
| 7 | INC | Erhöht den Wert des Bytes unterhalb des Speicherregisters um (nächstes Wort 1). Befehlsregister um 2 erhöhen. |
| 8 | DEZ | Verringert den Wert des Bytes unterhalb des Speicherregisters um (nächstes Wort 1). Befehlsregister um 2 erhöhen. |
| 9 | KON | Liest die 6 Byte aus dem Speicherregister (die ersten 4 Byte geben eine IP in der Form 127.0.0.1 an und die letzten 2 Byte eine 16-Bit-Portnummer) und öffnet wenn möglich eine Verbindung. Im Fehlerfall kehrt l33t mit der Meldung zurück: "h0s7 5uXz0r5! c4N'7 c0Nn3<7 l0l0l0l0l l4m3R !!!". Wenn alle sechs Bytes 0 sind, fällt l33t auf den lokalen stdin und stdout (der Standardwert beim Starten eines l33t-Programms) zurück. Auftragsregister erhöhen. Verbindung oder keine Verbindung ist egal, das Speicherregister bleibt wo es war. Nur FWD und BAK werden das ändern. Sie können die Portnummer nach folgendem Schema ermitteln: Portnummer = (byte5 << 8) byte6 |
| 10 | ENDE | Schließen Sie alle offenen Verbindungen und beenden Sie das Programm. Ein Wert von 10 ermöglicht die Ausführung des Programms, wenn es ein Argument für die Befehle FWD, BAK, INC oder DEC ist. |
Beachten Sie, dass die Wörter für die Anweisungen (NOP, WRT usw.) nur nützliche Konventionen sind, um die Teile des l33t-Pseudocodes zu verdeutlichen. Das Einfügen von INC in Ihren Quellcode bewirkt nichts (Übersetzung in 0, NOP). Umgekehrt, wenn Sie „pH34r“ schreiben, passiert etwas (erzeugt 7, INC).
Macken
Zu beachtende Punkte:
- Jeder Befehl > 10 löst einen Fehler aus, aber das Programm wird fortgesetzt. Sie können, aber Sie sind ein bisschen lächerlich, wenn der Standard-Fehlerruf "j00 4r3 teh 5ux0r" auftaucht ... Wenn Werte > 10 als Argumente für FWD, BAK, INC oder DEC auftreten, tun sie es nicht.
- l33t interpretiert jede Verwendung von 3 und 4 als Klammern, selbst wenn sie als Daten gedacht sind! Obwohl "pH34r m3!" erwartet, dass das aktuelle Byte um 3 erhöht wird, springt ein weiterer EIF (wenn das aktuelle Byte unter dem Speicherregister nicht 0 ist) zurück zu „m3!“. Wenn das Speicherregister die passende Klammer nicht findet, sind die Ergebnisse unvorhersehbar: Sie laufen Gefahr, dass das Programm abstürzt und eine beleidigende Bemerkung über Ihre Bedeutungslosigkeit macht.
- Zahlen im Speicher sind ohne Vorzeichen, also zirkulär: 255 1 = 0 und 0 - 1 = 255. Interpreter sollten vorzugsweise, müssen es aber nicht, die Situation erfassen, in der Wörter im l33t-Quellcode die Zahl 255 verwenden und sich entsprechend überlappen . Es ist unwahrscheinlich, dass Sie darauf stoßen, außer mit Absicht.
Im Allgemeinen ist das Ergebnis nicht vorhersehbar.
- Die 64k-Grenze für den Speicher ist willkürlich, wurde jedoch aus Gründen der Portabilität und des Minimalismus gewählt. l33t-Interpreter können eine andere Speichergröße verwenden, aber 64 KB werden standardmäßig empfohlen. In jedem Fall Speicher- und Befehlsregister Datentypen in der Lage, jedes Byte des Speicherblocks zu adressieren.
Für 64k eine ganze Zahl größer oder gleich 0 (das sind 16 Bit).
Beispiele
ASCII-Tabelle
Das folgende Programm ist das erste Arbeitsprogramm, das jemals in l33t geschrieben wurde. Es läuft ewig und zeigt alle 255 ASCII-Zeichen an, während es wie eine weniger schmeichelhafte Aussage über aussieht Geeks:
ph34r mein l3et 5kIlZ!!!!!!nErDs 41n't cool 3v3ry1!!!y0u b1g g33kS r teh g33kY sux0rs!PHE4R! LOLOLOLOLOLOL!!!