IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langages de programmation Discussion :

compiler et executer lex


Sujet :

Langages de programmation

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 134
    Points : 65
    Points
    65
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 134
    Points : 65
    Points
    65
    Par défaut
    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

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    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.

  4. #4
    Expert confirmé Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 619
    Points : 4 350
    Points
    4 350
    Par défaut
    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

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 134
    Points : 65
    Points
    65
    Par défaut
    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

  6. #6
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 134
    Points : 65
    Points
    65
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    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.

  8. #8
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 134
    Points : 65
    Points
    65
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

Discussions similaires

  1. Réponses: 13
    Dernier message: 30/11/2006, 21h19
  2. Procedure qui compile, probleme execution
    Par zuzuu dans le forum SQL
    Réponses: 6
    Dernier message: 31/08/2006, 10h41
  3. Erreur après compilation : cannot execute binary file
    Par Djo00 dans le forum Administration système
    Réponses: 8
    Dernier message: 21/07/2006, 16h26
  4. Réponses: 12
    Dernier message: 06/06/2006, 18h22
  5. [Kylix] Compilation OK Execution pas ok
    Par teurf dans le forum EDI
    Réponses: 14
    Dernier message: 03/12/2002, 15h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo