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

Autres langages Discussion :

[BNF] Différence entre digit, letter et boolean


Sujet :

Autres langages

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 58
    Par défaut [BNF] Différence entre digit, letter et boolean
    Bonjour a tous,

    Je débute dans l'apprentissage des langages formels et je suis en train d'essayer de créer un parser, pour cela je dois définir le type boolean.

    dans mes définitions de caractères j'ai déja défini:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CHARACTERS
    letter="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_" .
    digit="0123456789" .
    true="TRUE" .
    false="FALSE" .
    puis dans mes Tokens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ident = letter{letter|digit}.
    number = digit{digit}.
    boolean = true|false.
    Le problème et que dans ce cas mon compilateur n'arrive pas a faire la différence entre les 'ident' et 'boolean'.

    et si je défini :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    true="1".
    false="0".
    il ne différencie plus 'number' et 'boolean'.

    Quelqu'un saurait-il comment définir les boolean?

  2. #2
    Membre éprouvé Avatar de apokrif
    Inscrit en
    Novembre 2006
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 122
    Par défaut
    Citation Envoyé par Micromalice
    letter="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_"
    true="TRUE" .
    A mon avis, vous confondez plusieurs notations: vous utilisez la même syntaxe pour définir une lettre et une chaîne (qui est une suite de lettres): vos règles disent soit qu'une lettre est la chaîne "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_", soit que true est *une* des lettres TRUE (l'un des deux, car je ne connais pas la syntaxe de votre générateur de parseurs, mais en tout cas il y a une distinction qui n'est pas faite).

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 58
    Par défaut
    effectivement, ce n'est pas dans CHARACTERS qu'il faut que je définisse mes valeurs mais bien dans la PRODUCTION
    ce qui donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CHARACTERS
    letter="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_" .
    digit="0123456789" .
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PRODUCTIONS
    Bool <var value: Boolean> =
            "true" |     
            "false" 
            .
    Par contre dans ce cas a la compilation j'ai 'unreachable non-terminals Bool'

    tandisqu'avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    value <var value:Variant>
                   (. var  S:String ; .) 
     =
            "true" | 
            "false" | 
            string | 
            number | 
            float.
    la compilation marche...

    Je dois passer a coté de quelquechose mais je ne vois pas. Si quelqu'un est capable de m'expliquer.

    PS: J'utilise ParserBuilder (avec Coco/R for Delphi)

  4. #4
    Membre éprouvé Avatar de apokrif
    Inscrit en
    Novembre 2006
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 122
    Par défaut
    Citation Envoyé par Micromalice
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PRODUCTIONS
    Bool <var value: Boolean> =
            "true" |     
            "false" 
            .
    Par contre dans ce cas a la compilation j'ai 'unreachable non-terminals Bool'
    Avez-vous une règle du genre (expression = Bool | machin) pour dire que l'expression analysée peut être soit un bool, soit un number (ou string ou autre) ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 58
    Par défaut
    Non effectivement, je n'avais pas encore défini qu'une valeur pouvait être bool...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    value <var value:Variant>
                   (. var  S:String ; .) 
     =
            bool        | 
            string      | 
            number    | 
            float.
    
    
    bool <var value: Boolean> =
            "true" |     
            "false" 
            .

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 187
    Par défaut
    [QUOTE=Micromalice;1831914]Bonjour a tous,

    Je débute dans l'apprentissage des langages formels et je suis en train d'essayer de créer un parser, pour cela je dois définir le type boolean.

    dans mes définitions de caractères j'ai déja défini:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CHARACTERS
    letter="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_" .
    digit="0123456789" .
    true="TRUE" .
    false="FALSE" .
    a mon avis tu peux déclarer ça

    letter=("A"-"Z","a"-"z","_")
    digit=("0"-"9")
    true="TRUE"
    false="FALSE"

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

Discussions similaires

  1. Différence entre un "bidouilleur" et un Pro ?
    Par christ_mallet dans le forum Débats sur le développement - Le Best Of
    Réponses: 290
    Dernier message: 28/11/2011, 10h53
  2. [Validate] Différence entre Digits et Int
    Par dorian53 dans le forum Autres composants
    Réponses: 3
    Dernier message: 31/03/2009, 14h37
  3. Différence entre boolean et gboolean
    Par abdelilah dans le forum C
    Réponses: 6
    Dernier message: 06/05/2008, 13h42
  4. Différences entre jmp, jz, jnz, etc
    Par christbilale dans le forum Assembleur
    Réponses: 3
    Dernier message: 05/07/2002, 15h09
  5. Réponses: 3
    Dernier message: 07/05/2002, 16h06

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