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

C++/CLI Discussion :

comment ex�cuter un script flex bison


Sujet :

C++/CLI

  1. #1
    Membre �clair�
    Homme Profil pro
    sans emploi
    Inscrit en
    F�vrier 2014
    Messages
    365
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 50
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activit� : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2014
    Messages : 365
    Par d�faut comment ex�cuter un script flex bison
    Bonjour

    J'ai trouv� 1 script flex bison que je cherche � comprendre et ex�cuter

    main.ccp
    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
    // section1: declaration, option parametres (settings)
    //----------------------------------------------------
    %{
    // declaraction de variables
    int chars = 0;
    int words = 0;
    int line = 0;
    %}
     
    %%
     
    // section 2: liste de motifs (pattern) et d'action
    //--------------------------------------------------
    // motif/pattern				action: c code to execute when the pattern mattches
    [a-zA-Z]+						{words++; chars += strlen(yytext);}								// strlen(): calculer la longueur de la chaîne de caractères
    //matches a word				updated nbr of words and characters seen
    //								yytext:	- variable
    //										- point to the input text that the pattern just matched
    \n								{chars++; lines++;}
    // matches a new line			updates the number of lines and characteres
    .								{chars++;}
    // regex dot <=> any character
     
    // each pattern at the beginning of a line
    // flex considers any line that starts with whitespace to be code to be copied into the generated c program
     
    %%	// separateur de section
     
    // section3: code c
    //-----------------
    int main( int argc, char* args[] )
    {
    	yylex();	// La compilation d'une source flex produit une fonction yylex(). Un appel de yylex() déclanche une analyse lexicale du flux yyin
    	printf("%8d%8d%8d\n", lines, words, chars);
    	return 0;
    }
    quand je le lance dans visual studio code le message d'erreur suivant appara�t:
    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
    main2.cpp:1:1: error: expected unqualified-id before '%' token
        1 | %{
          | ^
    main2.cpp:8:1: error: 'LETTRE' does not name a type
        8 | LETTRE   [a-zA-Z]
          | ^~~~~~
    main2.cpp:10:18: error: expected unqualified-id before '+' token
       10 | MOT      {LETTRE}+
          |                  ^
    main2.cpp:11:19: error: expected unqualified-id before '+' token
       11 | NOMBRE   {CHIFFRE}+
          |                   ^
    main2.cpp:16:15: error: 'total' does not name a type
       16 |     {NOMBRE}  total+= atoi( yytext );
          |               ^~~~~
    main2.cpp:17:5: error: expected unqualified-id before '{' token
       17 |     {MOT}     if (yyleng > score){
          |     ^
    main2.cpp:17:15: error: expected unqualified-id before 'if'
       17 |     {MOT}     if (yyleng > score){
          |               ^~
    main2.cpp:21:6: error: expected unqualified-id before '.' token
       21 |      .        printf("\nNi mot, ni nombre :%s", yytext);
          |      ^
    main2.cpp:22:5: error: expected unqualified-id before '%' token
       22 |     %%
          |     ^
    Pouvez vous m'aider?
    Cordialement

  2. #2
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 644
    Par d�faut RTFM Flex Bison
    Bonjour,

    Il semble que vous essayez de compiler ce code comme si c'�tait du C++.

    Il faut d'abord le faire passer par flex, ce qui g�n�rera un code c. Ce code c comporte une fonction yylex() que vous pouvez utiliser pour faire l'analyse lexicale d�crite (ici elle se contente de compter les mots, les lignes et les caract�res du flux yin).

    Salutations

  3. #3
    Membre �clair�
    Homme Profil pro
    sans emploi
    Inscrit en
    F�vrier 2014
    Messages
    365
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 50
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activit� : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2014
    Messages : 365
    Par d�faut
    J'ai pour fichiers d'origine
    Nom : Sans titre.png
Affichages : 676
Taille : 8,5 Ko

    Je compile en ligne de commande
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    // cmd:
    // changer de repertoire courant: cd C:...\flex-and-bison-master\ch01-getting_started\calc
    // win_bison -d parser.y                                   => créer les fichiers parser.c et parser.h 
    // win_flex -o main.c scanner.l                            => créer les fichiers scanner.c et scanner.h à partir de scanner.l
    // gcc -o flex_bison_chap1.exe ??????.c                      => créer le fichier flex_bison_chap1.exe à partir de ??????.c
    A partir de quel fichier ??????.c cr�er flex_bison_chap1.exe?

  4. #4
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 644
    Par d�faut
    Bonjour,

    Les commandes flex et bison produisent des fichiers c qui comportent des fonctions d'analyse lexicale et syntaxique. Pour les utiliser, il faut un corps de programme principal, ici a priori en c, qui, apr�s les avoir d�clar�s (.h) les utilise.

    En r�sum�, flex et bison sont des outils qui g�n�rent d'autres outils en c. Le programme principal les utilisent. Dans l'exemple fourni yylex() compte les lignes, les mots et les caract�res) mais il n'en fait rien. C'est au programme principal qu'il revient d'alimenter yylex(), de l'ex�cuter jusqu'� ce qu'il ne trouve plus de token (soit en fin de flux/fichier soit sur erreur) puis d'afficher les r�sultats stock�s dans les variables compteur de yylex().

    Dans le cas de cet exemple p�dagogique, il n'y a qu'un fichier .l qui g�n�re un .c autonome (pas d'analyse syntaxique ni de programme utilisateur). Sauf erreur de ma part, il n'y a pas d'affectation de flux d'entr�e � yyin. Je pr�sume qu'il �tait pr�vu d'utiliser argv pour r�cup�rer un nom de fichier � traiter en tant que yyin, mais je ne vois pas o�. A d�faut il n'a rien � traiter.

    Pour corriger cela on trouve sur le net des trucs comme �a � ins�rer juste avant le yylex (sans traitement d'erreur !) :
    Code C : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
       if(argc > 1)
          yyin = fopen(argv[1], "r" );
       else
          yyin = stdin;   // entrée clavier par défaut
    En r�sum� : scanner.l -> flex -> scanner.c -> compilation c -> scanner.exe.

    Salutations

Discussions similaires

  1. Comment ex�cuter un script SQL ?
    Par Mafate dans le forum D�buter
    R�ponses: 2
    Dernier message: 11/03/2008, 10h52
  2. Comment ex�cuter un script avant la compilation ?
    Par jackfirst72 dans le forum Delphi
    R�ponses: 1
    Dernier message: 05/04/2007, 10h14
  3. R�ponses: 3
    Dernier message: 26/02/2007, 19h19
  4. R�ponses: 5
    Dernier message: 16/03/2006, 00h37
  5. R�ponses: 1
    Dernier message: 23/02/2005, 11h23

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