Précédent   Forum du club des développeurs et IT Pro > Général Développement > Langages de programmation
Langages de programmation Forum général sur les langages de programmation, sur la POO, opinions, choix, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 29/11/2012, 18h34   #1
nessing
Nouveau Membre du Club
 
Inscription : novembre 2006
Messages : 116
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 116
Points : 28
Points : 28
Par défaut compiler et executer lex

Bonjour,
je debute lex et yacc avec l'outil Glyd 2.0 sur windows 7 et delphi. je veux créer un compilateur simple . pour commencé je veux exécuter cette exemple lex :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
coffanalyser.l

%{
#include <stdio.h>
%}

%%
[a-zA-Z][a-zA-Z0-9]*	printf("MOT\n");
[a-zA-Z0-9\/.-]+		printf("NOMFICHIER\n");
\"				printf("DOUBLEQUOTE\n");
\{				printf("ACCOLADEG\n");
\}				printf("ACCOLADED\n");
;				printf("POINTV\n");
\n				printf("\n"); /* retour à la ligne*/
[ \t]+			/* ignore espaces et tabulation*/
%%
le programme correspondant est:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
cafecreme.caf

loger {
	categorie instituteur { hlm };
	categorie professeur  { villa };
};

zone "." {
	type appartement, immeuble;
	fichier "/user/appt/std.log";
	fichier "/user/imm/tulipe.log"
};
j'ai pas pus compiler:
lex coffanalyser.l
cc lex.yy.c -o coffanalyser -ll

Pour exécuter le programme :

coffanalyser
comment faire?
merci
nessing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2012, 11h17   #2
nessing
Nouveau Membre du Club
 
Inscription : novembre 2006
Messages : 116
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 116
Points : 28
Points : 28
bein peut être que je dois précisé quand dans l'invite de commande de windows j'obtiens cc n'est pas reconnu autant que commande interne ...

SVP aidez moi je bloque depuis quelque jours sur ça .
je vous remercie
nessing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2012, 15h23   #3
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 384
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 22 384
Points : 32 024
Points : 32 024
Envoyer un message via MSN à Médinoc
Je ne connais pas Glyd. Si tu veux compiler du code pour Windows, il te faudrait un truc du genre MinGW (ou MSYS, qui contient MinGW et quelques outils en plus).
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone.
-- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2012, 16h44   #4
ManusDei
Membre Expert
 
Avatar de ManusDei
 
Homme
esclave du Grand Capital
Inscription : février 2010
Messages : 1 073
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France

Informations professionnelles :
Activité : esclave du Grand Capital

Informations forums :
Inscription : février 2010
Messages : 1 073
Points : 2 357
Points : 2 357
Citation:
Envoyé par nessing Voir le message
bein peut être que je dois précisé quand dans l'invite de commande de windows j'obtiens cc n'est pas reconnu autant que commande interne ...
L'erreur que tu donnes indique que windows ne sait pas où est l'exécutable de compilation.

