J'ai regardé le DO que tu as fait, et je pense que l'on peut eclaircir pas mal les choses. Pas seulement au niveau du DO, mais aussi de la structure WHILE.
Il faut bien pensé qu'il s'agit d'un format d'échange de données, il n'est donc pas necessaire d'associer la même sémantique que QBasic dans le schéma.
Ainsi, je pensais, au niveau du schéma, que :
- les boucles WHILE seraient des boucles dont le test est
au début de la boucle
- les boucles DO seraint des boucles dont le test est
à la fin de la boucle.
Cela permettrait d'alleger le code, et d'éviter des <xsd:choice> multitple.
Ensuite, pour tenir compte du type de test (UNTIL ou WHILE), il suffit de rajouter un élément "type" par exemple.
ExprType est simplement un type servant à désigner une expression.
Ainsi, une expression peut etre :
- une constante
- un bloc (en fait, une expression entre parenthese)
- un opérateur binaire
- un opérateur unaire
- une fonction.
[edit]
Pour le code du DO et du WHILE, je pensais à un truc du genre :
<xsd:simpleType name="loopType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="while" />
<xsd:enumeration value="until" />
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="whileType">
<xsd:sequence>
<xsd:element name="type" type="loopType" />
<xsd:element name="test" type="exprType" />
<xsd:element name="statements" type="statementsType" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="doType">
<xsd:sequence>
<xsd:element name="type" type="loopType" />
<xsd:element name="test" type="exprType" />
<xsd:element name="statements" type="statementsType" />
</xsd:sequence>
</xsd:complexType>
[/edit]
Edité par Francesco ( 12/08/2007 21:36:40 )Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)