On illustre la démarche par un exemple.
2. La syntaxe abstraite et les schémas de décompilation
3. La représentation textuelle
4. La concentration des variables
5. La concentration des propriétés
Figure 1 : le langage
On donne la grammaire du langage de programmation choisi pour l'exemple, dans une notation voisine de la notation BNF, et un exemple de programme « syntaxiquement correct ».
Par exemple : l'affectation
<affect> ::= <VAR> := <EXP>
Le terme <affect> se dérive en :
- le terme <VAR> (terminal instanciable du langage),
- le symbole ":=",
- le terme <EXP> (terminal instanciable).
Figure 1 : le langage [ << masquer ]
grammaire
Notations :
::= | : | le terme de gauche se dérive en l'expression de droite |
| | : | indique un choix dans la dérivation |
{...} | : | répétition de l'expression entre accolades, 0, 1 ou plusieurs fois |
[...] | : | expression optionnelle |
<pgme> ::= <pgme-decla> <pgme-instr>
<pgme-decla> ::= VAR { <decla> }
<pgme-instr> ::= { <instr> }
<decla> ::= <NOM> | <TYP>
<instr> ::= <affect> | <affiche> | <cond>
<affect> ::= <VAR> := <EXP>
<affiche> ::= write( <EXP> )
<cond> ::= if <expr-cond>
then { <instr> }
[ else { <instr> } ]
endif
<expr-cond> ::= <EXP> = <EXP> | <EXP> <> <EXP>
<NOM> <TYP> <VAR> <EXP> ::= terminaux instanciables
exemple
VAR x:integer
y:real
x:=0
y:=1.0
if x=y
then
write('Ok')
else
x:=y
write('Erreur')
endif
write('fin')