mathématiques discrètes
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

mathématiques discrètes



  1. #1
    essemme

    mathématiques discrètes


    ------

    bonjour,

    je suis dans les mathématiques discrètes.

    je voudrais savoir si epsilon, la production vide, est à considérer comme un terminal dans le calcul des symboles improductifs d'une grammaire hors contextes.

    une idée?

    -----

  2. #2
    Alphasaft

    Re : mathématiques discrètes

    Je m'y connais assez peu, mais il me semble que oui au vu de la définition, maintenant dans tous les cas hors du point de vue de la théorie la production vide ne me semble pas avoir un grand intérêt.
    En passant, le sujet de cette discussion mériterait un autre nom ("mathématiques discrètes" étant très vague et assez trompeur, on ne s'attend pas tellement à trouver un sujet sur le parsing théorique là-dedans).

    Voili voilou passez une bonne journée

  3. #3
    essemme

    Re : mathématiques discrètes

    Merci pour la réponse.

    la production vide sert, entre autre, dans la suppression des récursivités à gauche:
    Code:
    E -> E + T
    E -> nombre
    sans la récursivité à gauche:
    Code:
    E -> nombre R
    R -> + T R
    R-> epsilon
    elle sert aussi pour les symboles optionnels
    Code:
    symboleopt -> symbole
    symboleopt -> epsilon

  4. #4
    Alphasaft

    Re : mathématiques discrètes

    Effectivement, autant pour moi. J'oublie souvent (ayant abordé les grammaires du point de vue informatique, donc pratique) qu'il se cache toujours un coté théorique derrière la pratique (par contre je maintiens que a un usage quasi-exclusivement théorique).
    Je dis ça notamment pour l'optionnel : Au lieu de :

    E -> A
    E ->

    On écrit généralement :

    E -> [A]

    En EBNF (une sorte de langage pour la grammaire qui permet de simplifier, ce cas ci est un exemple parmi tant d'autres).
    D'où le fait que je vois rarement, si ce n'est jamais, ce fameux . Merci pour les éclaircissements !
    Dernière modification par Alphasaft ; 27/07/2022 à 20h53.

  5. A voir en vidéo sur Futura
  6. #5
    essemme

    Re : mathématiques discrètes

    pour un A optionnel, on écrit pas plutôt
    Code:
    E ::= (A)?

  7. #6
    Alphasaft

    Re : mathématiques discrètes

    C'est aussi ce que je pensais, mais après quelques recherches non ; peut être que c'est en BNF que c'est noté comme ça ?

  8. #7
    essemme

    Re : mathématiques discrètes

    l'epsilon-production n'apparaît pas explicitement pas mais il est sous-jacent
    voici mon analyseur syntaxique, epsilon est cité à l'avant dernière ligne de code
    Code:
    void syntaxique::anasynt(){
      bool sayerror=true;
      symbole X;
      unilex a;
      terminal lex;
      a=L.analex();
      for(X=pile.back();X!=sdolar;X=pile.back())
        if(a.getlex()==dolar){
          if(sayerror)
    	std::cerr<<"fin de fichier prématurée"<<std::endl;
          exit(1);
        }
        else if(vaut[a.getlex()]==X){
          lex=a.getlex();
          a=L.analex();
          pile.pop_back();
        }
        else if(estterminal(X)){
          if(sayerror)
    	std::cerr<<"ligne "<<L.getligne()<<": "<<strsymb[X]<<" attendu. "
    		 <<strterm[a.getlex()]<<" indiqué"<<std::endl;
          pile.pop_back();
          a=L.analex();
          sayerror=false;
        }
        else if(M[X][a.getlex()].empty()){
          if(sayerror){
    	std::cerr<<"ligne "<<L.getligne()<<": "<<erreur[X][a.getlex()]
    	       <<std::endl;
    	std::cerr<<'\t'<<"X="<<"s"<<strsymb[X]<<std::endl
    		 <<'\t'<<"a="<<strterm[a.getlex()]<<":"<<a.getlexeme()
    		 <<std::endl;
          }
          sayerror=false;
          a=L.analex();
          pile.pop_back();
        }
        else if( (! M[X][a.getlex()].empty()) &&M[X][a.getlex()].front()==ssynchro){
          if(sayerror){
    	std::cerr<<"ligne "<<L.getligne()<<": "<<erreur[X][a.getlex()]
    		 <<std::endl;
    	std::cerr<<'\t'<<"X="<<"s"<<strsymb[X]<<std::endl
    		 <<'\t'<<"a="<<strterm[a.getlex()]<<"::"<<a.getlexeme()
    		 <<std::endl;
          }
          sayerror=false;
          pile.pop_back();
        }
        else{
          sayerror=true;
          std::cout<<strsymb[X]<<" -> ";
          for(auto s:M[X][a.getlex()]){
    	std::cout<<strsymb[s]<<" ";
          }
          std::cout<<std::endl;
          pile.pop_back();
          for(int i=M[X][a.getlex()].size();i>0;i--)
    	if(M[X][a.getlex()].front() != sepsilon)
    	  pile.push_back(M[X][a.getlex()][i-1]);
        }
    }
    Dernière modification par essemme ; 29/07/2022 à 22h19.

Discussions similaires

  1. Mathématiques Discrètes
    Par invitebeda0472 dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 29/11/2012, 21h54
  2. Conseil de lecture sur les mathématiques discrètes pour l'informaticien
    Par Philou67 dans le forum Lectures scientifiques
    Réponses: 0
    Dernier message: 15/12/2010, 15h21
  3. Master mathématiques discrètes à Strasbourg
    Par invite64ea7460 dans le forum Orientation après le BAC
    Réponses: 2
    Dernier message: 02/02/2008, 13h27
  4. Mathématiques discrètes
    Par invitec17dba68 dans le forum Mathématiques du supérieur
    Réponses: 7
    Dernier message: 25/09/2007, 03h18