Shakespeare Programming Language
The Shakespeare Programming Language (SPL) is an esoteric programming language designed by Jon Åslund and Karl Wiberg. Like the Chef programming language, it is designed to make programs appear to be something other than programs - in this case, Shakespearean plays. A character list in the beginning of the program declares a number of stacks, naturally with names like "Romeo" and "Juliet". These characters enter into dialogue with each other in which they manipulate each other's topmost values, push and pop each other, and do I/O. The characters can also ask each other questions which behave  as conditional statements. On the whole, the programming model is very similar to assembly language but much more verbose. Programming in Shakespeare. Title. The first line in a Shakespeare program is called the 'title'. The compiler considers anything from the first line to the first period to be a comment. Dramatis Personae. This is the section where variables are declared. Each variable can hold a signed integer value and is of the following form: Where codice_1 is the name of the variable and codice_2 is ignored by the compiler. The compiler will recognize only those names that correspond to actual  Shakespearean characters. Acts and scenes. A piece of code in Shakespeare is broken into codice_3 which contain codice_4 in which characters (variables) interact. Each codice_5 and codice_6 is numbered with a Roman numeral and serves as a codice_7 label. Any code after the colon is considered a comment. They are written in the form: Enter, exit and exeunt. Individual lines of code generally take the form of a piece of dialogue spoken by one character to another; this is how the value of a variable (the character spoken to) is assigned, changed, or output. A character can only be addressed  as "you" or "thou". Thus, there must typically be exactly two characters "on stage" whenever lines are spoken: one to speak, and the other to be spoken to. To call a variable to the stage the codice_8 command is used with a list of one or more characters. The codice_9 command tells exactly one listed character to leave the stage. codice_10 calls more than one character to leave, or in the case that no characters are listed all the characters will leave the stage. The following format is used: Lines. Lines are represented as dialogue spoken by a character, and  consist of at least one sentence. Each sentence may assign a new value to a variable, direct a variable to output its value, or direct it to receive an input. Lines can also manipulate stacks or act as if/then or goto statements. A line starts with a character's name and a colon. Since this character is the speaker, the other character on stage is the variable that is addressed as "you" or "thou". Constants and assignment of values. Constants are represented by combinations of nouns and adjectives; the language recognizes a finite list of each, and both lists  are separated into those having positive, negative, or neutral tone, as perceived by Åslund and Hasselström. Positive and neutral nouns have a value of 1 and negative nouns have a value of -1. Any adjective multiplies a noun by 2, and adjectives can be compounded. Possessive pronouns are ignored by the parser, while words pertaining to basic arithmetic are recognized as operations, such as "sum", "quotient", and "cube". A sentence that assigns a value to a character starts with "You" or "Thou", may optionally continue with "are as [any adjective] as", and then gives the mathematical formula in nouns, adjectives , variables, and operations for the new value. Examples of such lines follow: The mathematical formulae can also use the names of other characters (even if those characters are not on stage) to utilize the current value of that character in a computation, or "yourself" or "thyself" for the character being spoken to. Input and output. Lines can also call for a variable to give output or receive input. "Open your heart" outputs the variable's numerical value, while "Speak your mind" outputs the corresponding ASCII character. "Listen to your heart" or "Open your mind" cause the variable to receive input  from the user; the former for a number and the latter for a character. Conditional statements and gotos. An if/then statement is phrased as a question posed by a character. The words "as [any adjective] as" represent a test for equality, while "better" and "worse" correspond to greater than and less than, respectively. A subsequent line, starting "if so" or "if not", determines what happens in response to the truth or falsehood of the original condition. A goto statement begins "Let us", "We shall", or "We must", continues "return to" or "proceed to", and then gives an act or  scene. A scene will be parsed as that scene in the current act; a goto statement cannot call a scene in a different act. A conditional statement to call a goto would look like this: Pushing and popping stacks. Each variable is a stack. A variable will have an integer pushed onto its stack if a line tells the character to "remember" an appropriate value, such as "Remember me", or "Remember yourself". The topmost value in the stack is popped (i.e., the variable assumes this value) if the character is told to "recall" anything; all text after this word  is treated as a comment. Example code. The standard "Hello, World!" program: