Le Shakespeare Programming Language ( SPL ) est un langage de programmation ésotérique conçu par Jon Åslund et Karl Wiberg. Comme le langage de programmation Chef , il est conçu pour faire apparaître les programmes comme autre chose que des programmes — dans ce cas, des pièces de Shakespeare .
Une liste de caractères au début du programme déclare un certain nombre de piles , naturellement avec des noms comme « Roméo » et « Juliette ». Ces personnages entrent en dialogue les uns avec les autres dans lequel ils manipulent les valeurs les plus élevées des autres, se poussent et se dévissent les uns les autres, et font des E/S . Les personnages peuvent également se poser des questions qui se comportent comme des instructions conditionnelles . Dans l'ensemble, le modèle de programmation est très similaire au langage assembleur mais beaucoup plus verbeux.
Programmation en Shakespeare
Titre
La première ligne d'un programme Shakespeare est appelée le « titre ». Le compilateur considère que tout ce qui se trouve entre la première ligne et le premier point est un commentaire.
Personnages dramatiques
Il s'agit de la section dans laquelle les variables sont déclarées. Chaque variable peut contenir une valeur entière signée et se présente sous la forme suivante :
Nom, description
Où Nameest le nom de la variable et Descriptionest ignoré par le compilateur. Le compilateur ne reconnaîtra que les noms qui correspondent à des personnages shakespeariens réels.
Actes et scènes
Un morceau de code dans Shakespeare est divisé en plusieurs parties Actsqui contiennent Scenesdes caractères (variables) qui interagissent. Chacun Actd'eux Sceneest numéroté avec un chiffre romain et sert d' GOTOétiquette. Tout code après les deux points est considéré comme un commentaire. Ils sont écrits sous la forme :
Acte I : Insultes et flatteries d'Hamlet. Scène I : L'insulte envers Roméo.
Entrer, sortir et sortir
Les lignes de code individuelles prennent généralement la forme d'un morceau de dialogue parlé par un personnage à un autre ; c'est ainsi que la valeur d'une variable (le personnage auquel on parle) est affectée, modifiée ou générée. Un personnage ne peut être appelé que par « Vous », « Tu » ou « Toi ». Ainsi, il doit généralement y avoir exactement deux personnages « sur scène » à chaque fois que des lignes sont prononcées : l'un pour parler et l'autre pour être parlé. Pour appeler une variable sur la scène, la Entercommande est utilisée avec une liste d'un ou plusieurs personnages. La Exitcommande indique exactement à un personnage répertorié de quitter la scène. Exeuntappelle plusieurs personnages à quitter la scène, ou dans le cas où aucun personnage n'est répertorié, tous les personnages quitteront la scène. Le format suivant est utilisé :
[Entre Juliette] [Entrent Roméo et Juliette] [Roméo sort] [Sortent Roméo et Juliette] [Sortent]
Lignes
Les lignes sont représentées sous forme de dialogues prononcés par un personnage et se composent d'au moins une phrase. Chaque phrase peut attribuer une nouvelle valeur à une variable, ordonner à une variable de sortir sa valeur ou de recevoir une entrée. Les lignes peuvent également manipuler des piles ou agir comme des instructions if/then ou goto. Une ligne commence par le nom d'un personnage et deux points. Étant donné que ce personnage est l'orateur, l'autre personnage sur scène est la variable à laquelle on s'adresse par « Vous », « Toi » ou « Toi ».
Constantes et attribution de valeurs
Les constantes sont représentées par des combinaisons de noms et d'adjectifs ; la langue reconnaît une liste finie de chacun, et les deux listes sont séparées en celles ayant un ton positif, négatif ou neutre, comme le perçoivent Åslund et Hasselström. Les noms positifs et neutres ont une valeur de 1 et les noms négatifs ont une valeur de -1. Tout adjectif multiplie un nom par 2, et les adjectifs peuvent être composés. Les pronoms possessifs sont ignorés par l'analyseur, tandis que les mots appartenant à l'arithmétique de base sont reconnus comme des opérations, telles que « somme », « quotient » et « cube ». Une phrase qui attribue une valeur à un caractère commence par « You », « Thou » ou « Thee », peut éventuellement continuer par « are as [any adjective] as », puis donne la formule mathématique en noms, adjectifs, variables et opérations pour la nouvelle valeur. Voici des exemples de telles lignes :
Hamlet: Toi, menteur, stupide, orphelin, grand, puant, à moitié lâche ! Juliette : Tu es aussi méchant que la racine carrée de Roméo !
Les formules mathématiques peuvent également utiliser les noms d'autres personnages (même si ces personnages ne sont pas sur scène) pour utiliser la valeur actuelle de ce personnage dans un calcul, ou « vous-même » ou « toi-même » pour le personnage à qui l'on parle.
Entrée et sortie
Les lignes peuvent également faire appel à une variable pour donner une sortie ou recevoir une entrée. « Ouvrez votre cœur » renvoie la valeur numérique de la variable, tandis que « Dites ce que vous pensez » renvoie le caractère ASCII correspondant. « Écoutez votre cœur » ou « Ouvrez votre esprit » font que la variable reçoit une entrée de l'utilisateur ; la première pour un nombre et la seconde pour un caractère.
Instructions conditionnelles et gotos
Une instruction if/then est formulée comme une question posée par un personnage. Les mots « as [any adjective] as » représentent un test d'égalité, tandis que « better » et « worst » correspondent respectivement à greater than et less than. Une ligne suivante, commençant par « if so » ou « if not », détermine ce qui se passe en réponse à la vérité ou à la fausseté de la condition d'origine. Une instruction goto commence par « Let us », « We shall » ou « We must », continue par « return to » ou « proceed to », puis donne un acte ou une scène. Une scène sera analysée comme cette scène dans l'acte en cours ; une instruction goto ne peut pas appeler une scène dans un acte différent. Une instruction conditionnelle pour appeler un goto ressemblerait à ceci :
Juliette : Suis-je meilleur que toi ? Hamlet: Si c’est le cas, passons à la scène II.
Pousser et faire éclater des piles
Chaque variable est une pile . Une variable aura un entier poussé sur sa pile si une ligne indique au personnage de « se souvenir » d'une valeur appropriée, telle que « Souviens-toi de moi » ou « Souviens-toi de toi ». La valeur la plus haute de la pile est extraite (c'est-à-dire que la variable prend cette valeur) si le personnage est invité à « se souvenir » de quelque chose ; tout le texte après ce mot est traité comme un commentaire.
Exemple de code
Le programme standard « Hello, World ! » :
L'idée est de générer les valeurs ASCII de chaque caractère de la chaîne et de les imprimer à l'aide de la commande « Dites ce que vous pensez ». Par exemple, la première ligne de dialogue dite par Hamlet utilise une combinaison d'opérations arithmétiques pour attribuer la valeur décimale 72 (binaire 1001000) à l'autre protagoniste Roméo, ce qui en ASCII correspond à la lettre « H ».
Ne dis pas adieu, une pièce en deux actes. Roméo, un jeune homme doté d'une patience remarquable. Juliette, une jeune femme également d'une grâce remarquable. Ophélie, une femme remarquable, très en conflit avec Hamlet. Hamlet, le flatteur d'Andersen Insultant A/S. Acte I : Insultes et flatteries d'Hamlet. Scène I : L'insulte envers Roméo. [Entrent Hamlet et Roméo] Hamlet: Toi, menteur, stupide, orphelin, grand, puant, à moitié lâche ! Tu es aussi stupide que la différence entre un beau riche et un brave Héros et toi-même ! Dis ce que tu penses ! Tu es aussi courageux que la somme de ta grosse petite peluche mal utilisée et poussiéreuse vieille braguette pourrie et un bel été ensoleillé, chaud et paisible jour. Vous êtes en aussi bonne santé que la différence entre la somme des la plus douce et la plus rouge des roses, mon père et toi-même ! Dis-moi ce que tu penses ! Tu es aussi lâche que la somme de toi-même et de la différence Entre un grand royaume puissant et fier et un cheval. Dites ce que vous pensez. Dites ce que vous pensez ! [Roméo sort] Scène II : L'éloge de Juliette. [Entre Juliette] Hamlet: Tu es aussi doux que la somme de la somme de Roméo et de son cheval et de son Chat noir ! Dis ce que tu penses ! [Sortie Juliette] Scène III : L'éloge d'Ophélie. [Entre Ophélie] Hamlet: Tu es aussi belle que la différence entre Roméo et le carré d'un immense arbre vert et paisible. Dis ce que tu penses ! Tu es aussi belle que le produit d'une grande ville rurale et mon incroyable bourse brodée sans fond. Dis ce que tu penses ! Tu es aussi aimant que le produit du ciel le plus bleu, le plus clair et le plus doux et la somme d'un écureuil et d'un cheval blanc. Tu es aussi belle que la différence entre Juliette et toi. Dis ce que tu penses ! [Sortent Ophélie et Hamlet] Acte II : Dans le dos d'Hamlet. Scène I : Conversation de Roméo et Juliette. [Entrent Roméo et Juliette] Roméo : Dites ce que vous pensez. Vous êtes aussi inquiet que la somme de vous-même et de la différence entre mon petit hamster lisse et mon nez. Parlez votre esprit! Juliette : Dis ce que tu penses ! Tu es aussi mauvais qu'Hamlet ! Tu es aussi petit que le différence entre le carré de la différence entre mon petit poney et ton gros chien poilu et le cube de ton pauvre petit braguette. Dites ce que vous pensez ! [Roméo sort] Scène II : Conversation de Juliette et Ophélie. [Entre Ophélie] Juliette : Tu es aussi bon que le quotient entre Roméo et la somme d'un petit un animal à fourrure et une sangsue. Dites ce que vous pensez ! Ophélie : Tu es aussi dégoûtant que le quotient entre Roméo et deux fois le différence entre un gui et une ampoule infectée suintante ! ton esprit! [Sortent]