Bug syntaxe while (condition) do ... od

Bugs

Modérateur : xcasadmin

yvand
Messages : 35
Inscription : jeu. févr. 07, 2013 7:14 pm

Bug syntaxe while (condition) do ... od

Message par yvand » mar. nov. 05, 2013 11:32 am

Bonjour,

1) Le code suivant bugge :

Code : Tout sélectionner

pgcd(a,b):={
  local r;
  while (b!=0) do
    r:=irem(a,b);
    a:=b;b:=r;
  od;
  return a;
};
Si je met
  • tantque (b!=0) do ... od
  • tantque (b!=0) faire ... ffaire
  • tantque (b!=0) faire ... ftantque
ça marche !
Encore plus surprenant si on enlève les parenthèses autour de la condition, plus aucun problème ... :shock:
Le problème semble venir de l'utilisation de while suivi de parenthèses. :roll:

Autres remarques/questions :
2) Dans la doc (dans Xcas), l'exemple donné pour od concerne end.
3) Dans la doc (dans Xcas), pourquoi les termes français comme pour, tantque, faire, si... ne sont pas respectivement dans la catégorie Synonymes des commandes for, while, do, if... (et réciproquement) ?

Merci encore pour Xcas

parisse
Messages : 5739
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: Bug syntaxe while (condition) do ... od

Message par parisse » mar. nov. 05, 2013 11:40 am

Ce n'est pas un bug, c'est un probleme de collision entre les syntaxes C et de type maple. while suivi d'un test entre parentheses attend une syntaxe comme en C, donc pas de do, mais un bloc representant le corps de la boucle (ou une instruction). while suivi d'un test sans parentheses attend une syntaxe a la maple, donc avec un do.
Tout ca est effectivement un peu genant, et c'est pour ca que les mots-clefs en francais acceptent la syntaxe de type maple, et ne sont donc pas des synonymes parfaits des mots-clefs en anglais.

yvand
Messages : 35
Inscription : jeu. févr. 07, 2013 7:14 pm

Re: Bug syntaxe while (condition) do ... od

Message par yvand » mar. nov. 05, 2013 6:09 pm

Merci pour votre réponse rapide et précise.
Cela reste un peu génant :s
Je n'ai pas très bien compris votre explication.
Je ne comprend pas bien pourquoi la syntaxe while (condition) do ... od (autorisée en Maple) fonctionne en mode Maple mais pas en mode Xcas.

De plus vous dites :
while suivi d'un test sans parentheses attend une syntaxe a la maple, donc avec un do
alors que comme je l'ai dit l'exemple donné juste avant est correct dans Maple (d'après http://fr.wikiversity.org/wiki/Introduc ... o_while.29).

parisse
Messages : 5739
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: Bug syntaxe while (condition) do ... od

Message par parisse » mar. nov. 05, 2013 6:40 pm

Techniquement, il y a une différence de "token" renvoyé lorsque le lexer lit while en mode maple ou en mode xcas, et donc les règles grammaticales utilisées ne sont pas les mêmes selon le mode (T_MUPMAP_WHILE et T_WHILE), alors que tantque renvoie toujours T_MUPMAP_WHILE. Ainsi dans input_lexer.ll, on a

Code : Tout sélectionner

"while"                 index_status(yyextra)=0; (*yylval)=gen(at_for,4); if (xcas_mode(yyextra)==3) return TI_WHILE; if (xcas_mode(yyextra)!=0) return T_MUPMAP_WHILE; return T_WHILE;
et dans input_parser.yy

Code : Tout sélectionner

	| T_MUPMAP_WHILE exp T_DO prg_suite T_BLOC_END { ... 
...
	| T_WHILE T_BEGIN_PAR exp T_END_PAR bloc {...
	| T_WHILE T_BEGIN_PAR exp T_END_PAR exp T_SEMI { ...
	| T_WHILE exp T_DO prg_suite T_BLOC_END { ...

frederic han
Messages : 1137
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Re: Bug syntaxe while (condition) do ... od

Message par frederic han » mar. nov. 05, 2013 8:43 pm

Bonjour,

pour completer la reponse de bernard,

La syntaxe:
while () do od marche tres bien si xcas est en mode maple. Personnellement je deconseille tres fortement toutes les syntaxes de type maple si l'on est en mode xcas vu que tot ou tard on a des ennuis avec while. J'ai longtemps travaille en mode maple avec ces syntaxes, mais pour la doc et les modulaires je suis passe en mode xcas.

Frederic

parisse
Messages : 5739
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: Bug syntaxe while (condition) do ... od

Message par parisse » mer. nov. 06, 2013 9:09 am

Le mieux a mon avis, c'est d'utiliser la syntaxe en francais meme si ca va un peu a l'encontre de l'habitude d'ecrire les mots-clefs en anglais.

yvand
Messages : 35
Inscription : jeu. févr. 07, 2013 7:14 pm

Re: Bug syntaxe while (condition) do ... od

Message par yvand » sam. nov. 09, 2013 1:21 pm

Merci pour toutes ces explications !

Répondre