Aus Das deutschsprachige Scratch-Wiki

Eine Programmiersprache besteht aus einer Reihe von Regeln und Funktionen, mit denen Benutzer Computer, Mobiltelefone, Tablets und weitere Geräte verwenden können. Programmiersprachen sollen es dem Menschen erleichtern, komplexe Anweisungen zu schreiben. Sie funktionieren ähnlich wie menschliche Sprachen: Sie haben explizite Grammatik und primitiven Wortschatz. Scratch ist eine ProgrammierspracheWikipedia.jpg.

Theorie

Eine Programmiersprache ist eine Sprache zum Schreiben von Anweisungen für eine Maschine. Eine Programmiersprache wird durch eine Grammatik definiert. Es gibt viele Programmierparadigmen, die sich auf verschiedene Designaspekte konzentrieren. Imperative Sprachen konzentrieren sich auf Befehle und das Ausführen von Aufgaben, deklarative Sprachen diktieren die Regeln und Bedingungen einer Aufgabe und spezifizieren nicht den Prozess ihrer Ausführung, und funktionale Sprachen betonen Funktionen, die den Status nicht ändern und garantiert immer den gleichen erzeugen Ausgabe für eine Eingabe. Sprachen können entworfen werden, um Paradigmen und Programmierweisen zu unterstützen. [1] Paradigmen sind:

  • Imperativ: Programme verwenden Anweisungen
  • Funktional: Programme verwenden Funktionen und vermeiden den Status
  • Deklarativ: Programme geben Regeln für Probleme an
  • Objektorientiert: Nachrichtenübertragung zwischen Objekten
  • Vorgehensweise: Programme sind in Unterprogramme unterteilt
  • Sprachen haben normalerweise verschiedene primitive Datentypen, die mit objektorientierter Programmierung erweitert werden können:
  • Zahlen, die als Zahlen analysiert werden
  • Einige Sprachen betrachten Ganzzahlen, Gleitkommazahlen und Doppelte als unterschiedliche Datentypen.
  • Zeichenfolgen, die als Text analysiert werden
  • Arrays, die Listen von Elementen sind
  • Objekte, die Wörterbücher von Schlüssel-Wert-Paaren sind.
  • Funktionen, bei denen es sich um Codeteile handelt, die mit Argumenten ausgeführt werden können.

Im Wesentlichen bietet eine Programmiersprache nur ein Framework, in dem eine Funktion mit Argumenten ausgeführt werden kann - der Rest kann umgangen werden. Normalerweise besteht die Grammatik einer Sprache aus "Aussagen", die entweder:

  • Zuweisungen: Binden eines Werts an einen Namen (Variable)
  • Prozeduraufrufe
  • Sonderformulare: Bestimmte Spezialverfahren, die nicht mit der Sprache selbst erstellt werden können, z. B. IF / ELSE. Die Eingaben in Sonderformulare werden nicht sofort ausgewertet.

Die Syntax einer Programmiersprache gibt Regeln für die Ausführung der oben genannten Schritte vor. Beispielsweise:

  • Zuordnungen:
    • Quietschen: var _ val
    • JavaScriptWikipedia.jpg: var = val
    • Schema: (SET! Var val)
  • Prozeduraufrufe:
    • Quietschen: obj proc: arg
    • JavaScript: proc (arg)
    • Schema: (proc arg)
  • Sonderformulare (falls in diesem Fall):
    • Quietschen: bool ifTrue: [etwas] ifFalse: [etwas].
    • JavaScript: if (bool) {etwas;} else {etwas;}
    • Schema: (wenn etwas etwas boolt)

Scratch vereinfacht die Programmierung erheblich, indem all dies in Blöcken versteckt wird: Alle Blöcke sind gleich, es gibt keine speziellen Formen. In der Realität sind bestimmte Bausteine ​​natürlich als Sonderfälle völlig anders programmiert. Beispielsweise benötigt der IF-Block eine spezielle Programmierung, um den Inhalt des C-Blocks auszuführen, und der WAIT UNTIL-Block benötigt eine spezielle Programmierung, um der Atomschleife zu entkommen. Die Zuordnung ist nur ein weiterer Block. Der Sonderformularblock REPEAT UNTIL wertet wiederholt seine boolesche Eingabe und dann seine Blockeingabe aus, bis die vorherige Eingabe als wahr ausgewertet wird. Dies steht im Gegensatz zu benutzerdefinierten Blöcken, deren Eingaben vor ihrer Ausführung ausgewertet werden.

Implementierungen

