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

Langage Delphi Discussion :

declaration library et program


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 187
    Points : 65
    Points
    65
    Par défaut declaration library et program
    bonjour tous le monde

    j'ai une grammaire delphi qui définit la syntaxe suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      (library | program) identificateur ';' [usesSection] [ExportsBlock] CompoundStmt [ExportsBlock]  '.'
    j'ai essayé de parser un exemple de code en suivant cette définition:

    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
     
    program Program1;
     
    uses windows;
     
    type
          IdProgram = class (herit)
     
    	              id1, id2 : string;
    		  public 
    		  idPub, IdPub2 : char;
        end;
     
    exports ident name '522', ident2 index '480';
     
     
    begin 
     
    	if g < length(tab) then   continue;
    end 
     
    exports identApres name '522', ident2Apres index '480';
     
    .
    ça m'a paru illogique , il manque pas un end avant le '.' ???

    merci de me repondre

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    il me parait douteux de mettre quoi que ce soit entre le END final et son point.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 187
    Points : 65
    Points
    65
    Par défaut
    oui j'ai meme vu deux grammaires différentes, j'ai trouvé que c'est la meme syntaxe
    enfin pour régler le probleme j'ai ajouté un [end] optinnelle avant le '.' mais chui pas sur s'il est vrai

    SVP ceux qui connaissent bien delphi, aidez moi

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par mima_mine Voir le message
    oui j'ai meme vu deux grammaires différentes, j'ai trouvé que c'est la meme syntaxe
    enfin pour régler le probleme j'ai ajouté un [end] optinnelle avant le '.' mais chui pas sur s'il est vrai

    SVP ceux qui connaissent bien delphi, aidez moi
    c'est supposé être quoi "CompoundStmt" ?

    voici le programme minimal sous Delphi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    program Project1;
     
    end.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Je vois plutôt un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    program Toto;
     
     
    begin ------
      for i ...    | 
      while..     |---CompoundStmt 
                   |
    end -------  
     
    .
    Akim Merabet

  6. #6
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 187
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    c'est supposé être quoi "CompoundStmt" ?
    un compound statement est un block de statement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Begin
      List Statement
    End


    voici le programme minimal sous Delphi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    program Project1;
     
    end.


    mais dans ma grammaire le block statement est obligatoire?

  7. #7
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 187
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par Kaféine Voir le message
    Je vois plutôt un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    program Toto;
     
     
    begin ------
      for i ...    | 
      while..     |---CompoundStmt 
                   |
    end -------  
     
    .
    oui c'est ce que j'ai trouvé mais elle m'a parru bizzar cette syntaxe !!

  8. #8
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    ce qui me chagrine dans ta grammaire, c'est que si l'exports peut se trouver à plusieurs endroit c'est également le cas de TYPE CONST, VAR, PROCEDURE et FUNCTION qui n'apparaissent pas

    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
     
    program p1;
     
    const
      c1=1;
     
    type
      t1=integer;
     
    procedure f1;
    begin
    end;
     
    var
      v1:t1;
     
    exports
      f1;
     
    function f2:Integer;
    begin
    end;
     
    type
      t2=word;
     
    exports
      f2;
     
    var
     v1:char;
     
    const 
     c2=2;
     
    begin // NB: dans ce cas Delphi (5) réclame un begin/end
    end.
    et en tout état de cause, rien entre le end et son point final.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  9. #9
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Salut,

    Je ne pense pas qu'il faille à tout prix chercher une quelconque concordance de cette grammaire avec celle de delphi. A l'instar d'une vielle pub pour une boisson gazeuse que j'aime pas..., ça a la couleur de delphi mais c'est pas du delphi!

    Les sections "UsesSection" et les "ExportsBlock" étant optionnelles, le programme minimal suivant cette grammaire doit être:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    program Toto;
     
    [UseSection]
     
    [ExportBlock]
     
    begin
    end [ExportsBlock] .
    ce qui me chagrine dans ta grammaire, c'est que si l'exports peut se trouver à plusieurs endroit c'est également le cas de TYPE CONST, VAR, PROCEDURE et FUNCTION qui n'apparaissent pas
    Il n'y a pas dans la grammaire donnée de définition pour une section "type" ou une section "implementation".
    Pas de définition non plus pour les procédures et fonctions.
    Les statements de CompoundStmt doivent seulement être IfThen, For, While, Try...
    Mais bon ca reste de la spéculation, il faudrais la définition complète de CompoundStmt et plus particulièrement, la définition de la "Liste de Statement" et d'un Statement, compris entre le begin et le end du CompoundStmt pour être sûr.
    Akim Merabet

  10. #10
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 187
    Points : 65
    Points
    65
    Par défaut


    Les sections "UsesSection" et les "ExportsBlock" étant optionnelles, le programme minimal suivant cette grammaire doit être:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    program Toto;
     
    [UseSection]
     
    [ExportBlock]
     
    begin
    end [ExportsBlock] .
    mais dans l'exportsBlock j'ai un ";" obligatoire à la fin, en quelques sorte le code doit etre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    program Toto;
     
    [UsesSection]
     
    [ExportsBlock ";"]
     
    begin
    end [ExportsBlock ";" ] "."
    et là je pense pas qu'il est vrai !!!!

    Mais bon ca reste de la spéculation, il faudrais la définition complète de CompoundStmt et plus particulièrement, la définition de la "Liste de Statement" et d'un Statement, compris entre le begin et le end du CompoundStmt pour être sûr.
    Liste de Statement : Statement() ( ";" Statement() )*
    (* equiv (0..n )occurence)
    statement peut etre if, while., goto, AssignmentStmt ....

  11. #11
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Citation Envoyé par mima_mine
    mais dans l'exportsBlock j'ai un ";" obligatoire à la fin, en quelques sorte le code doit etre
    Et bien oui....si le ";" est dans la définition de exportblock... où est le problème?
    Akim Merabet

  12. #12
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 187
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par Kaféine Voir le message
    Et bien oui....si le ";" est dans la définition de exportblock... où est le problème?

    le problème est dans l'exemple que j'ai exposé la 1ere fois

    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
     
    program Program1;
     
    uses windows;
     
    type
          IdProgram = class (herit)
     
    	              id1, id2 : string;
    		  public 
    		  idPub, IdPub2 : char;
        end;
     
    exports ident name '522', ident2 index '480';
     
     
    begin 
     
    	if g < length(tab) then   continue;
    end 
     
    exports identApres name '522', ident2Apres index '480';
     
    .
    dans ce cas il manque un end avant le point ????
    et le problème c'est que ma grammaire accepte ce code, qu'il m'a parru incomplet !!

  13. #13
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    dans ce cas il manque un end avant le point ????
    et le problème c'est que ma grammaire accepte ce code, qu'il m'a parru incomplet !!
    Bah non, il manque un end pour delphi mais pas pour ta grammaire.

    en plus ta grammaire ne prend pas en compte cette portion normalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    type
          IdProgram = class (herit)
     
    	              id1, id2 : string;
    		  public 
    		  idPub, IdPub2 : char;
        end;
    Akim Merabet

  14. #14
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 187
    Points : 65
    Points
    65
    Par défaut

    Bah non, il manque un end pour Delphi mais pas pour ta grammaire.
    mais ma grammaire traite le langage Delphi !!! et elle parse (parsing) des codes compiler sous delphi, donc si on aura un code qui contient un "end" avant le point et on le parse ça va pas marcher, il nous signale une erreur
    vous me comprenez ?!!


    en plus ta grammaire ne prend pas en compte cette portion normalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    type
          IdProgram = class (herit)
     
    	              id1, id2 : string;
    		  public 
    		  idPub, IdPub2 : char;
        end;
    oui dans ce cas, on aura une erreur parce qu'il manque le "block Statement" qu'il est obligatoire !!

  15. #15
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 187
    Points : 65
    Points
    65
    Par défaut
    dans ma grammaire les codes qui commence par Library ou Program, ont presque la meme syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Library Name ";"
     
    [UsesSection] [OptExportBlock()] CompoundStmt() [OptExportBlock()] "."
    les crochet [] veut dire que c'est optionnelle
    donc la partie CompoundStmt est obligatoire

    dans le net j'ai trouvé l'exemple suivant

    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
     
     
    library DFRSEPSdev;
     
      uses
      ComServ,
      DFrSEPS in 'DFrSEPS.pas';
     
      exports
      DllGetClassObject,
      DllCanUnloadNow,
      DllRegisterServer,
      DllUnregisterServer;
     
     
      {$r PropSRES.res}
     
     
      begin
      end.
    donc on doit mettre le compoundStatement même s'il est à vide,
    alors c'est le même cas pour Program?? n'est pas !!!

  16. #16
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    comme dit plus haut ceci est valide sous Delphi 5

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    library Project1;
     
    end.
    mais ceci ne l'est pas !!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    libray project1;
     
    exports
      p1;
     
    begin
    end
     
    exports
      p2;
     
    .
    ton second OptExportBlock est donc faux.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  17. #17
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 187
    Points : 65
    Points
    65
    Par défaut
    merci pour votre reponse
    mais juste pour delphi 5, mais la grammaire doit etre pour toutes les versions de delphi (jusqu'a les dernière version) !!

  18. #18
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    la syntaxe ne varie pas de D5 a D2010 (ou presque pas)!


    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
    unit ...; // obligatoire
     
    interface // obligatoire dans unité
     
    ~ uses ...; // facultatif mais doit etre rencontré aprés interface
     
    * const | type | function | procedure | var // melange de ceci
     
    implementation // obligatoire doit etre rencontré aprés declarations interface
     
    ~ uses ...; // facultatif mais doit etre rencontré aprés implementation
     
    * const | type | function | procedure | var // melange de ceci
     
    ~ initialization ... // facultatif, obligatoir si finalization 
     
    finalization ... // obligatoire aprés finalization mais doit figurer en amont du End. 
     
    end. // obligatoire en fin d'unité


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    program ...; // obligatoire
     
    uses ...; // facultatif mais doit figurer aprés program
     
    * const | type | function | procedure | var // un melange de ceci
     
     
    begin // obligatoire doit figurer en amont du end.
     
    end. // obligatoire en fin de programme


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    library ...; // obligatoire
     
    uses ...; // facultatif mais doit figurer aprés library
     
    * const | type | function | procedure | var | exports  // une melange de ceci
     
     
    begin // obligatoire, doit figurer en amont du end.
     
    end. // obligatoire
    (hors commentaire et directives de compilation)

    règles pour Unit, Program, Library :
    - syntaxe : [unit|program|library] [nom];
    - portée : globale debut fichier
    - obligatoire
    - doit se trouver au début du fichier

    Règles pour interface :
    - syntaxe : unit...; interface {...}
    - portée : globale debut fichier
    - obligatoire dans unit, interdit dans program et library
    - doit figurer après Unit

    Règles pour implementation :
    - syntaxe : unit...; interface {...} implementation {...}
    - portée : globale milieu de fichier
    - obligatoire même si vide avec unit, interdit dans program et library
    - doit figurer après les déclarations d'interface

    Règles pour end. :
    - syntaxe : [unit [implementation {...}]|program{...}begin{...}|library{...}begin{...}] end.
    - portée : globale fin de fichier
    - obligatoire en fin de fichier
    - doit figurer après toutes déclarations
    - déclarations interdites entre END et . et aprés END.

    Règles pour Uses :
    - syntaxe : uses [nom[, nom, ...]];
    - portée : globale, globale interface/implementation, debut/milieu de fichier
    - facultatif
    - doit se trouver immédiatement après les mots clefs Program, Library, Interface ou Implementation


    Régles pour Exports :
    - syntaxe : exports [nom[,nom[, nom name nom]]];
    - portée : globale aprés uses, implementation, interface ...
    - facultatif dans unit, program et library

    Régles pour initialization, finalization :
    - syntaxe : {...} initialization {...} finalization {...} end.
    - facultatif
    - portée : globale, fin de fichier




    voila, ça doit etre ça si je n'ai pas fait d'erreur.
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  19. #19
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 187
    Points : 65
    Points
    65
    Par défaut
    merci pour votre reponse
    dans ce cas, on enleve le ExportsBlock qui est situé après le Block Begin-End ?
    thanks

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Declaration d objets en tableau
    Par Spin dans le forum Composants VCL
    Réponses: 6
    Dernier message: 16/03/2003, 22h18
  2. [Kylix] Chargement de libraries
    Par _dack_ dans le forum EDI
    Réponses: 1
    Dernier message: 14/03/2003, 09h07
  3. [Dev c++ 4] implicite declaration of function "int kbhi
    Par Torpedox dans le forum Dev-C++
    Réponses: 5
    Dernier message: 01/01/2003, 13h37
  4. Declaration Type ds une procedure
    Par Qwazerty dans le forum Langage
    Réponses: 6
    Dernier message: 28/08/2002, 09h09
  5. Declarer une dll Delphi ?
    Par DelphiCool dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/07/2002, 10h07

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