Bearbeiten von „ShakespeareForInfos“
Aus KIF
Die Bearbeitung kann rückgängig gemacht werden. Bitte prüfe den Vergleich unten, um sicherzustellen, dass du dies tun möchtest, und veröffentliche dann unten deine Änderungen, um die Bearbeitung rückgängig zu machen.
Aktuelle Version | Dein Text | ||
Zeile 10: | Zeile 10: | ||
==Getting started== | ==Getting started== | ||
Die Shakespeare-Programmiersprache (SPL) wird als SourceForge-Projekt unter [ | Die Shakespeare-Programmiersprache (SPL) wird als SourceForge-Projekt unter [shakespearelang.sourceforge.net shakespearelang.sourceforge.net] entwickelt. Momentan existiert noch kein Compiler für SPL, stattdessen gibt es aber einen Übersetzer, der SPL nach C-code übersetzt. Dieser kann dann mit dem gcc oder einem beliebigen anderen Compiler in ausführbaren Binärcode umgewandelt werden. Ebenso findet ihr auf der genannten Seite ein ausführliches Tutorial und einiges an Beispielprogrammen. | ||
==[Enter Hamlet and Romeo]== | ==[Enter Hamlet and Romeo]== | ||
Zeile 20: | Zeile 20: | ||
Gleiches gilt für das Verlassen der Bühne mit <tt>[Exit Hamlet]</tt> bzw. beim Verlassen von mehreren Personen gleichzeitig durch <tt>[Exeunt Hamlet and Romeo]</tt>. | Gleiches gilt für das Verlassen der Bühne mit <tt>[Exit Hamlet]</tt> bzw. beim Verlassen von mehreren Personen gleichzeitig durch <tt>[Exeunt Hamlet and Romeo]</tt>. | ||
= | |||
\begin{lstlisting}[caption={Dramatis personae}, label = Shakespeare1] | |||
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. | |||
\end{lstlisting} % aus dem Hello-World Programm | |||
==Scene I: The insulting of Romeo.== | ==Scene I: The insulting of Romeo.== | ||
Jeder SPL Code ist aufgeteilt in einzelne Akte (z.B. | Jeder SPL Code ist aufgeteilt in einzelne Akte (z.B. {\tt Act I: Hamlet's insults and flattery.}), welche wiederum in Szenen (z.B. {\tt Scene I: The insulting of Romeo.}) aufgeteilt sind. Dadurch ist es innerhalb des Programms m"oglich mit Ausspr"uchen wie {\tt If so, we must proceed to Scene V.} (analog zu GoTo Befehlen in C oder Assembler) im Programmcode zu springen. | ||
Beschreibungen der Szene oder des Aktes, die nach dem Doppelpunkt vorgenommen werden, sind | Beschreibungen der Szene oder des Aktes, die nach dem Doppelpunkt vorgenommen werden, sind "ubrigens als Kommentar zu sehen und werden daher vom Compiler ignoriert. | ||
\titel{You lying stupid fatherless big smelly half-witted coward!} | |||
Dieser Satz ist, so | Dieser Satz ist, so merkw"urdig es auch klingt, eine Variablendeklaration und weist der angesprochenen Variable den Wert $-64$ zu. Aber dr"oseln wir den Satz doch St"uck f"ur St"uck ein wenig auf \dots | ||
\titel{Zahlen} | |||
Jedes Substantiv ist eine Konstante mit dem Wert | Jedes Substantiv ist eine Konstante mit dem Wert $1$ oder $-1$. Der Wert h"angt davon ab, ob diese Zahl \glqq{sch"on\grqq} ist oder nicht. So haben bspw. die W"orter \emph{flower} oder \emph{hero} den Wert $1$ aber \emph{coward} oder \emph{pig} den Wert $-1$. Neutrale Substantive wie \emph{tree} oder \emph{stone} z"ahlen ebenfalls $1$. | ||
Durch jedes vorangestellte Adjektiv | Durch jedes vorangestellte Adjektiv erh"oht sich dieser Wert nun um den Faktor zwei. Somit w"are eine {\tt lovely red rose} der Wert $2\cdot 2\cdot 1 = 4$ oder ein {\tt snotty stinking half-witted hog} gerade $2\cdot 2\cdot 2 \cdot (-1)=-8$. | ||
\titel{Zuweisungen} | |||
Solche Konstanten | Solche Konstanten k"onnen nun den einzelnen Variablen zugewiesen werden. Zuweisungen werden durch einzelne Personalpronomen wie {\tt You} oder {\tt Thou} eingeleitet, die zeigen, welcher Charakter angesprochen wird. | ||
Wenn also Hamlet zu Romeo spricht, | Wenn also Hamlet zu Romeo spricht, {\tt You are as stupid as the difference between a handsome rich brave hero and thyself!} wird Romeo der Wert $8$ minus dem aktuellen Wert von Romeo zugewiesen. --- Ganz wie man es von diesem englischen Satz erwarten w"urde. --- Das {\tt as [\dots] as} kann "ubrigens durch einen (fast) beliebigen Ausdruck ersetzt werden, der eine Gleichheit ausdr"uckt. | ||
\titel{I/O} | |||
Die Eingabe sowie die Ausgabe funktionieren denkbar einfach. So | Die Eingabe sowie die Ausgabe funktionieren denkbar einfach. So w"urde ein angesprochener Charakter bei dem Satz {\tt Open your heart.} eine Zahl und bei {\tt Speak your mind.} ein Literal ausgeben. Das Literal orientiert sich dabei am aktuell verwendeten Rechner-Zeichensatz (z.B. im ASCII-Code tr"agt das Zeichen \emph{A} den Wert 65). | ||
Die Eingabe erfolgt analog. Durch | Die Eingabe erfolgt analog. Durch {\tt Listen to your heart.} wird eine Zahl und durch {\tt Open your mind.} ein Literal eingelesen und in der angesprochenen Variable gespeichert. | ||
\titel{Am I better than you?} | |||
Im richtigen Leben meistens eine Fangfrage, hier ein simpler Wertevergleich. Durch dieses Statement | Im richtigen Leben meistens eine Fangfrage, hier ein simpler Wertevergleich. Durch dieses Statement k"onnen zwei Variablen miteinander verglichen werden. Das folgende Beispiel sollte f"ur jeden Informatiker fast selbsterkl"arend sein: | ||
= | \begin{lstlisting}[caption={Vergleichen}, label = Shakespeare2] | ||
Juliet: | Juliet: | ||
Am I better than you? | Am I better than you? | ||
Zeile 63: | Zeile 65: | ||
If so, let us proceed to | If so, let us proceed to | ||
scene III. | scene III. | ||
\end{lstlisting} | |||
Was hier steht, kann einfach in eine bedingte Sprunganweisung nach Szene III | Was hier steht, kann einfach in eine bedingte Sprunganweisung nach Szene III "ubersetzt werden, die genau dann eintritt, wenn der Wert von {\tt Juliet} gr"o"ser als der Wert von {\tt Hamlet} ist. | ||
Analog existieren auch die Vergleiche mit | Analog existieren auch die Vergleiche mit {\tt Is \emph{X} as good as \emph{Y}?} und {\tt Is \emph{X} better than \emph{Y}?}. Auch diese Ergebnisse k"onnen mit {\tt If so, \dots} und {\tt If not, \dots} angefragt werden. Negative Vergleiche k"onnen logischer Weise mit \emph{bad} und \emph{worse} gemacht werden. Das Negieren gelingt durch Einf"ugen von \emph{not}. | ||
\titel{Remember me.} | |||
Als kleinen Leckerbissen haben die Entwickler auch eine Stack-Funktion eingebaut. Zu beachten ist hierbei, dass anders als z.B. in Assembler nicht ein gemeinsamer Stack existiert, sondern jeder Charakter sein eigenes kleines | Als kleinen Leckerbissen haben die Entwickler auch eine Stack-Funktion eingebaut. Zu beachten ist hierbei, dass anders als z.B. in Assembler nicht ein gemeinsamer Stack existiert, sondern jeder Charakter sein eigenes kleines Ged"achtnis, also seinen eigenen Stack besitzt. Die Push-Operation erfolgt durch ein {\tt Remember me.}: | ||
= | \begin{lstlisting}[caption={Push-Operation}, label = Shakespeare3] | ||
Lady Macbeth: | Lady Macbeth: | ||
Remember me. | Remember me. | ||
\end{lstlisting} | |||
Hierdurch wird der Angesprochene veranlasst den Wert von | Hierdurch wird der Angesprochene veranlasst den Wert von \emph{Lady Macbeth} auf seinen Stack zu legen. | ||
Ein Pop wird durch das Auftauchen des Befehls | Ein Pop wird durch das Auftauchen des Befehls {\tt recall} ausgef"uhrt: | ||
= | \begin{lstlisting}[caption={Pop-Operation}, label = Shakespeare4] | ||
Lady Macbeth: | Lady Macbeth: | ||
Recall your imminent death! | Recall your imminent death! | ||
\end{lstlisting} | |||
Hierbei nimmt wieder der Angesprochene den obersten Wert von seinem Stack. | Hierbei nimmt wieder der Angesprochene den obersten Wert von seinem Stack. | ||
\titel{Use It!} | |||
Das war nun eine kleine | Das war nun eine kleine Einf"uhrung in SPL, aber wie jede Programmiersprache muss man sie selber erleben! Das Handbuch und den "Ubersetzer findet ihr unter \url{http://shakespearelang.sourceforge.net/}. | ||
Vielleicht ist das nun der Start einer wunderbaren Karriere als Buchautor, Dramatiker oder Poet? In jedem Fall ist diese Programmiersprache aber ein wunderbares Beispiel was zwei Informatikstudenten (in diesem Fall Karl | Vielleicht ist das nun der Start einer wunderbaren Karriere als Buchautor, Dramatiker oder Poet? In jedem Fall ist diese Programmiersprache aber ein wunderbares Beispiel was zwei Informatikstudenten (in diesem Fall Karl Hasselstr"om and Jon {\AA}slund, damals an der Universit"at Stockholm) mit ein wenig Freizeit und einer recht weit gefassten Projektaufgabe doch fantastisches bewerkstelligen k"onnen. | ||
\titel{Hello World} | |||
Um einen Geschmack zu bekommen, wie dann ein fertiges Programm aussieht, findet ihr hier den Programmcode des Hello World Programmes. Aus | Um einen Geschmack zu bekommen, wie dann ein fertiges Programm aussieht, findet ihr hier den Programmcode des Hello World Programmes. Aus Platzgr"unden jedoch ein wenig gek"urzt, sodass nur das Wort {\tt Hello} ausgegeben wird. | ||
\end{zweispaltig} | |||
\autor{CoLa} | |||
\begin{figure*}[!b] | |||
\begin{center} | |||
\includegraphics[width=15cm]{comics/shakespear}\\ | |||
\end{center} | |||
\end{figure*} | |||
\pagebreak | |||
= | \titel{The Infamous Hello World Program.} | ||
\begin{lstlisting}[caption={The Infamous Hello World Program.}, label = Shakespeare5] | |||
The Infamous Hello World Program. | The Infamous Hello World Program. | ||
Zeile 146: | Zeile 156: | ||
[...] | [...] | ||
\end{lstlisting} | \end{lstlisting} | ||