Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flex
Flex Forum d'entraide sur la programmation Adobe Flex : applications Internet riches (RIA)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/11/2006, 22h00   #1
Nouveau Membre du Club
 
Avatar de minirop
 
Inscription : juin 2005
Messages : 50
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : juin 2005
Messages : 50
Points : 32
Points : 32
Par défaut Interfacer Flex et Bison

bonjour,
je poste ici car je ne sais pas où ça va.

En fait je cherche comment et pourquoi interfacer flex et bison.

Pour le moment j'ai testé avec :

Le fichier pour bison
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/* Reverse polish notation calculator.  */
 
%{
#include <stdio.h>
#include <ctype.h>
#define YYSTYPE double
#include <math.h>
int yylex (void);
void yyerror (char const *);
%}
 
%token NUM
 
%% /* Grammar rules and actions follow.  */
input:    /* empty */
	 | input line
;
 
line:     '\n' { printf ("empty line\n"); }
	 | exp '\n'      { printf ("result : %d\n", $1); }
;
 
exp:      NUM           { $$ = $1; printf ("alone\n"); }
	 | exp exp '+'   { $$ = $1 + $2; printf ("add\n"); }
	 | exp exp '-'   { $$ = $1 - $2; printf ("sob\n"); }
	 | exp exp '*'   { $$ = $1 * $2; printf ("mult\n"); }
	 | exp exp '/'   { $$ = $1 / $2; printf ("div\n"); }
	 | exp exp '^'   { $$ = pow ($1, $2); printf ("pow\n"); }
	 | exp 'n'       { $$ = -$1; printf ("neg\n"); }
;
%%
void
yyerror (char const *s)
{
	fprintf (stderr, "%s\n", s);
}
 
int
main (void)
{
	return yyparse ();
}
Le fichier flex
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
%{
/* C code to be copied verbatim */
#include <stdio.h>
#include "npi.tab.h"
%}
 
/* This tells flex to read only one input file */
%option noyywrap
 
%%
. {  return NUM; }
%%
// null !
Si je mets comme entrée :
2 2 +
ça me sort
Citation:
token : 2
alone
token :
alone
token : 2
alone
token :
alone
token : +
alone
alors que si je ne compile que bison ça marche.
L'erreur doit venir de :
mais j'ai testé pleins de trucs, et aucun ne marche.

Quelqu'un saurait d'où çà vient ?

Merci.
minirop est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2006, 10h48   #2
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 497
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 497
Points : 9 672
Points : 9 672
Citation:
Envoyé par minirop
Si je mets comme entrée :
2 2 +

Quelle séquence tapes-tu exactement sur ton clavier ?
2 [entrée]
2 [entrée]
+ [entrée]

Alors c'est normal, lorsque tu appuies sur entrée, il y a un caractère qui est lu par ton lexeur, et vu que celui-ci renvoie le type NUM quoi qu'il lise, tu te retrouves avec ce que tu vois.
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2006, 10h52   #3
Nouveau Membre du Club
 
Avatar de minirop
 
Inscription : juin 2005
Messages : 50
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : juin 2005
Messages : 50
Points : 32
Points : 32
non, je tapes : 2[ESPACE]2[ESPACE]+[ENTREE]
et çà devrait me sortir 4, le fichier bison me sert à calculer un calcul en notation polonaise inverse
minirop est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2006, 17h15   #4
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 497
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 497
Points : 9 672
Points : 9 672
Bonjour,

Je pense qu'il faudrait que tu déclares une condition de fin dans ton lexeur, comme par exemple le caractère '\n', qui ne serait pas de type NUM, mais d'un autre type.

En effet, là, en relisant ton code, je ne comprends pas bien comment il est possible de détecter la fin d'une expression "exp".
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2006, 23h14   #5
Nouveau Membre du Club
 
Avatar de minirop
 
Inscription : juin 2005
Messages : 50
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : juin 2005
Messages : 50
Points : 32
Points : 32
Citation:
Envoyé par gangsoleil
Bonjour,

Je pense qu'il faudrait que tu déclares une condition de fin dans ton lexeur, comme par exemple le caractère '\n', qui ne serait pas de type NUM, mais d'un autre type.

En effet, là, en relisant ton code, je ne comprends pas bien comment il est possible de détecter la fin d'une expression "exp".
il y a :
[code]line : '\n' | exp '\n'
minirop est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h09.


 
 
 
 
Partenaires

Hébergement Web