Titre du programme et partie déclaration
Chaque programme est composé d'un titre et d'un bloc. Le bloc contient une partie déclaration, dans laquelle sont définis tous les objets locaux du programme, et une partie instruction, qui spécifie les actions à exécuter sur ces objets.
|
<programme> ::= <entête du programme> <bloc>. <bloc> ::= <partie déclaration d'étiquette> <partie de définition constante> <partie de définition de type> <partie de déclaration de variable> <partie déclaration de procédure et de fonction> <partie déclaration> |
Entête du programme
L'entête donne un nom au programme (sans signification particulière au sein du programme) et répertorie ses paramètres, grâce auxquels le programme communique avec l'environnement :
|
<entête du programme> ::= program <identificateur> { <identificateur de fichier> { , <identificateur de fichier> } ); |
Partie déclaration d'étiquette
Toute instruction d'un programme peut être marquée en la préfixant d'une étiquette suivie de deux points (permettant une référence par une instruction goto). Cependant, l'étiquette doit être définie dans la partie déclaration d'étiquette avant son utilisation. Le symbole étiquette en tête de cette partie, ayant la forme générale suivante :
| label <étiquette> {, <étiquette>}; |
Une étiquette est définie comme un entier non signé, composé d'au plus 4 chiffres.
Exemple :
- label 3,18;
Définition d'une constante
Une définition de constante introduit un identifiant comme synonyme d'une constante. Le symbole const introduit la définition de la constante, ayant la forme générale suivante :
| const <identificateur> = <constante>; {<identificateur> = <constante>: |
Où une constante est soit un nombre, soit un identifiant de constante (éventuellement signé), soit une chaîne de caractères.
L'utilisation d'identifiants de constantes améliore généralement la lisibilité d'un programme et constitue une aide pratique à la documentation. Elle permet également au programmeur de regrouper les quantités dépendantes de la machine ou de l'exemple au début du programme, où elles peuvent être facilement notées et/ou modifiées. (Ce qui favorise la portabilité et la modularité du programme.)
À titre d'exemple, considérons le programme suivant :
- { exemple de partie de définition constante }
-
- program convert(output);
-
- const addin = 32; mulby = 1.8; low = 0; high = 39;
- separator = ' ----------';
- var degree : low..high;
- begin
- writeln(separator);
- for degree := low to high do
- begin write(degree,'c',round(degree*mulby + addin),'f');
- if odd(degree) then writeln
- end;
- writeln;
- writeln(separator)
- end.
on obtiendra le résultat suivant :
----------0c 32f 1c 34f
2c 36f 3c 37f
4c 39f 5c 41f
6c 43f 7c 45f
8c 46f 9c 48f
10c 50f 11c 52f
12c 54f 13c 55f
14c 57f 15c 59f
16c 61f 17c 63f
18c 64f 19c 66f
20c 68f 21c 70f
22c 72f 23c 73f
24c 75f 25c 77f
26c 79f 27c 81f
28c 82f 29c 84f
30c 86f 31c 88f
32c 90f 33c 91f
34c 93f 35c 95f
36c 97f 37c 99f
38c 100f 39c 102f
----------
Partie définition de type
En Pascal, un type de données peut être décrit directement dans la déclaration de variable ou référencé par un type identifiant. Outre plusieurs identifiants de type standard, un mécanisme de création de nouveaux types est fourni. Le type symbole introduit une partie de programme contenant les définitions de type. La définition elle-même détermine un ensemble de valeurs et lui associe un identifiant. La forme générale est :
| type <identificateur> = <type>; {<identificateur> <type>;} |
Partie déclaration de variable
Chaque variable apparaissant dans une instruction doit être déclarée dans une déclaration de variable. Cette déclaration doit précéder textuellement toute utilisation de la variable.
Une déclaration de variable associe un identifiant et un type de données à une nouvelle variable en listant simplement l'identifiant suivi de son type. Le symbole var est en tête de la partie déclaration de variable.
La forme générale est :
|
var <identificateur> {. <identificateur>} : <type>; {<identificateur> {, <identificateur>} : <type>; |
Exemp1e :
- var root1,root2,root3: real;
- count,i: integer;
- found: Boolean;
- filler: char;
Cette association identifiant/type est valide dans tout le bloc contenant la déclaration, sauf si l'identifiant est redéfini dans un bloc subordonné. Supposons qu'un bloc B soit imbriqué dans le bloc A (c'est-à-dire déclaré dans la portée de A et donc subordonné à celui-ci). Il est possible de déclarer dans B un identifiant déjà déclaré dans A. Cela a pour effet d'associer cet identifiant à une variable locale à B - non disponible pour A - pouvant être de n'importe quel type. Cette dernière définition est alors valide dans toute la portée de B, sauf redéclaration dans un bloc subordonné à B. Il n'est pas permis de déclarer un même identifiant plus d'une fois au même niveau et à la même portée. Par conséquent, ce qui suit est toujours incorrect :
- var a : integer;
- a : real;
Partie Déclaration de procédure et de fonction
Toute procédure ou fonction doit être définie (ou annoncée) avant son utilisation. Les procédures sont des sous-routines activées par des instructions de procédure. Les fonctions sont des sous-routines générant une valeur de résultat et peuvent donc être utilisées comme constituants d'expressions.