www.wikidata.de-de.nina.az
Die Shakespeare Programming Language SPL ist eine von Karl Hasselstrom und Jon Aslund im Jahre 2001 entwickelte imperative esoterische Programmiersprache Computersprache welche in C realisiert wurde und zu den am schwersten erlernbaren Programmiersprachen gehort Ahnlich wie bei der Programmiersprache Chef sieht ein SPL Programm wie etwas ganz anderes aus Ein SPL Programm sieht auf den ersten Blick aus als ware es ein Drama von William Shakespeare und folgt dessen typischem Aufbau Jedoch heisst dies keineswegs dass Shakespeares Originalwerke als SPL aufgefasst werden konnen und kompilierbar waren SPL demonstriert deutlich dass ein funktionsfahiges Programmiersprachenkonzept nicht konventionellen Vorstellungen folgen muss Struktur sowie Schlusselworter mussen prinzipiell nur einem festen Schema entsprechen um eine eindeutige Interpretation zu erlauben unabhangig davon wie lesbar oder logisch der Programmtext einem Menschen erscheint Umgekehrt sind SPL Programme auch fur Menschen die nicht programmieren konnen sehr einfach zu lesen und zwar als Drama Die Bedeutung fur den nichteingeweihten Menschen und fur den Computer gehen hier komplett auseinander zwei Bedeutungen uberlagern sich Daher wird SPL gerne in der Lehre als Beispiel fur Sprachdesign verwendet 1 2 Auf welche Weise sich die beiden Bedeutungen uberlagern welche Elemente aus den Dramen Shakespeares welchen Elementen einer Programmiersprache entsprechen wird im Folgenden dargestellt Inhaltsverzeichnis 1 Basiswissen 2 Funktionsweise 2 1 Der Titel 2 2 Die Charaktere Dramatis Personae 2 3 Akte und Szenen 2 4 Enter Exit und Exeunt 2 5 Dialog Anweisungen 2 5 1 Literale 2 5 2 Zuweisungen 2 5 3 Ausdrucke 2 5 3 1 Arithmetische Ausdrucke 2 5 3 2 Aussagenlogische Ausdrucke 2 5 4 Eingabe und Ausgabe 2 5 5 Kontrollanweisungen 2 5 5 1 Sprunganweisungen 2 5 5 2 Bedingte Anweisungen 3 Compiler 4 Quellen 5 WeblinksBasiswissen BearbeitenDie Shakespeare Programming Language ist im Hinblick auf die Syntax besonders da sie nicht wie samtliche andere Programmiersprachen aus arithmetischen und festgelegten Zeichen basiert sondern dem Entwickler bei seinem Programm sehr viel Freiheit lasst Oft hat der Entwickler die Moglichkeit die gleiche Programmfunktionalitat durch das Austauschen von realsprachlichen Elementen wie z B Nomen oder Adjektiven zu erreichen Daruber hinaus ist die Programmiersprache an William Shakespeare orientiert man kann sozusagen in Dramenform programmieren was sie zugleich einzigartig aber auch gewohnungsbedurftig macht Die folgenden Beispiele sind aus dem ersten Programm in SPL dem Hallo Welt Programm Es lassen sich jedoch auch komplexere Programme wie z B ein Programm zur Primzahlermittlung programmieren wie der Entwickler in seiner Dokumentation anhand einiger Beispiele demonstriert Funktionsweise BearbeitenDer Titel Bearbeiten Die erste Zeile eines jeden Dramenstucks in SPL ist der Titel Dieser kann frei gewahlt werden und verleiht dem Stuck etwas mehr Ordnung und Ubersicht Da er frei gewahlt werden kann erkennt der Compiler ihn bloss als Kommentar und beeinflusst daher nicht die Programmfunktionalitat Demzufolge ist der Titel optional die Entwickler geben jedoch zu bedenken dass ein Programm ohne Titel so schlecht programmiert wie ein Drama ohne Titel schlecht geschrieben sei Beispiel The Infamous Hello World Program Die Charaktere Dramatis Personae Bearbeiten Wie in jedem Shakespeare Drama auch mussen am Anfang zunachst die Personen festgelegt werden Diese sind die ersten Codezeilen die vom Compiler als Deklarationsanweisungen erkannt werden und erkannt werden mussen damit die formalen Aspekte einer Programmiersprache gewahrleistet werden konnen Aufgelistet werden alle Charaktere des Stucks welchen stets eine kurze Beschreibung folgt Beispiel Romeo a young man with a remarkable patience Juliet a likewise young woman of remarkable grace Ophelia a remarkable woman much in dispute with Hamlet Hamlet the flatterer of Andersen Insulting A S Die Charaktere sind vergleichbar mit signed Integer Variablen bzw Chars die mittels betriebssystemspezifischen Zeichensatztabellen eindeutig numerischen Werten zugeordnet werden konnen Die folgende Beschreibung des Charakters ist verpflichtend wird jedoch vom Parser ignoriert Verwendet werden konnen nur Charaktere welche auch in Shakespeare Dramen eine Rolle spielen also zumeist Romeo Juliet Hamlet Othello Macbeth King Lear usw Gultige Charaktere werden anhand einer beigelegten Worterliste erkannt welche aktuell 152 Charaktere umfasst Akte und Szenen Bearbeiten Nach der Deklaration der Variablen respektive Charaktere folgen der Abfolge eines Dramas entsprechend Act I und Scene I welche jeweils mit Titeln versehen sind Wie bereits beim Programmtitel werden diese vom Compiler lediglich als Kommentar betrachtet Act und Scene werden jedoch nach dem Kompilieren in C als Sprungmarke betrachtet zu denen mittels GOTO Sprunganweisungen gesprungen werden kann Analog zum Titel sind Akte und Szenen zur erfolgreichen Kompilierung nicht zwingend erforderlich Sie sind jedoch nicht optional im Interesse des Programmierers da sowohl jeder Programmierer in SPL als auch jeder Dramenautor dazu verpflichtet sein sollte sein Programm Werk in Akte und Szenen zu strukturieren damit die Lesbarkeit und Ubersichtlichkeit gewahrleistet werden kann Beispiel Act I Hamlet s insults and flattery Scene I The insulting of Romeo Enter Exit und Exeunt Bearbeiten Jede Szene in jedem Akt wird eingeschlossen von Schlusselwortern welche die Szene eroffnen bzw schliessen Diese heissen wie in einem Drama welches in Fruhneuenglisch geschrieben wurde zu Beginn Enter Exit und Exeunt Um einen Charakter sprechen zu lassen und dadurch dafur zu sorgen dass das Programm etwas ausfuhrt mussen die Charaktere der Logik zufolge auf der Buhne stehen Charaktere welche andere bereits auf der Buhne stehende Charaktere mit you thou oder einem jeden anderen Pronomen der zweiten Person ansprechen mussen ebenfalls auf der Buhne platziert sein Auf die Buhne kommen Charaktere durch die Festlegung ihrer im Enter Befehl als eine Art Parameter Beispiel Enter Hamlet and Romeo Entsprechend treten Charaktere auch wieder von der Buhne ab Dies geschieht entweder mit dem Exit oder dem Exeunt Befehl Tritt eine Figur ab muss diese hinter dem Exit erwahnt werden z B Exit Romeo Treten jedoch zwei oder mehr Charaktere gleichzeitig ab muss der Exeunt Befehl verwendet werden Eine Sondersituation stellt das Ende einer Szene dar In diesem Fall treten haufig alle dargestellten Personen ab Dafur genugt ein einziges Exeunt ohne samtliche Parameter um dem Compiler dies mitzuteilen Gibt man einem Charakter der bereits auf der Buhne ist einen Enter Befehl oder einem abwesenden Charakter ein Exit so meldet der Compiler einen Laufzeitfehler Beispiel Exeunt Exeunt Hamlet and Romeo Dialog Anweisungen Bearbeiten Wie im wirklichen Drama ist auch in SPL der Dialog zumeist Grundlage von jeglichen Anweisungen Hierbei sind einfache Anweisungen wie Zuweisungen von arithmetischen und aussagenlogischen Ausdrucken und Prozeduranweisungen Eingabe und Ausgabe aber auch strukturierte Kontrollanweisungen Sprunganweisungen oder bedingte Anweisungen zulassig Ein Dialogteil eines einzelnen Charakters besteht aus einem Charakternamen einem Doppelpunkt sowie einem oder mehreren Satzen die die konkreten Anweisungen darstellen Beispiel Hamlet You lying stupid fatherless big smelly half witted coward You are as stupid as the difference between a handsome rich brave hero and thyself Speak your mind Literale Bearbeiten Literale oder Konstanten sind in SPL durch eine Wortliste definiert von denen es insgesamt drei Stuck gibt negatives Nomen neutrales Nomen und positives Nomen Jedes englische Wort aus der gleichen Wortlistenfamilie lasst sich synonym verwenden Somit entsprechen die Literale vordefinierten literarischen Konstanten denen nach folgenden Kriterien numerische Werte zuzuordnen sind Jedes Nomen ist grundsatzlich eine Konstante mit dem Wert 1 oder 1 Der genaue Wert hangt davon ab ob das Nomen negativ oder positiv konnotiert ist oder man keine Aussage uber seine transferierende Gefuhlsstimmung machen kann flower ist z B eine Konstante mit dem Wert 1 pig oder negation hatte entsprechend 1 tree ist z B neutral da es keine bestimmte Gefuhlsstimmung transferiert und hat dementsprechend den Wert 1 Adjektive geniessen in SPL ebenfalls eine besondere Berucksichtigung Auch sie sind uber Wortlisten in die drei Kategorien negativ neutral und positiv eingeteilt Jedes Adjektiv muss von der Stimmung her mit dem Nomen korrespondieren Eine stinking flower ergibt aus shakespearischer Sicht auch wenig Sinn Jedes vorangeschaltete Adjektiv multipliziert das Nomen mit zwei Zuweisungen Bearbeiten Die von anderen Programmiersprachen bereits bekannte Variablenzuweisung und der Zugriff auf diese Variablen in SPL dargestellt durch die Charaktere von Shakespeares Werken wird in SPL folgendermassen umgesetzt Es ist fur Variablenzuweisungen ausschliesslich eine Nennung eines Pronomens in zweiter Person namentlich you thee und thou gefolgt von einem Ausdruck zulassig Dieser Ausdruck lasst sich wie folgt in zwei Kategorien einteilen Zuweisung eines Literals In dem Fall weist das Programm dem anderen Charakter ein direktes Literal in Form eines Nomens mit optionalem Adjektiv davor zu Der jeweils andere Charakter der sich auf der Buhne befindet uberschreibt den bisherigen Wert in seinem Stack mit dem Wert des Literals You lying stupid fatherless big smelly half witted coward In diesem Fall wird der Stack des angesprochenen Charakters um den Wert 64 erweitert Zuweisung eines Ausdruckes In diesem Fall weist das Programm dem anderen Charakter das Ergebnis eines arithmetischen Ausdruckes s u zu Dafur ist es zwingend notwendig einen Zuweisungsoperator anzugeben der in der Form as any adjective as zwischen der Variablen und dem Ausdruck zu platzieren ist You are as stupid as the difference between a handsome rich brave hero and thyself Dieses Beispiel erlautert zeitgleich noch dass die Werte bisheriger Variablen in Berechnungen verwendet werden konnen Gultig sind die Reflexivpronomen thyself yourself and myself Wenn man annahme die andere Person hiesse Hamlet so entsprache obige Anweisung folgender Zuweisung Hamlet 8 Hamlet Ausdrucke Bearbeiten Durch oben beschriebene Methodik ware SPL nur in der Lage beliebige naturliche Potenzen zur Basis 2 respektive das zur Addition invertierte von diesem auszudrucken Daher wurde in SPL die Moglichkeit geschaffen arithmetische und aussagenlogische Ausdrucke zu implementieren Arithmetische Ausdrucke Bearbeiten Ein arithmetischer Ausdruck besteht aus vorher definierten englischen Wortern die mathematische Operationen beschreiben so sind z B die vier mathematischen Grundrechenarten difference sum product und quotient aber auch erweiterte Ausdrucke wie square oder cube zulassig Diese Operationen lassen sich beliebig mit and verknupfen und erfordern entsprechende sprachliche Korrektheit Zwischen den arithmetischen Ausdrucken mussen sich entweder Literale oder Variablen befinden Ein etwas komplizierteres Beispiel the difference between the square of the difference between my little pony and your big hairy hound and the cube of your sorry little codpiece Zunachst ersetzt man die Konstanten durch Zahlen Der Satz verandert sich somit in the difference between the square of the difference between 2 and 4 and the cube of 4 Nun ist die Differenz zwischen 2 und 4 6 und die dritte Potenz von 4 ist 4 3 64 Da das Quadrat von 6 36 ist kommt man unter dem Strich zu the difference between 36 and 64 was genau 100 entspricht So ist the difference between the square of the difference between my little pony and your big hairy hound and the cube of your sorry little codpiece 100 Aussagenlogische Ausdrucke Bearbeiten Vergleiche bestehen aus aussagenlogische Ausdrucke die einen booleschen Ruckgabewert haben Seien X displaystyle X nbsp und Y displaystyle Y nbsp beliebige ordinale Datentypen is X displaystyle X nbsp as good as Y displaystyle Y nbsp testet auf X displaystyle X nbsp Y displaystyle Y nbsp is X displaystyle X nbsp better than Y displaystyle Y nbsp testet auf X displaystyle X nbsp gt Y displaystyle Y nbsp is X displaystyle X nbsp worse than Y displaystyle Y nbsp testet auf X displaystyle X nbsp lt Y displaystyle Y nbsp Fur better kann auch jeglicher anderer positiver Vergleichskomperator wie bigger fresher friendlier nicer oder jollier verwendet werden Fur worse kann auch jeglicher anderer negativer Vergleichskomperator wie punier oder smaller verwendet werden Wenn das Testergebnis invertiert werden soll so kann dies durch ein not umgesetzt werden wie z B not as good as oder not better than Eingabe und Ausgabe Bearbeiten Hierbei kann ein anderer Charakter mittels Open your heart oder Speak your mind dazu aufgefordert werden den Wert seiner Variablen entweder im ersten Fall numerisch oder im zweiten Fall als Zeichen abhangig vom Zeichensatz des Computers auf den Bildschirm auszugeben So sind mehrere fortlaufende Berechnungen und das stuckweise Ausgeben von Zeichen fur z B die Zeichenkette Hello world mit nur einer Variable moglich Entsprechend korrespondierend verhalt es sich mit der Eingabe von Werten Listen to your heart ermoglicht die Zuweisung eines numerischen Wert an den angesprochenen Charakter wahrend Open your mind fur ein Zeichen verwendbar ist Das Eingeben der Werte kann uber jegliches unterstutztes Eingabegerat erfolgen ublich geschieht dies uber die Tastatur Kontrollanweisungen Bearbeiten Sprunganweisungen Bearbeiten Der aus der Informatik haufig als GOTO bekannte Befehl ermoglicht hierbei die einfachste Iteration und fand nur in alteren Systemen eine Verwendung und wird heutzutage fast ausschliesslich durch die wesentlich struktuierteren und vereinfachten Schleifen z B Zahlschleifen oder kopf bzw fussgesteuerte Schleifen ersetzt Dennoch gibt es in SPL die Moglichkeit eines GOTO Befehls da eine einfache Implementationsmoglichkeit einer Sprunganweisung als ein essentieller Faktor fur die Klassifizierung als Programmiersprache angesehen wird Die Realisierung in SPL erfolgt durch die Schlusselbegriffe Let us We shall oder We must gefolgt von Return to scene Roman numeral oder Proceed to Roman numeral und bedeutet dass man zu der entsprechend angegebenen Szene springen soll Hierbei gilt es zu beachten dass nur ein Springen innerhalb eines Aktes moglich ist jedoch nicht zwischen mehreren Akten Bedingte Anweisungen Bearbeiten Bedingte Anweisungen bestehen aus zwei Hauptfragmenten wie im folgenden Beispiel ersichtlich Juliet Am I better than you Hamlet If so let us proceed to scene III Zuerst wird eine Frage gestellt die einen Vergleich darstellt aussagenlogischer Ausdruck und entweder einen wahren oder einen falschen Ruckgabewert hat in der Informatik bezeichnet man dies als eine Boolesche Variable Danach folgt eine konditionale Aussage beginnend mit if so oder if not und einem Komma Der Satz dahinter wird nur dann ausgefuhrt wenn die vorherige Aussage wahr ist bzw im Falle der Verwendung von if not entsprechend falsch ist Compiler Bearbeiten nbsp Aufbau der Schritte zum Kompilieren von SPLDie Entwickler von SPL haben keinen eigenen Compiler fur SPL geschrieben jedoch einen Ubersetzer von SPL zu C dieser konvertiert also die SPL Syntax in eine gultige C Syntax mit folgenden unter Linux ausfuhrbaren Befehlen spl2c lt hello spl gt hello c gcc c hello c g hello o libspl a Im ersten Schritt wird mit dem vom Entwickler bereitgestellten Programm spl2c der Programmcode von SPL nach C konvertiert anschliessend wird dieser im zweiten Schritt mit dem C Compiler gcc und mithilfe der vom Entwickler bereitgestellten Header Datei spl h kompiliert Im letzten Schritt wird dann das kompilierte Programmmodul hello o mit einer ebenfalls vom Entwickler bereitgestellten Bibliothek libspl a gelinkt und ein ausfuhrbares Programm ist entstanden Quellen Bearbeiten University of Notre Dame Kurs AME 437 Control Systems Engineering Homework 3 englisch For any two of the four differential equations you solved last week in 2 9 5 also verify your answer by plotting your solution and a solution obtained by numerically solving the equation using a fourth order Runge Kutta routine written in C C FORTRAN or the Shakespeare Programming Language West Virginia University Kurs English 306 Topics in Humanities Computing Memento vom 13 Mai 2008 imInternet Archive englisch Sept 16 Meadows Pause and Effect Chap 2McCloud Time Frames NMRRecommended Shakespeare Programming Language Scott McLoud Cloudmakers Liquid Stage Jimmy Corrigan Crutch Devil s Tramping Ground Memex Engine Ambient Machines demain When I am King Weblinks BearbeitenSPL the Shakespeare Programming Language Homepage von Kalle Hasselstrom dem Mitentwickler von SPL mit Dokumentation und Quellcode englisch The Shakespeare Programming Language Homepage bei Sourceforge net englisch Sprachbeschreibung Anleitung und Einfuhrung englisch PDF Version von Dezember 2001 abgerufen am 3 Juni 2016 Abgerufen von https de wikipedia org w index php title Shakespeare Programming Language amp oldid 237683197