{"rule":"GERMAN_WORD_REPEAT_RULE","sentence":"^\\QIn Spielen wie Human Resource Machine \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q und Tuk Tuk \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q nutzt der Spieler eine klassische Skriptsprache, in welcher meist Akteure innerhalb der Spielwelt direkt über entsprechende Instruktionen kontrolliert werden.\\E$"}
{"rule":"COMMA_PARENTHESIS_WHITESPACE","sentence":"^\\QWas ist .\\E$"}
{"rule":"DOPPELTE_SATZZEICHEN","sentence":"^\\QWarum F?.\\E$"}
{"rule":"COMMA_PARENTHESIS_WHITESPACE","sentence":"^\\QDie Gameengine Unity baut auf dem .NET-Ökosystem auf.\\E$"}
{"rule":"PRAEP_DAT","sentence":"^\\QDa auch F-Bibliotheken problemlos in C-Projekte eingebunden werden können, wurde für die Implementierung von die Programmiersprache F genutzt.\\E$"}
{"rule":"EMPFOHLENE_GETRENNTSCHREIBUNG","sentence":"^\\QIn Spielen mit nichtlinearen Programmstrukturen, wie while True: learn() werden hier die konkreten Werte oft als das Netzwerk durchlaufende Objekte dargestellt.\\E$"}
{"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QIn dieser Struktur ist auch zu sehen, wie die Programmdarstellung der Bibliothek flexibel erweiterbar ist: Die Variante AstStmt.\\E$"}
{"rule":"DE_SENTENCE_WHITESPACE","sentence":"^\\QExternal enthält, ähnlichw\\E$"}
{"rule":"DE_SENTENCE_WHITESPACE","sentence":"^\\QStmtSideEffect kann eine beliebige Aktion darstellen, welche vom Bibliotheksnutzer als Funktion übergeben werden kann.\\E$"}
{"rule":"DE_SENTENCE_WHITESPACE","sentence":"^\\QExternal enthält hier wieder eine Funktion, welche einen beliebigen primitiven Wert zurückgibt.\\E$"}
{"rule":"PUNCTUATION_PARAGRAPH_END","sentence":"^\\QQuellcode Bytecode\\E$"}
{"rule":"F_ANSTATT_PH","sentence":"^\\QIn while True: learn() wird die Programmstruktur als Graphstruktur visualisiert.\\E$"}
{"rule":"EMPFOHLENE_GETRENNTSCHREIBUNG","sentence":"^\\QSpiele welche sich auf die Gestaltung von Datenflussstrukturen fokussieren, nutzen hierfür meist eine nichtlineare Darstellung.\\E$"}
{"rule":"COMMA_PARENTHESIS_WHITESPACE","sentence":"^\\QDie Gameengines Unity und Godot bauen auf dem .NET-Ökosystem auf.\\E$"}
{"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QItch.io Zeug\\E$"}
{"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QErstprüfer: Prof. Dr. Tim Reichert Zweitprüfer: Ulrich Straus\\E$"}
{"rule":"EINHEIT_LEERZEICHEN","sentence":"^\\QLaut Nutzungsdaten von itch.io, einer der beliebtesten Spielportale für Indiespielentwickler, verwenden 77% aller Spiele, welche die genutzte Engine angeben, Unity.\\E$"}
{"rule":"COMMA_PARENTHESIS_WHITESPACE","sentence":"^\\QUm also ein möglichst breites Spektrum an Spielentwicklern ansprechen zu können, but \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q daher auf dem .NET-Ökosystem auf.\\E$"}
{"rule":"COMMA_PARENTHESIS_WHITESPACE","sentence":"^\\QUm also ein möglichst breites Spektrum an Spielentwicklern ansprechen zu können, baut \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q daher auf dem .NET-Ökosystem auf.\\E$"}
{"rule":"EMPFOHLENE_GETRENNTSCHREIBUNG","sentence":"^\\QSpiele mit nichtlinearen Programmiersprachen.\\E$"}
{"rule":"PUNCTUATION_PARAGRAPH_END","sentence":"^\\QSolche Graphstrukturen eignen sich gut, um komplexe mathematische oder logische Berechnungen darzustellen und werden außerhalb von Programmierspielen beispielsweise in visuellen Datenflussprogrammiersprachen wie Pure Data\\E$"}
{"rule":"F_ANSTATT_PH","sentence":"^\\QSolche Graphstrukturen eignen sich gut, um komplexe mathematische oder logische Berechnungen darzustellen und werden außerhalb von Programmierspielen beispielsweise in visuellen Datenflussprogrammiersprachen wie der vor allem für Klangsynthese und Audiosignalverarbeitung eingesetzten Sprache Pure Data oder der Simulationssoftware Simulink eingesetzt.\\E$"}
{"rule":"DE_CASE","sentence":"^\\QDas hier erwartete Interface \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q definiert zwei Funktionen, die ein solcher Ausdruck implementieren muss: [\\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q] Generiert eine Textdarstellung des Ausdrucks.\\E$"}
{"rule":"PUNCTUATION_PARAGRAPH_END","sentence":"^\\Q\\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q unterscheidet zwischen zwei Oberkategorien von Programmdarstellungen: lineare Darstellungen rekursive Baumdarstellungen\\E$"}
{"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QAbstract Syntax Trees.\\E$"}
{"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QEs gibt zwei übliche Möglichkeiten, Bytecodes anzuwenden: Als Zwischendarstellung (Intermediate Representation, \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q)\\E$"}
{"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QEin weiteres Beispiel für die Verwendung als Zwischendarstellung ist der in \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q Compiler Js_of_ocaml, welcher OCaml-Bytecode in Javascript übersetzt\\E$"}
{"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QBeim sogenannten constant folding werden beispielsweise Teilausdrücke identifiziert, die keine Nebeneffekte enthalten und nicht auf unbekannte Variablen referenzieren.\\E$"}
{"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QBeim sogenannten constant folding werden beispielsweise Teilausdrücke identifiziert, die keine Nebeneffekte enthalten und jedes Mal denselben Wert zurückgeben werden \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q.\\E$"}
{"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QEs gibt zwei übliche Möglichkeiten, Bytecodes anzuwenden: als intermediate Representation (\\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q) oder zur Ausführung in einem Bytecodeinterpreter.\\E$"}
{"rule":"F_ANSTATT_PH","sentence":"^\\QIn \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q wird die Programmstruktur als Graphstruktur visualisiert.\\E$"}
{"rule":"F_ANSTATT_PH","sentence":"^\\QAusdrücke werden in \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q in einer graphbasierten Darstellung bearbeitet, \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q zeigt den Ausdruckseditor in \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q.\\E$"}
{"rule":"F_ANSTATT_PH","sentence":"^\\QAusdrücke werden in \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q in einer graphbasierten Darstellung bearbeitet, welche sowohl die Struktur als auch die Evaluation des Ausdrucks visuell darstellt.\\E$"}
{"rule":"F_ANSTATT_PH","sentence":"^\\QIn \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q wird die Programmstruktur als Graphstruktur dargestellt.\\E$"}
{"rule":"DE_CASE","sentence":"^\\QAls Programmierspiele bezeichnet man Spiele, in welchen die Spielenden Programme entwickeln müssen, um im Spiel voranzukommen.\\E$"}
{"rule":"F_ANSTATT_PH","sentence":"^\\QSolche Graphstrukturen eignen sich gut, um komplexe mathematische oder logische Berechnungen darzustellen und werden außerhalb von Programmierspielen beispielsweise in visuellen Datenflussprogrammiersprachen wie der vor allem für Klangsynthese und Audiosignalverarbeitung eingesetzten Sprache \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q oder der Simulationssoftware Simulink eingesetzt.\\E$"}
{"rule":"F_ANSTATT_PH","sentence":"^\\QSolche Graphstrukturen eignen sich gut, um komplexe mathematische oder logische Berechnungen darzustellen und werden außerhalb von Programmierspielen beispielsweise in visuellen Datenflussprogrammiersprachen wie der vor allem für Klangsynthese und Audiosignalverarbeitung eingesetzten Sprache \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q oder der Simulationssoftware \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q eingesetzt.\\E$"}
{"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QDa keine konkrete Syntax vorgegeben werden soll, setzt \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q hier auf eine strukturierte Darstellung in Form eines Abstract Syntax Trees \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q.\\E$"}
{"rule":"PUNCTUATION_PARAGRAPH_END","sentence":"^\\Q\\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q bietet hier die folgenden binären Operationen: [arithmetische Operatoren] \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q (\\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q), \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q (\\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q), \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q (\\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q), \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q (\\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q), \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q (%\\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q) [numerische Vergleichsoperatoren] \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q (\\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q), \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q (\\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q) [generische Vergleichsoperatoren] \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q (\\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q), \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q (\\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q) [logische Operatoren] \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q (\\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q), \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q (\\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q) [Zeichenkettenkonkatenation] \\E(?:Dummy|Ina|Jimmy-)[0-9]+$"}
{"rule":"F_ANSTATT_PH","sentence":"^\\QAusdrücke werden in \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q in einer graphbasierten Darstellung bearbeitet, welche sowohl die Struktur als auch die Auswertung des Ausdrucks visuell darstellt.\\E$"}
{"rule":"COMMA_BEHIND_RELATIVE_CLAUSE","sentence":"^\\QDer größte Vorteil der Übersetzung in Maschinencode ist die Laufzeiteffizienz und Hardwarenähe, die dadurch erreicht werden kann \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q.\\E$"}
{"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QDa keine konkrete Syntax vorgegeben werden soll, setzt \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q hier auf eine strukturierte Darstellung in Form eines Abstract Syntax Trees (\\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q).\\E$"}
{"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QDer Aufbau der textbasierten Programmierspiele von Zachtronics ist ähnlich: laut Firmengründer \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q setzen diese auf eine weitgehend klassische Parser- und Compilerstruktur, welche den Programmcode in eine separate Laufzeitsimulation übergibt, die den Code schrittweise ausführt.\\E$"}
{"rule":"COMMA_BEHIND_RELATIVE_CLAUSE","sentence":"^\\QVariablen sind hier in dem Kontext, in dem sie initialisiert wurden, und allen darin enthaltenen Kontexten verfügbar, nicht aber außerhalb des jeweiligen Kontexts.\\E$"}
{"rule":"COMMA_BEHIND_RELATIVE_CLAUSE","sentence":"^\\QVariablen sind hier nur in dem Kontext, in dem sie initialisiert wurden, verfügbar.\\E$"}
{"rule":"COMMA_BEHIND_RELATIVE_CLAUSE","sentence":"^\\QVariablen sind in solchen Systemen nur in dem Kontext, in dem sie initialisiert wurden, verfügbar.\\E$"}
{"rule":"DE_CASE","sentence":"^\\QDiese Unterschiede fallen vor allem durch unterschiedliche mitgelieferte Typen und Klassen der Standardbibliothek, als auch bei der Verwendung von F-spezifischen Typkonstrukten aus C heraus auf.\\E$"}
{"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QDieses ist in F als \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q mit spezifischer Syntax gut unterstützt, und wird sowohl von F- als auch C-Listen implementiert.\\E$"}
{"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QDieses ist in F als \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q mit spezifischer Syntax gut unterstützt und wird sowohl von F- als auch C-Listen implementiert.\\E$"}
{"rule":"DE_CASE","sentence":"^\\QDurch die direkte Verwendung von F-spezifischen Datenstrukturen wie den Summentypen in der \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q-Darstellung oder den F-Typen \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q und \\E(?:Dummy|Ina|Jimmy-)[0-9]+$"}
{"rule":"DE_CASE","sentence":"^\\Q[Verwendung von F-spezifischen Konstrukten]\\E$"}
{"rule":"DE_CASE","sentence":"^\\QDie Bibliothek setzt an vielen Stellen auf F-spezifische Features, welche sowohl der strukturellen Komplexität als auch der Lesbarkeit des Bibliothekscodes deutlich helfen.\\E$"}
{"rule":"DE_CASE","sentence":"^\\QAndererseits sind einige der Programmierschnittstellen der Bibliothek aufgrund der Verwendung von F-spezifischen Sprachkonstrukten in der öffentlichen API aus C heraus deutlich schwieriger nutzbar.\\E$"}
{"rule":"MODALVERB_FLEKT_VERB","sentence":"^\\QF ist eine multiparadigmatische Programmiersprache, welche primär auf die -Plattform abzielt.\\E$"}
{"rule":"AUSLASSUNGSPUNKTE","sentence":"^\\QDa die Ausdrücke \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q, \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q,... die Spielwelt referenzieren müssen, würden diese die Referenz auf die Spielwelt bereits bei der Initialisierung des Ausdrucks benötigen.\\E$"}
{"rule":"FALSCHE_VERWENDUNG_DES_BINDESTRICHS","sentence":"^\\QDieses ist in als \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q mit spezifischer Syntax gut unterstützt und wird sowohl von - als auch -Listen implementiert.\\E$"}
{"rule":"MODALVERB_FLEKT_VERB","sentence":"^\\Q\\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q ist eine multiparadigmatische Programmiersprache, welche primär auf die -Plattform abzielt.\\E$"}
{"rule":"F_ANSTATT_PH","sentence":"^\\QSolche Graphstrukturen eignen sich gut, um komplexe mathematische oder logische Berechnungen darzustellen und werden außerhalb von Programmierspielen beispielsweise in visuellen Datenflussprogrammiersprachen wie der vor allem für Klangsynthese und Audiosignalverarbeitung eingesetzten Sprache \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q oder der Simulationssoftware \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q eingesetzt.\\E$"}
{"rule":"F_ANSTATT_PH","sentence":"^\\QAuch ist die graphbasierte Darstellung eine sehr direkte Repräsentation des \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q und bietet sich daher gut für die visuelle Darstellung der schrittweisen Auswertung von Ausdrücken an.\\E$"}
{"rule":"PUNCTUATION_PARAGRAPH_END","sentence":"^\\Q\\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q unterscheidet zwischen zwei Oberkategorien von Programmdarstellungen: rekursive Baumdarstellungen lineare Darstellungen\\E$"}
{"rule":"EMPFOHLENE_GETRENNTSCHREIBUNG","sentence":"^\\QSpiele, die sich auf die Gestaltung von Datenflussstrukturen fokussieren, nutzen hierfür meist eine nichtlineare Darstellung.\\E$"}
{"rule":"PUNCTUATION_PARAGRAPH_END","sentence":"^\\Q\\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q unterscheiden zwischen zwei Oberkategorien von Programmdarstellungen: rekursive Baumdarstellungen lineare Darstellungen\\E$"}
