<HTML> <HEAD>    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">    <TITLE>La BNF de chocolat</TITLE>    <STYLE type="text/css">     Body     {        margin-left: 8%;       font-family: helvetica, arial, sans-serif;       background: white;     }      A:link     { color: #008; }     A:visited, A:active     { color: #00f; }      H1     {       margin-left: -8%;       color: f90;     }      H2     {        margin-left: -7%;       color: #900;     }      H3     {       margin-left: -4%;       color: #088;     }      .verbatim     {       color: black;       font-family: courier, monospace;     }      .tips     {       /* float: left; */       margin-left: -5%;       background: pink;       color: black;       width: 400;       /* font-family: courier, monospace; */     }   </STYLE> </HEAD> <BODY>  <H1> Description BNF de la grammaire de chocolat</H1>  <H2> Introduction</H2> Le but de chocolat est de pouvoir specifier une grammaire attribuee orientee <BR>objet. Pour cela, la grammaire de chocolat est un "super-set" de java.  <H2> Description d'une Classe Chocolat</H2> Globalement, une classe chocolat est constituee de deux parties :  <UL> <LI> La declaration des constructeurs ;</LI>  <LI> la description des fonctions utilisants les constructeurs.</LI> </UL>  <H3>Description BNF</H3> <p class=verbatim>   Chocolat = Classes <BR> <BR>Classes = Classes Classe <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; Classe <BR> <BR>Classe = "class" ID '{' Body '}' <BR> <BR>Body = Declare Functions </p>  <H2> La declarations des Constructeurs</H2> Un constructeur chocolat joue le meme role qu'un constructeur dans un langage objet, il peut de construire une instance de la classe. <BR>Contrairement aux langages objets, un constructeur ne possede pas le meme nom que la classe et il existe souvent plusieurs constructeurs pour une classe doneee. <BR> <BR>Exemple : <p class=verbatim> class List <BR>{ <BR>&nbsp; case Nil(); <BR>&nbsp; case Cons(int a,List tail); <BR>&nbsp; ... <BR>} </p> <p> Cette exemple construit une liste d'entier, on pourra construire la liste [1,3,2] avec la sequence suivante : <br> <font class=verbatim>Cons(1,Cons(3,Cons(2,Nil)))</font>. </p>  <p class=tips> <b>Note </b>:   On peut nommer les arguments d'un constructeur   ( Cons(int a,List tail) ) ou ne pas les nommer ( Cons(int,List) ),   il faudra alors nommer le constructeur lors du "case" a l'interieur   d'une fonction. </p>  <H3> Description BNF</H3> <p class=verbatim> Declare = Declare Constructeur <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | <BR> <BR>Constructeur = "case" ID '(' Params ')' ';' <BR> <BR>Params = Fields <BR>&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; Types <BR>&nbsp;&nbsp;&nbsp;&nbsp; | <BR> <BR>Fields = Fields ',' Field <BR>&nbsp;&nbsp;&nbsp;&nbsp; | Fields <BR> <BR>Field = ID ID <BR> <BR>Types = Types Type <BR>&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; Type <BR> <BR>Type = ID </p>  <H2> La declaration des Fonctions</H2> Une fonction est constitue de parametres d'appels, d'une valeur de retour, d'attributs locaux et d'un code pour chaque constructeurs. <BR>  <H3>Description BNF</H3> <p class=verbatim> Functions = Functions Function <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; Function <BR> <BR>Function = Type ID '(' Fields ')' <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '{' Attributs Matches '}' <BR> <BR>Attributs = Attributs Attribut <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; Attribut <BR> <BR>Attribut = Type Ids ';' <BR> <BR>Ids = Ids ',' Id <BR>&nbsp;&nbsp; |&nbsp; Id <BR> <BR>Id = ID </p>  <H2>La specification du code associe aux constructeurs</H2>  <H3>Description BNF</H3> <p class=verbatim> Matches = Matches Match <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; Match <BR> <BR>Match = "case" Pattern ':' Exprs <BR> <BR>Pattern = ID '(' Vars ')' <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; ID '(' ')' <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; ID&nbsp; <BR> <BR>Vars = Vars ',' Var <BR>&nbsp;&nbsp; |&nbsp;&nbsp; Var <BR> <BR>Var = ID (' Vars ')' <BR>&nbsp;&nbsp; |&nbsp; ID '(' ')' <BR>&nbsp;&nbsp; |&nbsp; ID </p>  <H2>Declaration d'un code associe a un constructeurs</H2>  <H3>Decription BNF</H3> <p class=verbatim> Value = Object <BR>&nbsp;&nbsp;&nbsp; |&nbsp; VALUE <BR> <BR>Object = Object '.' Identif <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; Identif <BR> <BR>SimpleObject = SimpleObject '.' ID <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; ID <BR> <BR>Identif = ID '(' Variables ')' <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; ID '(' ')' <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; ID <BR> <BR>Variables = Variables ',' Variable <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Variable <BR> <BR>Variable = ID <BR> <BR>Exprs = Exprs Expr <BR>&nbsp;&nbsp;&nbsp; | <BR> <BR>Expr = Object '=' Mult ';' <BR> <BR>Mult = Mult '*' Add <BR>&nbsp;&nbsp; |&nbsp;&nbsp; Mult '/' Add <BR>&nbsp;&nbsp; |&nbsp;&nbsp; Mult '%' Add <BR>&nbsp;&nbsp; |&nbsp;&nbsp; Add <BR> <BR>Add = Add '+' Value <BR>&nbsp;&nbsp; |&nbsp; Add '-' Value <BR>&nbsp;&nbsp; |&nbsp; Value </p> </BODY> </HTML> 