Donc où est installé ton compilateur (et est-ce qu'il y a bien un programme cc.exe) ? Est-ce que le chemin vers cc est bien dans ton PATH (tape PATH dans une invite de commande) ?
__________________
http://www.traducteur-sms.com/ On ne sait jamais quand il va servir, donc il faut toujours le garder sous la main
ManusDei est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2012, 22h14   #5
nessing
Nouveau Membre du Club
 
Inscription : novembre 2006
Messages : 116
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 116
Points : 28
Points : 28
merci de m'avoir répondue.
j'ai installé MinGW , je n'ai plus l'erreur merciiiiiiiiiiii mais j'ai une autre erreur lex.yy.c no such file or directory .

comment générer se fichier?
merci encore une fois
nessing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 16h04   #6
nessing
Nouveau Membre du Club
 
Inscription : novembre 2006
Messages : 116
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 116
Points : 28
Points : 28
Bonjour, après un mois ou plus passé , j'ai pus avancé ( juste un tout petit peu ) , j'ai pus compiler et exécuter lex avec glyd (generé .pas) et turbo pascal enfin on m'a aidé .
cet exemple :
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
%{
uses lexlib,crt; 
%}


lettre [a-zA-Z]

chiffre [0-9]



%%

{chiffre} writeln('chiffre');

{lettre} writeln('lettre');


%%

begin
clrscr;



writeln('Analyseur lexicale');


writeln(' ENTRER L''EXPRESSION QUE VOUS VOULEZ ANALYSER S''IL VOUS PLAIT ');

writeln;

yylex;
end.
maintenant pour le yacc je voulais faire la même manipulation sur cet exemple que j'ai trouvé

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
%{

uses YaccLib, LexLib, crt;

var x : array [1..30] of Real;

%}

%token <Real> NUM       
%token <Integer> ID     
%type <Real> expr	

%left '+' '-'      	
%left '*' '/'
%right UMINUS

%token ILLEGAL 	

%%

input	:'\n'		 { yyaccept; }
	|expr '\n'	 { writeln('Analyse synthaxiqument correct'); writeln; writeln('Le resultat est de :',$1:10:2); yyaccept; }
	|ID '=' expr '\n'  {  writeln('Analyse synthaxiqument correct'); writeln; x[$1] := $3; yyaccept; writeln($3:10:2); }
	|NUM '=' expr '\n' {  writeln('Analyse synthaxiqument correct'); writeln; $1 := $3; yyaccept; writeln($3:10:2); }
	| error  '\n'            { yyerrok; exit; }
	;

expr    :  expr '+' expr	 { $$ := $1 + $3; }
	|  expr '-' expr	 { $$ := $1 - $3; }
	|  expr '*' expr	 { $$ := $1 * $3; }
	|  expr '/' expr	 { $$ := $1 / $3; }
	|  '(' expr ')'		 { $$ := $2; }
	|  '-' expr              { $$ := -$2; }
	|  NUM                   { $$ := $1; }
        |  ID                    { $$ := x[$1]; }
	;

%%

{$I tp1}

var i : Integer;

begin
clrscr;
writeln; 
writeln('Analyseur Syntaxique');

writeln(' ENTREz L''EXPRESSION QUE VOUS VOULEZ ANALYSER S''IL VOUS PLAIT ');
writeln;

  for i := 1 to 30 do x[i] := 0.0;
  if yyparse=0 then {done};

repeat until KeyPressed;

end.
mais arrivé a turbo pascal ça me donne cette erreur
Code :
erreur 15: file not found sysutils.TPU.
.

1. j'ai quelques questions est ce que l'exemple de yacc est juste?

2. %right UMINUS , %token ILLEGAL , writeln($3:10:2); ça veut dire quoi?
3. c'est pourquoi faire
Code :
1
2
3
4
  for i := 1 to 30 do x[i] := 0.0;
  if yyparse=0 then {done};

repeat until KeyPressed;
3. comment corrigé l'erreur file note found ?

je vous remercie
nessing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 18h33   #7
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 384
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 22 384
Points : 32 024
Points : 32 024
Envoyer un message via MSN à Médinoc
Bonjour,
  1. Aucune idée, je ne connais pas assez Turbo Pascal. En plus, je ne vois pas le fichier lex qui est supposé aller avec.
  2. Ça veut dire que ce que lex reconnait comme "UMINUS" (probablement le "moins" unaire) est un token avec ordre d'évaluation de droite à gauche, et que ce que lex reconnait comme "ILLEGAL" est un token aussi.
  3. Il remplit son tableau avec des zéros avant d'appeler yacc; puis il attend qu'on presse une touche, je pense.
  4. Aucune idée.
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone.
-- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2013, 18h42   #8
nessing
Nouveau Membre du Club
 
Inscription : novembre 2006
Messages : 116
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 116
Points : 28
Points : 28
Bonjour,
tout d'abord je vous remercie pour votre explication .
l'erreur du fichier not found est reglé mais là j'ai une autre erreur .
la compilation avec la comande yacc n'indique aucune eerreur mais quand je lance l'execution sur turbo pascal il m'indique cette erreur
Code :
1
2
3
4
fichierlex.PAS(5): Error 36: BEGIN expected.
uses LexLib,crt;
^
remarque le fichier lex s’exécute normalement sous turbo pascal.
alors je ne comprends pas comment ça se fait que quand j’exécute le fichier yacc l'erreur se positionne dans le fichier lex , de plus le begin il y est dans la dernière partie et pourquoi le "uses" est pointé ?
svp pouvez -vous m'aidé a trouvé l'erreur?
merci
nessing est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 01h48.


 
 
 
 
Partenaires

Hébergement Web