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 Discussion :

Création d'un langage de script


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut Création d'un langage de script


    Question pour ceux qui s'y connaissent... Pour étude, occupation et satisfaction personnelle, je réfléchi sur la création de mon propre langage de script interprété. Je sais gros sujet mais là n'est pas la question vu que c'est un projet purement personnel donc pas de message là dessus

    Je me posais simplement une question, pourquoi choisir flex/bison plutôt que le parsing manuel ou inversement comme le cas de python par exemple où c'est fait manuellement ? Quels sont les avantages et inconvenient quant à ces deux choix ?

    Est-ce un choix stratégique ou personnel ? Ou est-ce que c'est un choix technique, ... ou autre ?


    pour vos avis éclairé
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 475
    Par défaut
    Bonjour,

    Flex et Bison sont, comme tu le sais probablement, les alter-egos GNU de Lex & Yacc, qui sont les outils « historiques ». En plus, ils fonctionnent encore très bien même s'ils pourraient être remis un peu au goût du jour, notamment au niveau des langages orientés objet.

    Au niveau du parsing en lui-même, maintenant, ça revient à demander en quoi les expressions régulières sont un avantage, par rapport à une lecture manuelle de la chaîne de caractères. En fait, le traitement des langages a fait l'objet d'études dont on a notablement dégagé la hiérarchie de Chomsky, par exemple.

    Et, à dire vrai, lorsque l'on a commencé à décrire des langages de cette façon, on ne revient plus en arrière. :-) En plus, quand ton langage commence à gagner en complexité, c'est la façon la plus sûre de détecter les ambiguïtés, c'est-à-dire les expressions qui peuvent être interprétées de deux manières différentes, même en fonction du contexte.

    Maintenant, pour répondre à ta question, l'intérêt se situe surtout sur la forme, c'est-à-dire la capacité à décrire des langages en utilisant des grammaires normalisées ou tout comme. Par contre, même s'il marche bien, la qualité du code produit n'est pas extraordinaire.

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    C'est vrai que le cas de l'écriture voir avant tout même la bonne compréhension à la relecture d'un source flex ou bison, n'est pas très claire. Les tutoriels n'étant pas légions ca décourage vite l'utilisation de ces outils.

    Bon, maîtrisant parfaitement le parsing de fichiers texte manuellement, cela reste un bon exercice de le faire soi-même vu que je connais très très mal flex et bison... à moins que tu connaisse un excellent tutoriel en français de préférence mais par contre très pédagogique

    Cela dit, ca ne reste qu'un exercice personnel, même si ca n'aboutit à rien ou pas grand chose ce n'est pas grave, j'aurais préféré utiliser cette expérience personnelle pour étudier ces outils.
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 475
    Par défaut
    Citation Envoyé par Franck.H Voir le message
    Les tutoriels n'étant pas légions ca décourage vite l'utilisation de ces outils.
    Ça, ce n'est pas vrai. Il suffit de chercher « Lex & Yacc » dans Google pour en avoir des tonnes. À dire vrai, il y a plus de tutoriels que de demandes d'aide pour Lex & Yacc. :-) Il y a même un vieil O'reilly qui leur est consacré.

    Bon, maîtrisant parfaitement le parsing de fichiers texte manuellement, cela reste un bon exercice de le faire soi-même vu que je connais très très mal flex et bison... à moins que tu connaisse un excellent tutoriel en français de préférence mais par contre très pédagogique
    À dire vrai, je partagerais bien un de mes anciens devoirs faits jadis en cours parce que l'exercice est intéressant, mais je crois savoir que le sujet est toujours distribué aux étudiants actuels, donc… chut. :-)

    Par contre, ça dépend de ce que tu entends par « maîtriser parfaitement » le parsing. Est-ce que tu lis ton fichier mot à mot et que tu agis au cas par cas, ou bien est-ce que tu définis une grammaire à l'avance ? Dans le premier cas, comment écrirais-tu un parser de fichiers *.c, par exemple ?

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Ça, ce n'est pas vrai. Il suffit de chercher « Lex & Yacc » dans Google pour en avoir des tonnes. À dire vrai, il y a plus de tutoriels que de demandes d'aide pour Lex & Yacc. :-) Il y a même un vieil O'reilly qui leur est consacré.
    Mouais j'en ai déjà trouvé quelques-uns mais pour le moment rien de bien concret à part les bases mais pas forcément d'exemple concret avec étude de cas par exemple. Par contre des infos balancées à la hâte, ca pas de soucis


    Citation Envoyé par Obsidian Voir le message
    Par contre, ça dépend de ce que tu entends par « maîtriser parfaitement » le parsing. Est-ce que tu lis ton fichier mot à mot et que tu agis au cas par cas, ou bien est-ce que tu définis une grammaire à l'avance ? Dans le premier cas, comment écrirais-tu un parser de fichiers *.c, par exemple ?
    Je parlais de manière générale, pour le moment je n'est même pas encore produit un seul fichier source, c'est en cours d'étude tout simplement

    Niveau syntaxe pas de soucis, je la maîtrise étant donné que je veut me rapprocher le plus possible du C, mon langage préféré
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Il y a même un vieil O'reilly qui leur est consacré.
    Je viens de trouver un livre sur Flex & Bison: Amazon.fr: John Levine: Livres en anglais@@AMEPARAM@@http://ecx.images-amazon.com/images/I/41UCO-psy7L.@@AMEPARAM@@41UCO-psy7L et assez récent apparemment (2009), je vais me le commander je crois
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 475
    Par défaut
    Pour faire simple, on va dire que Lex & Yacc sont très utilisés pour écrire des compilateurs.

    Si tu veux t'initier à Lex & Yacc et avoir un exemple concret, le mieux est encore d'essayer de réaliser la calculatrice à quatre opérations (en gérant les priorités). L'exercice est considéré comme le « Hello World » de ces outils.

    Maintenant, pour en exploiter pleinement la puissance et l'intérêt, il faut quelques notions de langages formels. Lex & Yacc sont deux outils distincts, mais dont l'utilisation est similaire et qui sont faits pour travailler de concert.

    Lex est un « lexer », c'est-à-dire un outil qui va te permettre de reconnaître des « lexons », c'est-à-dire des unités lexicales. Pour cela, tu vas définir une collection d'expression régulières, qui vont retrouver linéairement ces lexons au sein du texte que tu analyses. Ces unités lexicales peuvent être des mots, mais également des choses plus évoluées telles que des nombres, par exemple. Or, ceux-ci sont en nombre infini, donc il est impossible de tous les énumérer, mais il est tout-à-fait possible, à voir la manière dont un mot est écrit, de dire s'il s'agit bien d'un nombre ou pas.

    Dès lors, une fois reconnu comme tel, tu n'as plus besoin, dans un premier temps, de connaître sa valeur exacte. Si, par exemple, le mot que tu viens de lire suit un signe « = » qui lui même suit un nom de variable (donc une affection, en C) et que cette variable est numérique, la seule chose que tu aies besoin de savoir est que ce mot est un nombre, quelle que soit sa forme.

    De là, Yacc te permet d'écrire des règles de grammaire combinant ces lexons, de reconnaître les textes respectant ce langage. La plupart du temps, donc, il s'agira de langages informatiques. Cela dit, rien ne t'interdit, en théorie, de réécrire les règles de grammaire de la langue française et t'en servir comme add-on pour ton traitement de texte. Par contre, il faudra prévoir plusieurs années de travail.

    Enfin, et ce n'est pas là leur moindre intérêt, dans un outil comme dans l'autre, tu peux associer à chaque règle quelques lignes de code, exécutées lorsque ladite règle est vérifiée. Tu vas t'en servir en faisant la calculatrice, par exemple.

    Maintenant, la hiérarchie de Chomsky est importante pour savoir ce qui doit être fait avec Lex et ce qui doit être fait avec Yacc. Une question pertinente étant alors « peut-on tout reconnaître avec une expression régulière » ? Un début de réponse ici.

Discussions similaires

  1. [FLASH MX2004] Création d'un bouton Action Script
    Par chocobos dans le forum Flash
    Réponses: 12
    Dernier message: 13/04/2005, 12h03
  2. Définition langage de scripting
    Par Filippo dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 28/12/2004, 09h25
  3. [langage] perl script pour balancer un B-arbre
    Par RonMaster dans le forum Langage
    Réponses: 5
    Dernier message: 22/10/2004, 17h35
  4. [langage] cherche script pour formater une chaine
    Par MASSAKA dans le forum Langage
    Réponses: 7
    Dernier message: 12/11/2003, 12h18
  5. Création d'un langage de programmation
    Par liquid_stone dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 09/11/2003, 16h44

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