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

Delphi Discussion :

Le patron de conception "Interpréteur" avec Delphi 7, un tutoriel de Jérémy Laurent [Tutoriel]


Sujet :

Delphi

  1. #1
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut Le patron de conception "Interpréteur" avec Delphi 7, un tutoriel de Jérémy Laurent
    Patron de conception "Interpréteur" avec Delphi 7
    Un nouveau tutoriel de Jérémy Laurent

    Après le singleton, Jérémy Laurent poursuit son exploration des patrons de conception avec Delphi.

    Le patron de conception "Interpréteur" est un modèle visant à décrire et utiliser un langage spécifique pour réaliser des opérations en lien avec un domaine particulier. Ce langage est généralement propre au domaine auquel il est lié. Il est communément transmis dans une simple chaîne de caractères, car le texte brut est plus facile à lire et à manipuler. L’interpréteur est couramment utilisé pour analyser des chaînes algébriques et en renvoyer le résultat. Durant ce tutoriel, un projet tournant autour du JSON est créé petit à petit.

    Lire le tutoriel

    Et vous ?
    Que pensez-vous de cet article ?
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  2. #2
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 661
    Points : 3 630
    Points
    3 630
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Je profite de ce fil de discussion pour signaler (ou rappeler) le dépot Github de Jim Mc Keeth qui contient un projet regroupant des différents patterns de conceptions en Delphi :
    https://github.com/jimmckeeth/DelphiPatterns
    Mon site - Mes tutoriels - GitHub - N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  3. #3
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Avant toute chose, je tiens à rappeler le contexte.

    Il existe certainement des choses qui facilitent ou simplifient l'implémentation d'un pattern interpréteur avec un Delphi récent.
    Ce tutoriel s'adresse donc à ceux qui, comme moi, n'ont pas le choix et doivent continuer à utiliser Delphi 7 mais ne veulent pas se priver des avantages des DP.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    D7 ! un Challenge de "respecter" son style Delphi à l'ancienne, j'avoue que j'aime certains constructions modernes sans oublier mes bases.


    Une question non D7 sur "LiveBindings - évaluateur d'expressions", est-ce que l'on peut assimiler cette fonctionnalité à un patron de conception "Interpréteur" sur chaîne algébrique et non dans ton exemple une structure JSON

    Si l'on pousse la logique d'analyser et parser, par exemple pour du SQL ... peut-on y appliquer aussi le patron de conception "Interpréteur" ?
    Je connais vaguement les notions de Lex & Yacc, je découvre totalement cette "Interpreter pattern"
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Bonjour ShaiLeTroll

    J'ignore quels patterns se cachent derrière le Live Binding de cet article mais les lignes suivantes semblent s'en approcher.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Expression := TBindings.CreateExpression(Scope, maFormule.Text);
    // récupération de l'évaluation de la formule
    ValueInt := Expression.Evaluate;
    On peut faire beaucoup de choses avec les patterns et notamment les combiner pour produire quelque chose d'encore plus souple et/ou de plus robuste.
    Je citerai par exemple le pluggable factory qui combine abstract factory et prototype si je me souviens bien.
    Donc ça ne m'étonnerais pas s'il y avait un petit bout d'interpréteur dans l'évaluateur d'expression du Live Binding.
    Je commence d'ailleurs mon tuto en expliquant que "L’interpréteur est couramment utilisé pour analyser des chaînes algébriques et en renvoyer le résultat."

    Et pour le SQL, on pourrait effectivement passer par un interpréteur pour analyser la syntaxe ou pourquoi pas carrément exécuter la requête.
    Je soupçonne d'ailleurs que c'est le cas ou que ce fut le cas à un moment.

    Cette syntaxe issue de la doc de Microsoft se rapproche beaucoup de l'EBNF que j'utilise pour décrire la grammaire du JSON.
    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
    <SELECT statement> ::=    
        [ WITH { [ XMLNAMESPACES ,] [ <common_table_expression> [,...n] ] } ]  
        <query_expression>   
        [ ORDER BY <order_by_expression> ] 
        [ <FOR Clause>]   
        [ OPTION ( <query_hint> [ ,...n ] ) ]   
    <query_expression> ::=   
        { <query_specification> | ( <query_expression> ) }   
        [  { UNION [ ALL ] | EXCEPT | INTERSECT }  
            <query_specification> | ( <query_expression> ) [...n ] ]   
    <query_specification> ::=   
    SELECT [ ALL | DISTINCT ]   
        [TOP ( expression ) [PERCENT] [ WITH TIES ] ]   
        < select_list >   
        [ INTO new_table ]   
        [ FROM { <table_source> } [ ,...n ] ]   
        [ WHERE <search_condition> ]   
        [ <GROUP BY> ]   
        [ HAVING < search_condition > ]
    ou encore la documentation de la librairie Microsoft.SqlServer.TransactSql.ScriptDom.
    On y retrouve par exemple des classes SelectStatement ou WhereClause héritant d'une classe abtraite TSqlFragment, bref la base du pattern
    On y retrouve des énumération comme SortOrder ou SetOptions qui ressemble étrangement aux expressions terminales que je présente et qui forment ensuite les token permettant de vérifier la grammaire.
    On y retrouve aussi cette notion de token dans TSqlParserToken dont les propriétés ressemble assez à ce que je décrit dans ma propre classe de jeton.

    Donc oui, si on voulait analyser ou exécuter du SQL, on pourrait certainement finir par y arriver avec un pattern interpréteur.

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/01/2017, 13h41
  2. Réponses: 7
    Dernier message: 09/10/2013, 17h35
  3. Réponses: 5
    Dernier message: 08/07/2002, 16h22
  4. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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