Programmiersprachen werden im Allgemeinen entweder interpretiert oder kompiliert, dh sie werden entweder direkt ausgeführt oder in eine andere Sprache übersetzt. Beispielsweise wird C kompiliert, während Python und JavaScript interpretiert werden. Java wird in Bytecode kompiliert, der von der Java Virtual Machine interpretiert wird.


Information icon.png Information: Java und JavaScript sind zwei völlig unterschiedliche Programmiersprachen mit unterschiedlichen Grammatiken, Semantiken, Erstellungen und Verwendungen.


Die Schritte eines Compilers können in das Front-End und das Back-End unterteilt werden. Das Frontend übersetzt die Ausgangssprache in eine Zwischendarstellung und das Backend eines Compilers übersetzt die Zwischendarstellung in die Zielsprache. Auf diese Weise können verschiedene Compiler erstellt werden, indem verschiedene Kombinationen von Frontends und Backends aufeinander abgestimmt werden. Sprachimplementierungen bestehen normalerweise aus folgenden Teilen:

Frontend

  • Ein Lexer: Dies konvertiert das Programm in Token.
  • Ein Parser: Hiermit werden die Token gemäß der kontextfreien Grammatik der Sprache analysiert und anschließend in einen Analysebaum konvertiert, der leicht interpretiert werden kann.
  • Ein semantischer Analysator: Dieser geht durch den Analysebaum und bestimmt die Bedeutung der Knoten.
  • Ein Zwischencodegenerator: Dies übersetzt den Analysebaum in eine Zwischendarstellung.

Backend

  • Ein Code-Optimierer: Dies verbessert das Programm.
  • Ein Interpreter oder Compiler: Der Interpreter führt das Programm aus und der Compiler generiert eine ausführbare Datei.

Der Lexer akzeptiert das Programm als Eingabe und tokenisiert es oder teilt es in Teilzeichenfolgen mit semantischer Bedeutung auf. Die Token können durch reguläre Ausdrücke definiert werden. Die Ausgabe des Lexers besteht aus zwei Teilen: den Lexemen, die die verschiedenen Teilzeichenfolgen des Programms darstellen, und den Token, die die Klassifikationen der Lexeme darstellen. Zum Beispiel ist der JavaScript-Code var x = 0; könnte in die folgenden Token unterteilt werden:

Lexeme Token
var var
x identifier
= assignment_operator
0 integer_literal
; semicolon

Der Parser analysiert die vom Lexer-Programm erzeugten Token und Lexeme und erstellt einen abstrakten Syntaxbaum (AST). Der Parser verwendet eine kontextfreie Grammatik, die Spezifikation der Syntax. In einer Grammatik werden Symbole, die als Nicht-Terminals bezeichnet werden, durch Produktionen, Folgen von Token und Nicht-Terminals definiert. Algorithmen wie LALR oder Earley können verwendet werden, und der Parser kann tabellengesteuert oder handgeschrieben sein. Parsing-Algorithmen werden in Top-Bottom-Parsing unterteilt, das mit dem Wurzelknoten beginnt und den Baum zu den Blättern erstellt, und Bottom-Up-Parsing, das mit den Token beginnt und bis zum Wurzelknoten funktioniert. Bottom-up-Analyse besteht aus Verschiebungen, bei denen der nächste Token auf den Analysestapel verschoben werden kann, und Reduktion, bei der Elemente auf dem Stapel einer Produktion entsprechen und durch diese ersetzt werden.[2]Lookahead-Token werden verwendet, wenn nicht entschieden wird, ob verschoben oder reduziert werden soll.[3] Nachdem der Analysebaum erstellt wurde, kann er zu einem abstrakten Syntaxbaum (AST) vereinfacht werden. Dann wird der Baum durchlaufen und seine Knoten werden gelesen. Hier kann der Compiler prüfen, ob alle Variablen deklariert sind und die Datentypen übereinstimmen. Anschließend wird eine untergeordnete Zwischendarstellung des Programms erstellt. GCC verwendet eine Sprache namens RTL.[4]

Scratch als Programmiersprache

Scratch ist eine blockbasierte imperative, ereignisgesteuerte, dynamisch typisierte und interpretierte Programmiersprache.

Tippen

Scratch wird dynamisch typisiert, was bedeutet, dass während der Programmausführung überprüft wird, ob die Datentypen übereinstimmen.[5] Die primitiven Datentypen von Scratch sind Zahlen, Zeichenfolgen und Boolesche Werte.

Sonderformen

Die speziellen Formulare von Scratch sind Blöcke, die nicht mit benutzerdefinierten Blöcken repliziert werden können. Diese Blöcke können ihre Eingaben neu bewerten. Beispielsweise bewertet die Wiederholungs-bis-Schleife ihre boolesche Eingabe vor jeder Iteration neu, um festzustellen, ob sich der Wert der Bedingung geändert hat.[6]

