G r a m m a i r e   d u   l a n g a g e  Z



Conventions :

~ --- | --- ~        :           Choix
[ --- ]                 :           Partie facultative
{ --- }*              :           Répétition ( 0 ou plusieurs fois )


Déclarations

<Algo Z>        ::=        [ ~ SOIT | SOIENT ~ <Ps> ] DEBUT  <Lis>  FIN [ ; ]
                        
          { ~<Act>  |  <Fonct> ~  [  ;  ]  }*

<Act>             ::=       ACTION Idf [ (Li ) ] [ ; ]
                       
           [ ~SOIT | SOIENT~ <Ps> ] DEBUT  <Lis>  FIN

<Fonct>         ::=        FONCTION Idf (Li ) : <Typ>
                      
            [ ~SOIT | SOIENT~ <Ps> ] DEBUT <Lis> FIN

<Ps>               ::=       <S> ; {~ SOIT | SOIENT ~ <S> ; }*

<S>                 ::=        Li  Sep ~ <Typ> | ACTION | FONCTION(<Typ>) ~

<Typ>            ::=        Types<Ss> | <Sc> |
                                   MACHINE_CAR
 | MACHINE_NOMBRE |
                                  
[ POINTEUR VERS [Sep] ] LISTE [ DE ~Types | <Ss> ~ ]  |
                                   TABLEAU (
Listcste) [DE ~<Ss> | Types ~ ]
                                   FICHIER DE 
~ Types | VECTEUR ( Cste ) DE Types  | <Ss> | <Sc> ~
                                   BUFFER
 Li   [ENTETE] ( Types { , Types }* )

<Ss>               ::=        [STRUCTURE ]( Types {, Types }*)
<Sc>               ::=        [STRUCTURE ] ( ~ Types | VECTEUR(cste) DE Types ~
                                  
{ , ~ Types | VECTEUR (Cste) DE Types ~ }* )


Types dans [ENTIER, BOOLEEN, CAR, CHAINE]
Sep dans [:, UN, UNE, DES]
Cste : constante numérique
Listecste : liste de constantes numériques séparées par des ','
Li : liste d'identificateurs séparés par des ','


Instructions

< Lis >            ::=        < Inst > { ; < Inst > }*
<Is>                ::=        Idf := <Exp> |
                                   TANTQUE
<Exp> [ : ] <Lis> FINTANTQUE |
                                   SI
<Exp> [:] <Lis> [SINON <Lis>] FSI |
                                   POUR
Idf := <Exp>,<Exp> [, <Exp>][:] <Lis> FINPOUR |
                                   APPEL
Idf [(Exp {,<Exp>}*]
                                   LIRE (
Idf  {, Idf }* ) |
                                   ECRIRE (
<Exp> {,<Exp>}* ) |
                                   ALLOUER (
<Exp> ) |
                                   AFF_VAL (
<Exp> , <Exp> ) |
                                   CREER_LISTE ( Idf , [ ~
<Exp> | [<Exp> { , <Exp> }* ] ~
                                   { , ~ <Exp> | [<Exp> { , <Exp> }* ~ }* ] ) |

                                   CREER_MCAR(Idf, [Chaine]) |
                                   AFF_ELEMENT (
<Exp> [ <Exp> { , <Exp> }* ] ,<Exp> ) |
                                   AFF_STRUCT(
Idf, Cste, <Exp>) |
                                   OUVRIR (
Idf , Chaine, Chaine ) |
                                   LIRECAR (
Idf, Idf) |
                                   LIREDIR (
Idf , <Exp>, <Exp> )


AFF_ADR comme AFF_VAL
FERMER, LIBERER comme ALLOUER
INIT_VECTEUR, INIT_STRUCT, INIT_TABLEAU, CREER_MNOMBRE comme CREER_LISTE
AFF_ENTETE comme AFF_STRUCT
LIRESEQ, ECRIRESEQ, RAJOUTER, LIRENOMBRE comme LIRECAR
ECRIREDIR comme LIREDIR

Expressions

<Exp>            ::=       <Exps>[ Opr <Exps>]
<Exps>           ::=        Sign <Terme> { Opa <Terme> }* | <Terme> { Opa <Terme> }*
<Terme>        ::=        <Facteur>{Opm <Facteur>}*
<Facteur>      ::=        Idf | Cstenum | <Fonct> | NIL | (<Exp>) | Chaine |

NOT <Facteur> |   Cstelogic

<Fonct>         ::=        VALEUR ( <Fonct> ) |  Idf  |

ELEMENT ( <Fonct> [ <Exp> { , <Exp> }* ]  )  |                        

STRUCT ( <Exp> , Cste ) |
           NBRCAR (
Idf  )

 

ALEACHAINE, ALEANOMBRE, LONGCHAINE, SUIVANT comme VALEUR
ENTETE, CARACT comme STRUCT.
NBRNOMBRE, ALLOC_BLOC, FINFICH comme NBRCAR

Opr dans { <, <=, >, >=, =, <> }
Opa dans { +, -, OR }
Opm dans { *, |, ET }
Sign dans {+, -}
Cstelogic dans {VRAI, FAUX}
Cstenum dans Z.
Chaine : chaîne de caractères