Toy YaP – Küchenschabe / Sudo Null IT-News

Hallo alle.

Im Schul- und Aufbaustudiengang Informatik gibt es eine Unterrichtssprache – Cucaracha. Ziemlich gut, um Kindern das Programmieren beizubringen. Einfache, klare, visuelle Ergebnisse ab der ersten Zeile.

Die Autoren des Kurses haben lediglich eine exe-Datei für Windows erstellt. Als der jüngste Sohn anfing zu fordern: “Papa bringt mir das Programmieren bei”, traf er eine willensstarke Entscheidung – ich werde meine eigene Umsetzung vornehmen. Und tat.

Was ist es überhaupt?

Es gibt ein rechteckiges Feld. Fehler und Briefe. Sie müssen Programme schreiben, damit der Fehler die Buchstaben richtig bewegt.

Einfache Befehle werden unterstützt – AUF, AB, RECHTS, LINKS und ihre Gruppierung mit {}.

Nach jeder Aktion ist das Ergebnis bekannt – welcher Buchstabe vom Fehler verschoben wurde.

Es gibt Schleifen – REPEAT x , WHILE y und Bedingung IF z THEN … ELSE …

Und sogar Prozeduren sind proc_name … END

Daher lernt das Kind im Lernprozess ziemlich komplexe Konzepte, einschließlich Rekursion und prozeduraler Programmierung.

Aufstellen

Das Feld funktioniert ganz offensichtlich – ein Array von Zeichen und ein Sonderzeichen für einen Fehler. Prozeduren, die den Fehler verschieben, indem sie den Status ändern. Wir erinnern uns an den letzten Brief, der geschoben wurde. Es bleibt noch, das Laden / Entladen zu einer Zeile wie dieser hinzuzufügen:

A_A__ _1_1_ _____ ____~

sowie einen Change-Callback nachziehen und fertig ist eine hübsche Komponente.

Wie macht man einen Dolmetscher?

Es stellte sich heraus, dass es nicht so schwierig ist, einen Dolmetscher zu machen. Wir müssen verstehen, was ist Syntax und Grammatiklesen Sie ein paar Beispiele und verwenden Sie fertige Bibliotheken.

Ich habe genommen Antlr – weil meine Hauptsprache Java ist und dort dieser Parser-Generator weithin bekannt ist. Als Ergebnis stellte sich heraus eine solche Grammatik

Grammatik @header { Paket en.nizhikov.cockroach.antlr; } prog: exprs EOF; exprs : expr+ ; expr : Aussage | wiederhole | während | wenn | proc | ID | ZEILE_KOMMENTAR ; Aussage : UP | UNTEN | LINKS | RECHTS | BLEIBEN | Gruppe; wiederholen: REPEAT NUM expr; while : WHILE Bedingung expr ; Gruppe : OPEN_BRACKET exprs CLOSE_BRACKET ; if : IF-Bedingung THEN-Anweisung (ELSE-Anweisung)? ; proc: DIESE ID exprs END; Bedingung: NICHT? ID | NICHT? LEER | NICHT? NUMMER ; Ich tat ; LINE_COMMENT : ‘//’~[\n\r]* -> überspringen; NACH OBEN NACH OBEN’; RUNTER RUNTER’; LINKS LINKS’; RICHTIG RICHTIG’; BLEIBEN: ‘STAND’; NICHT NICHT’; LEER: ‘LEER’; ZAHL: ‘ZAHL’; WIEDERHOLEN: ‘WIEDERHOLEN’; WÄHREND: ‘WÄHREND’; ZEICHEN: ‘BUCHSTABE’; OPEN_BRACKET: ‘{‘; CLOSE_BRACKET: ‘}’; WENN WENN’; DANN: ‘DAS’; SONST: ‘SONST’; DAS DAS’; ENDE: ‘ENDE’; ID: BUCHSTABE (BUCHSTABE | ZIFFER)*; BUCHSTABE: [a-zA-Zа-яА-Я]; NUM: ZIFFER+; ZIFFER: [0-9]; PLATZ: [ \r\n\t]+ -> überspringen;

