2.4. Langage de commande
Dans cet exercice, on étudie brièvement la
structure d’un langage de commande. Ce langage est défini comme
suit :
<suite commandes> ::= <commande> | <commande> ; <suite commandes>
<commande> ::= <mot> | <mot> <suite paramètres>
<suite paramètres> ::= <mot> | <mot> <suite paramètres>
Un
mot est une unité lexicale constituée d’une suite de
caractère de longueur quelconque (>0), ne contenant pas
d’espace, tabulation, fin de ligne ou point-virgule, sauf s’il
commence par le caractère “ ' ” auquel cas le mot
se termine sur le caractère “ ' ” suivant, quels
que soient les caractères situés entre les deux. Dans ce cas, le
mot lui-même ne contient pas les caractères
“ ' ” de début et de fin.
A– Donner le découpage en mots et commandes
des lignes suivantes, en justifiant votre réponse :
cc -c toto.c
ld toto.o -o toto; rm toto.o
truc c'est le schmilblick
alias virus 'bidule toto; machin'
B– L’interpréteur
de commande reconnaît la commande interne
alias, qui a deux arguments A1 et A2, et
qui ajoute le couple <A1, A2> à une table de correspondance des
alias. Cette table conserve donc les associations entre les arguments des
commandes alias déjà
exécutées. Après avoir effectué le découpage
en mot d’une commande quelconque, l’interpréteur recherche le
premier mot de la commande dans cette table (première composante
d’un couple), et s’il le trouve, le remplace, dans la commande en
cours, par la valeur associée (deuxième composante du couple).
Expliquer l’intérêt de ce mécanisme, et décrire
son effet sur la ligne suivante :
virus alpha
Solution
de l’exercice 2.4
2.4.1. Question A
Il y a peu de difficulté sur le découpage des
mots. En fait, c’est en général l’espace ou la fin de
ligne qui détermine la fin d’un mot, sauf si le mot commence avec
le caractère “ ' ”. Le seul caractère
particulier étant lui-même unité lexicale est le
“ ; ”. Le découpage en mot est la
suivante :
cc -c
toto.c Il n’y a qu’une seule commande avec
deux paramètres.
ld toto.o
-o toto ; rm
toto.o Il y a ici deux commandes, l’une
ld avec trois paramètres, et
l’autre rm avec un
paramètre.
truc c'est
le schmilblick Il n’y a qu’une
seule commande avec trois paramètres. Le caractère
“ ' ” présent dans
c'est,
n’étant pas en début de mot est considéré,
comme un caractère ordinaire.
alias virus
bidule toto; machin Il y a une seule commande, avec deux
paramètres. Notons que le caractère “ ' ”
étant en début de mot implique que la fin du mot est le
caractère “ ' ” suivant. Ces deux caractères
spéciaux ont été enlevés du mot, puisqu’ils
n’en font pas partie. Ce ne sont pas non plus des symboles du langage,
mais des délimiteurs lexicaux, comme l’espace ou la fin de la
ligne. Par ailleurs, le “ ; ” est considéré
ici comme un caractère quelconque faisant partie du mot, et non symbole
du langage.
2.4.1. Question A
Le mécanisme d’alias est en fait un
mécanisme d’abréviation (voir 15.2.4). Sur la commande
virus alpha, il va y avoir
substitution du mot virus par le mot associé, pour donner la suite de
commandes :
bidule toto; machin alpha
Ceci
sera donc interprété comme une suite de deux commandes :
bidule toto suivie de
machin alpha.