Toute combinaison de primitives de base est legale et a un sens.
1. Orthogonalite
Des avantages de l'orthogonalite sont donc :
Il etait ici important d'evoquer l'importance de la phase de maintenance dans le "cycle de vie" d'un logiciel. C'est en grande partie dans cette phase que la lisibilite va trouver toute son importance surtout si ce n'est pas le concepteur original qui en est charge.
Les caracteristiques ameliorant la lisibilite sont les suivantes :
Algol 60 est ne du desir de creer un langage universel et libre (Fortran appartenait a IBM).3. Algol 60 / Fortran
Ses buts :
Mais Algol a ete accepte dans la publication et a donc fait evoluer
enormement la conception des langages. C'est pourquoi nombreux sont les
langages posterieurs qui lui doivent beaucoup : PL/I, SIMULA 67,
ALGOL 68, C, Pascal, Ada et C++ sont les plus importants...
Probablement la question la plus difficile du devoir.1. Trouver une grammaire...
La reponse ideale etait probablement :
<chaine> -> (<chaine>) | [(<chaine>),<chaine>] | [<caractere>,<chaine>]
| <caractere>
<caractere> -> x | y
La variante suivante etait egalement acceptable et meme plus lisible :
<chaine> -> <element> | [<element>,<chaine>]
<element> -> (<chaine>) | <caractere>
<caractere> -> x | y
La question etait relativement facile donc la correction a ete relativement peu tolerante. Comme aucune derivation particuliere n'etait imposee, toutes les formes ont ete acceptees.2. Derivation
abag
S -> aA
-> abA
-> abCg
-> abag
aabg
S -> Bg
-> CBg
-> aBg
-> aCbg
-> aabg
S
/ \
B g
/ \
C B
| / \
a C b
|
a
La seule demonstration valable et rigoureuse de l'ambiguite etait d'utiliser un exemple. Prenons a * b *a.3. Ambiguite
S
|
X
/ | \
X * X
/ | \ |
X *X Y
| | |
Y Y a
| |
a b
S
|
X
/ | \
X * X
| / | \
Y X *X
| | |
a Y Y
| |
b a
On obtient donc deux arbres differents pour la meme expression, la grammaire est ambigue.
Les propositions suivantes etaient valables :
S -> X
X -> X * Y | Y
Y -> a | b | c
S -> X
X -> Y*X | Y
Y -> a | b | c
S -> Y*S | Y
Y -> a | b | c