Die Grammatik legt die Regeln für den Parser fest, um aus dem Text einen Syntaxbaum zu bilden. Ein Beispiel im Bild.

Entschuldigung, ich war zu faul, einen Baum für ein Thema PL zu machenEntschuldigung, ich war zu faul, einen Baum für ein Thema PL zu machen

Der Interpreter muss diesen Baum nur auf die richtige Weise durchlaufen und die erforderlichen Aktionen ausführen. Handlungen folgen aus ihrer Bedeutung:

  • Definition des Verfahrens – Merken Sie sich den Namen des Verfahrens in einer speziellen Karte. Schlüssel – Name, Wert – Unterstruktur des Befehls.

  • Prozeduraufruf (ID-Token) – Suchen Sie nach der Definition der Prozedur und rufen Sie den entsprechenden Teilbaum von Befehlen auf.

  • REPEAT x loop – führt den Teilbaum x mal aus.

  • While-Schleife y – Prüfe die Bedingung y und führe den Teilbaum aus, während er läuft.

  • IF z THEN … ELSE … – Prüfe die Bedingung z und führe den einen oder anderen Teilbaum aus.

  • Reguläre Befehle – ändern den Zustand des Feldes.

Schnittstelle

Das letzte Mal, als ich eine Benutzeroberfläche erstellt habe, war in den Tagen, als jquery und extjs in Mode waren :), also war das Googeln, wie die Benutzeroberfläche jetzt gemacht wird, ein wenig oh^W überrascht von der Fülle an Möglichkeiten. Als Ergebnis habe ich aus dem Tutorial zusammengestellt, das als erstes eine funktionierende einseitige Anwendung verdient hat, und sie mit Hilfe von dem, was ich weiß, heruntergespült – Bootstrap und jquery.

Ich wollte eigentlich Syntax-Highlighting machen, habe aber gegoogelt Komponente unterstützt einen anderen Parser-Generator. Kein Problem – Grammatik aufschreiben Eine etwas andere Syntax ist so einfach wie Birnenschälen.

Trotz der Tatsache, dass CodeMirror eine ziemlich ausführliche Dokumentation hat, war es nicht so einfach, die API zu verstehen. Vielleicht habe ich die Gewohnheit verloren, die js-Komponente zu dokumentieren. Aber am Ende funktionieren die Syntaxhervorhebung und der aktuelle Befehl während des Debuggens und Startens.

Speichern von Dateien, die über localStorage erstellt wurden – bequem.

Schwierigkeiten

Die erste Implementierung des Interpreters ist in Java geschrieben und funktioniert über die Konsole. Das Stepping (Debugging) ist einfach, indem Sie auf die Konsoleneingabe warten.

Aber in Javascript gibt es keine einfache Möglichkeit, die Ausführung an einer zufälligen Stelle zu stoppen. Daher musste ich mich verwirren lassen und die Interpretation der Anwendung auf Versprechungen wirken lassen. Der cucaracha-Befehl wird ausgeführt, wenn Promise.resolve ausgeführt wird.

Veröffentlichung

Kurz gesagt – github ist großartig)

Es stellte sich heraus, dass github eine kostenlose, automatisierte und praktische Funktion zum Veröffentlichen einer Anwendung auf einer Seite hat. genannt Github-Seiten. Genial bequem. Sie stellen Ihre Anwendung zusammen, geben Ihren Vater an, drücken den Knopf und voila – App läuft.

Nun, das ist alles, was das Lieblingsprojekt bereit ist und es scheint zu funktionieren. Das Kind fing zweimal mit dem Programmieren an und hatte viel Spaß. Ich bin auch zufrieden und habe interessanten Code geschrieben.

Quellen – https://github.com/nizhikov/cockroach

Ich habe auch einen Kanal Reden und Verknüpfungen zu interessanten Artikeln aus der Welt der DBMS-Entwicklung.

Similar Posts

Leave a Reply

Your email address will not be published.