Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2680 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [YACC] Problème de syntaxe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[YACC] Problème de syntaxe

n°754118
Bleuarff
pouet
Posté le 06-06-2004 à 21:26:45  profilanswer
 

Bonjour
J'ai un fichier .y qui a pour but de traduire un code en pseudo-langage en  anglais. Il se compile correctement, mais lorsque je l'execute, j'ai une syntax error à chaque ligne du fichier contenant mon code. Je ne comprend pas pourquoi, et depuis 3 heures que je suis dessus je sature. Qqun à une idée ?
 
voila le fichier test.y:

Code :
  1. %{
  2. #include <ctype.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. %}
  6. %token PROGRAMME
  7. %token DEBUT
  8. %token SI
  9. %token CODE
  10. %token LIGNE_VIDE
  11. %token FIN
  12. %%
  13. input : input line
  14.        | /*vide*/
  15. ;
  16. line : '\n'
  17. |      expr'\n'
  18.       ;
  19. expr : DEBUT {printf("BEGIN\n" );}
  20.       | FIN {printf("END\n" );}
  21.       | SI {printf("IF THEN\n" );}
  22. | CODE /*empty*/
  23. | PROGRAMME {printf("PROGRAM\n" );}
  24. | LIGNE_VIDE /*rien*/
  25. ;
  26. %%
  27. FILE *yyin;
  28. int yylex(){
  29. int i=0;
  30. int c;
  31. char l[50]="";
  32. fgets(l, 50, yyin);
  33. if (l!=NULL){
  34.  while ((l[i]!='\n') && (i<50)){
  35.   i++;
  36.  }
  37.  if (l[i]=='\n')
  38.  {
  39.   l[i]='\0';
  40.  }
  41.  if (strcmp(l, "PROGRAMME" )==0){
  42.   return PROGRAMME;
  43.  }
  44.  else if (strcmp(l, "DEBUT" )==0)
  45.  { return DEBUT;}
  46.  else if (strcmp(l, "FIN" )==0)
  47.  { return FIN;}
  48.  else if (strncmp(l, "SI", 2)==0)
  49.  { return SI;}
  50.  else if (l[0]=='\0'){
  51.   return LIGNE_VIDE;
  52.  }
  53.  else{
  54.   printf("%s\n",l);
  55.   return CODE;
  56.  }
  57. }
  58. }
  59. int yyerror(char *s)
  60. {
  61. printf("erreur: %s\n",s);
  62. }
  63. main(){
  64. yyin=fopen("gram", "r" );
  65. while(!feof(yyin)){
  66.  yyparse();
  67. }
  68. fclose(yyin);
  69. }


 
et mon fichier contenant le langage:

Code :
  1. PROGRAMME
  2. DEBUT
  3. SI (a=b) ALORS
  4. DEBUT
  5. "pouet"
  6. FIN
  7. FIN


Message édité par Bleuarff le 06-06-2004 à 21:27:12
mood
Publicité
Posté le 06-06-2004 à 21:26:45  profilanswer
 

n°754552
Bleuarff
pouet
Posté le 07-06-2004 à 11:54:04  profilanswer
 

nan, ça vous inspire pas ?

n°754572
pascal_
Posté le 07-06-2004 à 12:11:15  profilanswer
 

Par hasard, tu ne compilerais pas sous Linux et utiliserais un fichier de test fait sous windows avec plein de \n\r à la fin de chaque ligne ?
 
Et ça marche ça  [:w3c compliant] :

Code :
  1. char l[50]="";


 
Quelques remarques :
- pourquoi tu n'utilises pas lex pour lexer ton fichier d'entrée, c'est plus simple et plus sûr (si tu passe un fichier ou une ligne fait plus de 50 caractères sa plante dans ton programme...)
- A quoi ça te serts de savoir qu'il y a une LIGNE_VIDE dans le parseur ?

n°756116
Bleuarff
pouet
Posté le 08-06-2004 à 11:50:45  profilanswer
 

bah ouais ça marche, le pb venait de  

Code :
  1. line : '\n'
  2.    |      expr'\n'
  3.    ;


 
j'ai mis expr tout seul et ça marche bien.
 
J'ai pas utilisé lex car pas le temps d'apprendre à l'utiliser, j'ai rien compris à ce que je faisais, la soutenance de cet aprem' va être comique :/.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [YACC] Problème de syntaxe

 

Sujets relatifs
[PHP] Problème sur une fonction, hébergé sur un serveur UNIXProbleme d'affichage d'une video dans une iframe
probléme d'option de compilationProbleme de class avec GD
Probleme avec les headers mailprobleme de recursivite
Problème de collectionASP.NET - Probleme dans l'envoi de email!
Probleme avec le .profile (sous Suse linux)probleme de reaffichage dans un shell deja ouvert[SWT]
Plus de sujets relatifs à : [YACC] Problème de syntaxe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR