INTERCAL-72 (la version originale d'INTERCAL) connaissait seulement quatre types, l'entier 16-bit (représenté par un .
, appelé un 'spot'), l'entier 32 bits (:
, un 'double-spot), le tableau d'entiers 16 bits (,
, une 'queue'), et le tableau d'entiers 32 bits (;
, un 'hybride'). Il y a 65535 variables disponibles de chaque type, numérotées de .1
à .65535
pour les entiers 16 bits, en l'occurrence. Néanmoins, chacune de ces variables a sa propre pile sur laquelle elle peut être poussée ou reprise (STASHée et RETRIEVée, en terminologie INTERCAL), augmentant la possible complexité des structures de données (les versions plus modernes d'INTERCAL ont dans les grandes lignes conservé les mêmes structures de données, avec des modifications appropriées ; TriINTERCAL, qui modifie la base avec laquelle les nombres sont représentés, peut utiliser un type 10 trits plutôt qu'un type 16 bits, et le CLC-INTERCAL implémente nombre de ses propres structures de données, comme les 'classes et conférences', en faisant stocker plus d'information aux types de données de base plutôt que d'ajouter de nouveaux types.) Les tableaux sont dimensionnés en leur assignant un nombre comme s'ils étaient un type scalaire. Des constantes peuvent aussi être utilisées, et sont représentées par une #
('grille') suivie de la constante elle-même, écrite sous forme d'un nombre décimal ; seules les constantes entières de 0 à 65535 sont supportées.
Il y a seulement cinq opérateurs en INTERCAL-72 ; les implémentations diffèrent selon quel caractère représente quelle opération, et beaucoup acceptent plus d'un caractère, c'est pourquoi plus d'une possibilité est donnée pour de nombreux opérateurs.
Opérateur | caractères INTERCAL-72 | caractères Atari | caractères C-INTERCAL | caractères CLC-INTERCAL |
---|---|---|---|---|
INTERLEAVE ("intercaler") / MINGLE ("mélanger") | c retour arrière / | $ | ¢ , $ , c retour arrière / | ¢ |
SELECT ("sélectionner") | ~ | ~ | ~ | ~ |
AND ("et") | & | & | & | & |
OR ("ou") | V | V | V | V |
XOR ("ou exclusif") | V retour arrière - | ? | V retour arrière - , ? , ? | V retour arrière - , ¥ |
Contrairement à la plupart des autres langages, les opérateurs AND, OR, et XOR sont des opérateurs unaires, qui fonctionnent sur les bits consécutifs de leur argument ; le bit de poids fort du résultat est l'opérateur appliqué aux bit de poids fort et bit de poids faible de l'entrée, le second bit de poids fort du résultat est l'opérateur appliqué au premier et second bit de poids fort, le troisième bit de poids fort du résultat est l'opérateur appliqué au second et troisième bit de poids fort, et ainsi de suite. L'opérateur est placé entre le signe de ponctuation qui spécifie un nom de variable ou une constante et le nombre qui spécifie de quelle variable il s'agit, ou simplement à l'intérieur de marqueurs de regroupement (c'est-à-dire un caractère plus loin qu'il le serait dans des langages de programmation comme le C.) SELECT et INTERLEAVE (également connu sous le nom de MINGLE) sont des opérateurs binaires infixes ; SELECT prend les bits de sa première opérande qui correspondent aux bits à '1' de sa seconde opérande et supprime les bits qui correspondent à '0', décalant vers le bit de poids faible et remplissant avec des zéros (ainsi 51 (110011 en binaire) SELECT 21 (10101 en binaire) donne 5 (101 en binaire)); MINGLE alterne les bits de sa première et seconde opérande (de telle manière que le bit de poids faible de la seconde opérande soit le bit de poids faible du résultat). Il n'y a pas de précédence des opérateurs ; des marqueurs de regroupement doivent être utilisées pour expliciter la priorité dans les cas où elle serait ambigüe (les marqueurs de regroupement disponibles sont '
('étincelle') qui est à mettre en rapport avec une autre étincelle, et "
('oreilles de lapin') qui est à mettre en rapport avec d'autres oreilles de lapin ; le programmeur de l'utilisation de celles-ci de telle manière qu'elles rendent l'expression non ambigüe.)
Les commandes en INTERCAL commencent toutes par un 'identificateur de commande' ; en INTERCAL-72, ceci peut être DO
, PLEASE
, ou PLEASE DO
, chacun desquels ayant la même signification en ce qui concerne le programme (mais l'utilisation de l'un d'entre eux en excès provoque le rejet du programme, une fonctionnalité non documentée d'INTERCAL-72 qui fut mentionnée dans le manuel du C-INTERCAL), ou bien par une forme inversée (avec NOT
ou N'T
ajouté à l'identificateur). Backtracking INTERCAL, une variante moderne, autorise également des variantes comme MAYBE
("peut-être", qui peut être combiné avec PLEASE ou DO) en tant qu'identificateurs de commande, ce qui introduit la notion de hasard. Avant l'identificateur, un numéro de ligne optionnel peut être donné (un entier encadré par des parenthèses) ; après l'identificateur, un pourcentage de chance que la ligne soit exécutée peut être donné au format %50
, lequel prend par défaut la valeur 100%.
En INTERCAL-72, les structures de contrôle principales sont NEXT ("suivant"), RESUME ("reprend"), et FORGET ("oublie"). DO (ligne) NEXT
branche le programme à la ligne indiquée, en se souvenant de la ligne suivante qui aurait été exécutée s'il n'y avait pas eu ce NEXT sur la pile d'appel (d'autres identificateurs que DO peuvent être utilisés sur n'importe quelle commande, DO est simplement donné ici comme exemple) ; DO FORGET expression
supprime les entrées égales à expression du haut de la pile d'appel (ceci est utile pour éviter l'erreur qui survient autrement lorsqu'il y a plus de 80 entrées), et DO RESUME expression
supprime les entrées expression de la pile d'appel et branche le programme à la dernière ligne mémorisée.
C-INTERCAL fournit aussi l'instruction COME FROM
, qui s'écrit DO COME FROM (ligne)
; le CLC-INTERCAL et les versions les plus récentes du C-INTERCAL fournissent également des versions calculatoires de COME FROM (DO COME FROM expression
) et NEXT FROM, qui fonctionne comme COME FROM mais sauvegarde également une adresse de retour sur la PROCHAINE pile.
Des moyens alternatifs d'affecter le flux du programme, disponibles à l'origine en INTERCAL-72, sont d'utiliser les instructions IGNORE et REMEMBER ("souviens-toi") sur des variables (ce qui permet que les écritures sur cette variable soient discrètement ignorées puis reprennent effet, de sorte que des instructions puissent être désactivées), et les instructions ABSTAIN ("abstiens-toi") et REINSTATE ("réhabilite") sur des lignes ou sur des types de commande, ce qui désactive la ligne ou la réactive respectivement.
L'entrée (qui utilise l'instruction WRITE IN
) et la sortie (qui utilise l'instruction READ OUT
) n'emploient pas le format habituel ; en INTERCAL-72, WRITE IN gère l'entrée d'un nombre écrit en toutes lettres en langue anglaise (comme SIX FIVE FIVE THREE FIVE), et READ OUT l'imprime en chiffres romains. Les versions plus récentes ont leur propre système d'E/S. Les commentaires peuvent être réalisés en utilisant les inverseurs d'identificateur de commande NOT ou N'T ; ceux-ci provoquent l'abstention d'exécution (ABSTAIN) de ces lignes de sorte qu'elles n'ont pas d'effet (une ligne peut être en abstention même si elle ne possède pas une syntaxe valide ; les erreurs de syntaxe surviennent à l'exécution, et seulement à ce moment-là quand la ligne n'est pas en abstention.).