Grammaire du langage Caml

abstraction concrète

Index des symboles non terminaux

Modules
Directives
Types et exceptions
Expressions

Modules

interface  ::=  {phrase-d'interface ;;} 

phrase-d'interface  ::=  déclaration-typage-de-valeur 
  | définition-de-type 
  | définition-d'exception 
  | directive 

déclaration-typage-de-valeur  ::=  
      value identificateur : expression-de-type 
       {and identificateur : expression-de-type}

implementation  ::= {phrase_d'implémentation ;;}

phrase_d'implémentation  ::= expression
  | définition-de-valeur
  | définition-de-type 
  | définition-d'exception 
  | directive

définition-de-valeur  ::= let [rec] let-liaison {and let-liaison}

Directives

directive  ::= # open string
  | # close string
  | # identificateur string

Types et exceptions

définition-de-type  ::=  
    type type-définition {and type-définition}

type-définition  ::=  
    type-params identificateur = 
       déclaration-de-constructeur {| déclaration-de-constructeur}
  | type-params identificateur = { déclaration-d'étiquette 
                                   {; déclaration-d'étiquette} }
  | type-params identificateur == expression-de-type
  | type-params identificateur

type-params  ::=  rien
  | ' identificateur
  | ( ' identificateur {, ' identificateur} )

déclaration-de-constructeur  ::=  identificateur
  | identificateur of expression-de-type
  | mutable identificateur of expression-de-type

déclaration-d'étiquette  ::=  identificateur : expression-de-type
  | mutable identificateur : expression-de-type

expression-de-type  ::= ' identificateur
  | ( expression-de-type )
  | expression-de-type -> expression-de-type
  | expression-de-type { * expression-de-type}+
  | constructeur-de-type
  | expression-de-type constructeur-de-type
  | ( expression-de-type 
           { , expression-de-type} ) constructeur-de-type

constructeur-de-type  ::= nom-global

définition-d'exception  ::= 
    exception déclaration-de-constructeur   
                         {and déclaration-de-constructeur  }

Expressions

expression  ::=  identificateur
  | variable
  | constante
  | ( expression )
  | begin expression end
  | ( expression : expression-de-type )
  | expression , expression {, expression}
  | constructeur-de-valeur-non-constant expression
  | expression :: expression
  | [ expression {; expression} ]
  | [| expression {; expression} |]
  | { étiquette = expression {; étiquette = expression } }
  | expression expression
  | prefix-op expression
  | expression infix-op expression
  | expression . étiquette
  | expression . étiquette <- expression
  | expression .( expression )
  | expression .( expression ) <- expression
  | expression .[ expression ]
  | expression .[ expression ] <- expression
  | expression & expression
  | expression or expression
  | if expression then expression [else expression]
  | while expression do expression done
  | for identificateur = 
         expression (to | downto) expression do expression done
  | expression ; expression
  | match expression with simple-filtrage
  | fun multiple-filtrage
  | function simple-filtrage
  | try expression with simple-filtrage
  | expression where [rec] let-liaison 
  | let [rec] let-liaison {and let-liaison} in expression
  | [< >]
  | [< componsant-de-flux {; componsant-de-flux} >]
  | function filtrage-de-flux
  | match expr with filtrage-de-flux

let-liaison  ::=  motif = expression 
  | variable motif-liste = expression

simple-filtrage  ::=  
    motif [when condition] -> expression 
                  { | motif [when condition] -> expression}

multiple-filtrage  ::=  
    motif-liste -> expression
                     { | motif-liste -> expression}

motif-liste  ::=  motif {motif } [when condition] 

composant-de-flux  ::= ' expression | expression 

filtrage-de-flux  ::= motif-de-flux -> expression 
                   {| motif-de-flux -> expression}

motif-de-flux  ::= [< >] 
  | [< motif-composant-de-flux {; motif-composant-de-flux} >]

motif-composant-de-flux  ::= ' motif 
  | expr motif
  | identificateur

motif  ::=  identificateur 
  | _
  | motif as identificateur
  | ( motif )
  | ( motif : expression-de-type )
  | motif | motif
  | constante
  | constructeur-de-valeur-non-constant motif
  | motif , motif { , motif}
  | { étiquette = motif {; étiquette = motif } }
  | [ ]
  | [ motif {; motif} ]
  | motif :: motif
  | intervalle-de-caractères

prefix-op  ::=  - | -. | ! 

infix-op  ::=  + | - | * | / | mod | +. | -. | *. | /. | @ 
  | ^ | ! | := | = | <> | == | != | < | <= | > | <= | <. 
  | <=. | >. | <=. 

étiquette  ::= nom-global 

intervalle-de-caractères  ::=  
    literal-caractère .. literal-caractère

constante  ::= literal-entier 
  | literal-décimal
  | literal-caractère
  | literal-chaîne-de-caractère
  | constructeur-de-valeur-constant 

variable  ::=  nom-global 
  | prefix nom-operateur

nom-operateur  ::=  + | - | * | / | mod | +. | -. | *. | /.
  |  @ | ^ | ! | := | = | <> | == | != | !
  |  < | <= | > | <= | <. | <=. | >. | <=. 

constructeur-de-valeur-constant  ::=  nom-global | [] | () 

constructeur-de-valeur-non-constant  ::=  nom-global |  prefix ::

nom-global  ::=  identificateur | identificateur__identificateur 

Index

composant-de-flux
constante
constructeur-de-type
constructeur-de-valeur-constant
constructeur-de-valeur-non-constant
déclaration-de-constructeur
déclaration-d'étiquette
déclaration-typage-de-valeur
définition-de-type
définition-de-valeur
définition-d'exception
directive
étiquette
expression
expression-de-type
filtrage-de-flux
implementation
infix-op
interface
intervalle-de-caractères
let-liaison
motif
motif-composant-de-flux
motif-de-flux
motif-liste
multiple-filtrage
nom-global
nom-operateur
phrase_d'implémentation
phrase-d'interface
prefix-op
simple-filtrage
type-définition
type-params
variable

dernière modification : 06/12/96