Il s’agit de développer un environnement
multimodal de programmation offrant à l’utilisateur les fonctions minimales
pour le déploiement d’applications telles que l’édition, la compilation et
l’exécution de programmes.
Nous considérons un langage simple de
programmation dédié pour le calcul sur les collections. Ces dernières sont
tout simplement des ensembles de nombres.
Le travail comporte deux parties.
La première partie est technique et consiste
à :
- Concevoir un langage simple pour le calcul
sur les collections et donc à définir la grammaire correspondante
(grammaire)
- Ecrire le compilateur associé (interpréteur)
et donc à réaliser les phases lexicale, syntaxique et sémantique. Une forme
intermédiaire (structure de données) est générée pour qu’elle soit
interprétée.
La seconde partie concerne l’interface et
consiste à concevoir un environnement multimodal dans lequel la parole est
prédominante permettant au moins l’édition, la compilation et l’exécution
des programmes écrits dans le langage considéré.
Nous utiliserons la technologie X+V (langage
de balisage combinant Xhtml et Voicexml) et l’outil SAPI d’IBM pour
réaliser l’application multimodale projetée.
Grammaire du
langage ( BNF étendue)
Les symboles
entre " désignent des terminaux . Les symboles entre < et > désignent des
non terminaux. Les symboles {, }, (, ), [ et ] sont des méta symboles
exprimant respectivement une répétition, un choix et une option.
<Pg> ::= { <instr> " ;" }*
<Inst> ::=
<Aff> | <Write> | <Read>
<Aff> ::=
"Idf" "=" <Exp>
<Read>
::= "Read" "Into" "Variable" "Idf" | "Read" "Into" "Collection" "Idf"
<Write> ::=
"Write" [ "Chaine de caractères" ] <Exp>
<Exp> ::=
<Terme> { ( "+" | "-" | "Union" | "Diff") <Terme> }*
<Terme>
::= <Facteur>{ ( "*" | "/" | "Inter") <Facteur>}*
<Facteur>
::= "Idf" | "Cste" | "(" <Exp> ")" | <Fonct> |"[" { ( "Cste" | "Idf"
|
"Random" ) }* "]"
<Fonct>
::= "Sum" "(" "Idf" ")" | "Mult" "(" "Idf" ")" |
"Average" "(" "Idf" ")" | "Random"
Sémantique
en langage naturel
- Un
programme est un ensemble d’instructions.
- Une
instruction peut être une affectation, une lecture ou une écriture.
- Une
lecture introduit une donnée dans une variable ou plusieurs données dans une
collection. Dans le dernier cas, les données sont séparées par des virgules
et terminés par un #.
- Une
écriture restitue ou affiche une expression. Cette dernière peut être
précédée d’un message (chaine de caractères).
- Le langage
manipule les collections et les variables simples.
- Les
collections et les variables ne sont pas définies de manière explicite (pas
de déclaration). La première utilisation définit le type.
- Une
collection est un ensemble de nombres (entiers ou réels).
- Une
expression peut porter uniquement sur des variables simples et constantes
(expression simple). Ex : A+5 ; 5-3 +2
- Une
expression peut porter uniquement sur des collections. Ex : A+[3, 8, 9] ;
[6, 9, 12, 5] – [5]
- Une
expression peut porter sur des collections, des variables simples et
constantes (expression complexe). Ex : 24 + [32, 7, 0, 45] ; 5*[2, 5] Union
32+ [34, 78]
- Les
fonctions Sum, Mult et Average ont comme argument des collections et
retourne des nombres.
- La
fonction Random génère un nombre aléatoire compris entre 0 et 106-1.
- Entre
collections, + et - sont équivalents à Union et Diff respectivement.
- une
opération (+, -, *, / ) entre un nombre et une collection donne une
collection. Ex : 5 * [3, 2, 0] donne [15, 10, 0]
Exemples de
programmes :
P1 : Read
into Collection A ; Read into Collection B ; Write A + B ;
P2 : Read
into Collection A ; Read into Variable B ; Write A + B ;
P3 : Read
into Collection A ; Write Sum(A) ;
P4 : Read
into Collection A ; C = A Union [3, 4, 7] ;Write "Le résultat est " C ;
|