Implementierung

Scratch ist eine interpretierte Programmiersprache. Scratch 3.0 verwendet eine virtuelle Maschine, die einen abstrakten Syntaxbaum erstellt.[7]

Für Scratch relevante Programmiersprachen

Squeak

Hauptartikel: Smalltalk

Squeak wurde verwendet, um die 1.x-Serie von Scratch zu programmieren. Es ist eine einfache Sprache, die für den Menschen lesbar und prägnant ist. Eine einfache Einführung findet man im Squeak-Tutorial.

Adobe FlashWikipedia.jpg

Adobe Flash ist eine Programmiersuite von Adobe, mit der Scratch 2.0 erstellt wurde. Die Flash-Programmierung erfolgt in ActionScript, einer auf ECMAScript basierenden Sprache.

PythonWikipedia.jpg

Python ist eine einfach interpretierte Skriptsprache, die im Scratch 2.0-Backend (serverseitiger Code) verwendet wird. Die Django-Codierungsplattform wird auf einem Nginx-Server verwendet. [8] Die Foren laufen auf DjangoBBWikipedia.jpg, einer Python-Bibliothek. Python wird auch in vielen Scratch-Add-Ons verwendet, einschließlich Kurt.

PHPWikipedia.jpg

PHP ist eine Programmiersprache, die im serverseitigen Code (ScratchR) der Scratch-Website verwendet wurde und weiterhin im Wiki verwendet wird. PHP steht für "PHP: Hypertext Preprocessor" (ein rekursives Akronym).

SQLWikipedia.jpg

SQL (Structured Query Language) ist eine Datenbankabfragesprache. Hiermit werden Backend-Informationen auf der Website gespeichert, z. B. Benutzer- und Forendaten.

MongoDBWikipedia.jpg

MongoDB ist ein Datenbanksystem, in dem Cloud-Variablen gespeichert werden.

JavaWikipedia.jpg

Java ist eine leistungsstarke, objektorientierte Programmiersprache. Java wurde verwendet, um den ursprünglichen Java Player for Scratch zu schreiben.

JSWikipedia.jpg

JavaScript (allgemein abgekürzt als JS) ist eine einfache Programmiersprache, die auf ECMAScript für die Webentwicklung basiert. Schnapp! ist vollständig in JavaScript geschrieben und die Scratch-Website verwendet JavaScript für interaktive Elemente. Dazu gehören das Kommentieren, Markieren und Bearbeiten von Projektnotizen. Auf der 2.0-Site wird es auch verwendet, um automatisch nach neuen Nachrichten zu suchen und zu laden. Was passiert? und Scratch News und zitiere Beiträge in den Foren. JavaScript wird auch zur Entwicklung von Scratch 3.0 verwendet.

Node.jsWikipedia.jpg

Node.js ist eine Umgebung für JavaScript, in der JavaScript-Code auf dem Server ausgeführt werden kann.

Es wird in Scratch auf vielfältige Weise verwendet, einschließlich Projekten, Assets, Cloud-Variablen und großen Teilen der Community.[9]

GL Shader LanguageWikipedia.jpg

GLSL ist eine Programmiersprache, die in OpenGL und WebGL zum Verarbeiten von Scheitelpunkten und Fragmenten verwendet wird. Es wird im Scratch 3.0-Renderer verwendet.[10]

ToshWikipedia.jpg

Tosh ist eine kreuzkompatible Version von Scratch, die vom Benutzer blob8108 erstellt wurde. Es ermöglicht Benutzern die Verwendung der Textbasisprogrammierung anstelle der Standard-Drag & Drop-Methode. Es ist so konzipiert, dass Benutzer ohne Verwendung der Maus schnell und einfach komplexe Programme erstellen können. Projekte werden mit einer integrierten Version des Phosphor-Players abgespielt. Die Projekte können auch heruntergeladen und auf der Scratch-Hauptwebsite ausgeführt werden.

Markup-Sprachen

HTMLWikipedia.jpg

HTML ist eine webbasierte Auszeichnungssprache. Es wird für das Layout der Scratch-Website und zum Erstellen des HTML5-Players verwendet.

Cascading Style SheetsWikipedia.jpg

Das Kaskadieren von Stylesheets (üblicherweise als CSS abgekürzt) ist eine Methode zum Stylen von HTML-Dokumenten. Es wird verwendet, um Farbe hinzuzufügen und Websites optisch ansprechender zu gestalten.

Siehe auch

Externe Weblinks

Verweise