Programme Shakespeare (.spl)
Sortie
Mini-langage impératif
+ - * / %, if/else, while,
print/printc, read/readc.
Voir l'onglet Documentation pour la syntaxe et les limites.Pièce Shakespeare générée
Le langage Shakespeare, en bref
Un programme Shakespeare (SPL) ressemble à une pièce de théâtre, mais c'est en réalité un langage impératif proche de l'assembleur. Chaque personnage est une variable entière signée. Deux personnages au maximum sont « sur scène » et se parlent : quand l'un parle, ses phrases agissent sur l'autre (l'interlocuteur, « you »). « moi / je » (« me / I ») désigne le locuteur.
Structure d'une pièce
Titre de la pièce. Romeo, une description libre. Juliet, une autre description. Act I: Nom de l'acte. Scene I: Nom de la scène. [Enter Romeo and Juliet] Romeo: You are as good as the sum of a cat and a cat. Romeo: Open your heart. [Exeunt]
Valeurs & constantes « poétiques »
Un nom vaut 1, et chaque adjectif double la valeur. Les noms « gentils » ou neutres
sont positifs, les noms « méchants » sont négatifs. nothing/zero valent 0.
| Écriture | Valeur |
|---|---|
a cat | 1 |
a big cat | 2 (1 adjectif) |
a big furry cat | 4 (2 adjectifs) |
a pig / a big pig | -1 / -2 (nom négatif) |
the sum of a big cat and a cat | 3 |
Opérations (dites par un personnage à l'autre)
| Phrase | Effet sur l'interlocuteur |
|---|---|
You are as good as valeur. | affectation |
the sum of A and B | A + B |
the difference between A and B | A − B |
the product of A and B | A × B |
the quotient between A and B | A ÷ B |
the remainder of the quotient between A and B | A mod B |
Open your heart. | affiche la valeur (nombre) |
Speak your mind. | affiche le caractère (code ASCII) |
Listen to your heart. | lit un nombre |
Open your mind. | lit un caractère |
Remember valeur. / Recall … | empile / dépile (pile par personnage) |
Contrôle de flux
Une question (Am I better than you?) fixe un booléen global, puis une phrase
conditionnelle décide d'un saut :
Romeo: Am I better than you? If so, let us proceed to scene III.
Comparateurs : better than (>), worse than (<),
as good as (=). Les sauts se font vers des scènes (proceed to /
return to).
Le mini-langage → traducteur
Le traducteur compile un petit langage impératif classique en Shakespeare valide, de façon déterministe. Il gère les entiers uniquement.
| Construction | Exemple |
|---|---|
| déclaration | let x = 3 |
| affectation | x = x + 1 |
| expression | + - * / %, parenthèses, moins unaire |
| sortie nombre | print x |
| sortie caractère | printc 72 → H |
| lecture nombre | read x |
| lecture caractère | readc c |
| condition | while i <= 10 { … } |
| test | if x % 3 == 0 { … } else { … } |
| commentaire | # … jusqu'à la fin de la ligne |
Limites (assumées)
- Entiers signés uniquement — pas de flottants, pas de chaînes de caractères (travailler code ASCII par code ASCII).
- Comparaisons simples
a OP b— pas deand/orbooléens (imbriquer lesif). - Chaque variable/temporaire occupe un personnage : nombre total borné (~140).
- Entrée : un nombre par ligne ; les caractères se lisent un par un.
printn'ajoute pas d'espace : plusieurs nombres se collent.
Astuce : transpile un exemple, envoie-le vers l'éditeur, puis lance le mode pas à pas pour voir chaque personnage prendre sa valeur.