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

Mathématiques Discussion :

EBNF pour JSON


Sujet :

Mathématiques

  1. #1
    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 EBNF pour JSON
    Bonjour,

    Pour les besoins d'un tutoriel j'ai besoin de définir la grammaire du JSON.
    Pendant que je la rédigeais, un détail m'a chiffonné.

    Sur le site du JSON on donne la définition suivante :
    Citation Envoyé par http://www.json.org/
    An object is an unordered set of name/value pairs. An object begins with { (left brace) and ends with } (right brace). Each name is followed by : (colon) and the name/value pairs are separated by , (comma).
    J'en ai donc déduit la grammaire suivante :
    Code EBNF : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Object = LEFT_BRACE, [SetOfPairs], RIGHT_BRACE;
    SetOfPairs = Pair, {COMMA, Pair};
    Pair = String, COLON, Value;
    LEFT_BRACE = "{";
    RIGHT_BRACE = "}";
    COMMA = ",";
    COLON = ":";

    Pourtant la grammaire donnée sur le site est la suivante :
    Code EBNF : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Object = LEFT_BRACE, [Members], RIGHT_BRACE;
    Members = Pair, [COMMA, Members];
    Pair = String, COLON, Value;
    LEFT_BRACE = "{";
    RIGHT_BRACE = "}";
    COMMA = ",";
    COLON = ":";

    Le SetOfPairs a changé pour devenir Members. Ce n'est qu'un nommage, rien de bien méchant.
    Ce que je ne comprends pas, c'est pourquoi la liste de Pair a été transformée en cet appel récursif à Members.

    J'ai fait différents scénario sur papiers avec différents JSON.
    Au final, les deux grammaires fonctionnent alors pourquoi cette transformation ?
    Y'a t-il un détail qui m'échappe ?
    Idem pour l'Array avec les "Elements" ?

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 619
    Points : 188 594
    Points
    188 594
    Par défaut


    À mon avis (ces notions commencent à dater pour moi…), les deux grammaires n'appartiennent pas à la même classe (une LL et une LR, un truc du genre ?).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  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
    En effet, il me manquait ces notions.
    Je me demande comment j'ai pu écrire des parseurs sans ces notions...

    L'explication tirée de cet excellent blog http://blog.reverberate.org/2013/07/...mystified.html
    est donc la suivante :
    Citation Envoyé par Josh Haberman
    While this is more convenient and leads to simpler grammars, it makes parse trees conceptually a bit more complicated, because the number of children for a given grammar rule can vary. Also, LR parsers can’t support repetition operators (for example, Bison doesn’t support them)

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

Discussions similaires

  1. url pour JSON Out sur api.ign
    Par nicolas.h dans le forum IGN API Géoportail
    Réponses: 2
    Dernier message: 24/09/2012, 15h40
  2. [MySQL] Typer les données de mysql pour json
    Par frexville dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 24/08/2010, 17h27
  3. Classe personnalisée pour JSON
    Par Devil Shark dans le forum ActionScript 3
    Réponses: 5
    Dernier message: 14/01/2010, 11h08
  4. [Prototype] Utiliser Json pour envoyer des données au serveur
    Par GandalfZeGrey dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 14/02/2008, 17h16

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