begin process at 2012 05 28 16:55:11
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Besoin d'aide sur lex and yacc


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Besoin d'aide sur lex and yacc

mercredi 5 mai 2004 à 15:31:19 | Besoin d'aide sur lex and yacc

jlgrau


Bonjour,

J'utilise Lex and Yacc depuis peu. J'ai fait un petit programme pour parser un fichier texte tout simple. Le parser ne fonctionne pas correctement.

Est ce quelqu'un peu me dire ci mon code est incorrect?

Voici mon fichier LEX
===============================================
%{
#include <stdio.h>
#include <malloc.h>
// The Parser token definition
#include "pkgYacc.h"

%}

%%

^#.*\n {printf("\nLEXER:Line: %d - This is a COMMENT line, ignore it [%s] ",yylineno,yytext);fflush(stdout);;}

^[\t ]*\n {printf("\nLEXER:Line: %d - This is a BLANK line, ignore it [%s] ",yylineno,yytext);fflush(stdout);;}

"=" {

printf("\nLEXER:Line: %d - This is a EQUAL OPERATOR [%s] ",yylineno,yytext);fflush(stdout);;
return (EQUAL);
}

\"[^"]*["] {

printf("\nLEXER:Line: %d - This is a STRING [%s] ",yylineno,yytext);fflush(stdout);;
return (STRING);
}

-?[0-9]*\.[0-9]* {
printf("\nLEXER:Line: %d - This is a FLOAT [%s] ",yylineno,yytext);
return (FLOAT);
}

-?[0-9]* {
printf("\nLEXER:Line: %d - This is a INTEGER [%s] ",yylineno,yytext);fflush(stdout);;
return (INTEGER);
}

[_a-zA-Z0-9]* {
printf("\nLEXER:Line: %d - This is a DATANAME [%s] ",yylineno,yytext);fflush(stdout);;
return (DATANAME);
}
"\n" ;

%%
int yywrap ()
{
return 1;
}
===============================================


Voici mon fichier YACC:
===============================================
%{
#include <stdio.h>
#include <malloc.h>
%}
%start File
%token EQUAL STRING DATANAME FLOAT INTEGER

%%

File: integerAttr | stringAttr | floatAttr ;

integerAttr: DATANAME EQUAL INTEGER
{
printf("\nPARSER: Found an attribute of type INTEGER "); fflush(stdout);
};

stringAttr : DATANAME EQUAL STRING
{
printf("\nPARSER: Found an attribute of type STRING "); fflush(stdout);
};

floatAttr : DATANAME EQUAL FLOAT
{
printf("\nPARSER: Found an attribute of type FLOAT "); fflush(stdout);
};


%%
extern FILE *yyin;
main(int argc,char** argv)
{
if (argc > 1)
{
FILE *file;
file = fopen(argv[1], "r");
if (!file)
{
fprintf(stderr,"could not open %s\n",argv[1]);
return 1;
}
yyin = file;
while(!feof(yyin))
{
yyparse();
}
}
}
yyerror(char* s)
{
fprintf(stderr, "%s\n", s);
return 0;
}

===============================================



Voici le fichier à parser:

===============================================
data1 = 1
data2 = "2"
data3 = 3.3
data4 = 4



===============================================





Voici la sortie du parser:
===============================================
LEXER:Line: 1 - This is a DATANAME [data1]
LEXER:Line: 1 - This is a EQUAL OPERATOR [=]
LEXER:Line: 1 - This is a INTEGER [1]
PARSER: Found an attribute of type INTEGER
LEXER:Line: 2 - This is a DATANAME [data2]


===============================================

J'ai utilisé gnu bison et gnu flex pour generer le code source en C à partir des fichiers lex et yacc.

Après compilation du code dans MSDEV, j'utilise la commande

[color=orange]Test.exe test.input [/color]

Pour lancer le parser.
Le problem est que le parser reconnait la première ligne et s'arrête desuite après sans crash.

Merci pour votre aide,


Jean-Louis


Cette discussion est classée dans : printf, is, line, stdout, fflush


Répondre à ce message

Sujets en rapport avec ce message

migration d une base mysql vers postgres en c : erreur de segmentation [ par loenia ] Bonjourje suis actuellement en stage en entreprise. et je dois effectuer la migration d'une base Mysql vers une base postgres.il se trouve qu au milie Problème d'affichage [ par kiceron ] Salut je travail sur un dossier de fin d'année et j'ai queles problème d'affichage lorsque j'appelle ma fonction, en fait il s'agit de l'affichage de Liste de fichiers d'un rep [ par kharbout ] Bonjour,Je m'excuse si ma question vous parait bête, je suis débutant on va dire.Je voudrais une aide pour lister la liste des fichiers d'un rep dont LE FICHIER EN C [ par themahg ] G UN PROBLEME AVEC MON PROGRAMME, il m'affiche que le premier element, je ne sai si le probleme est dans la fct encoder ou afficher. Voici une partie Je veux un aidee a propos [ par miidox ] Tout d'abord je veu un aide apropos de mon code le voilaa qui affiche pas les temps dexecution entre et les entre sorti pour chaque processeus #inclu Langage C (saisie de données sur fichier) [ par doggy59115 ] Bonjour à tous ! Je bloque sur mon programme en langage C. Je suis novice !Je dois créer un programme où l'on rentre : nom, prénom, ville, adresse, co Accès base de données mysql en c / linux [ par Susherone ] bonjour a toutes le personnes qui passeront par ici, voila mon pb, j'essai de créer un pti programme qui accède a une base de donnée mysql et qui en r Aide pour un programme,création variable [ par pirana ] bonjour à vous tous ... Voila je suis un débutant en C... j'ai récupéré ce code sur le site et j'aimerai me simplifié la vie...mais je n'y arrive pas Je vais devenir fou !!??!! (question sur un kernel en C) [ par vinc1008881 ] Voila maintenant 2 jour que je cherche a savoir comment on fait pour compiler un kernel en C. voila mon kernel/* printf est codee en asm par mes soins


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,920 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales