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

JavaScript Discussion :

algorithme: automate à états finis asynchrone


Sujet :

JavaScript

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2018
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2018
    Messages : 41
    Par défaut algorithme: automate à états finis asynchrone
    bonjour à tous !
    $
    j'aurais besoin de quelques conseils et corrections de code pour finaliser ma mini lib JS Vaucanson, un système d'automate à états finis bien sympathique pour intégrer dans mes applis Svelte.

    Par "bien sympathique" j'entends :

    1. définitions cohérente
    2. peu de méthodes
    3. interface fluide

    Je ne dialogue qu'avec des objets sacs de propriétés avec l'interface;

    Plutôt que de déclarer l'automate avec un immense littéral objet de définitions on passe par une série d'appels à "def" fluide avec "on" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    const fsm = make_fsm({ debug: true, accptor: () => {... ) })
     
    fsm.def({ state_name: 'A', init: true })
        .on({ read: 'b', jump: 'B', action: () => {...} })
     
    fsm.def({ state_name: 'B' })
        .on({ read: 'a', jump: 'A', action: () => {...} })
        .on({ read: 'c', jump: 'C', action: () => {...} })
     
    fsm.def({ state_name: 'C', term: true  })
    Les avantages de ce mode de définition séparé sont:

    * pas d'objet monolithique gigantesque avec de nombreux niveaux
    * possibilité de définir ses états possibles suivant des conditions
    * possibilité de configurer ses états depuis une boucle (fatch depuis base de données...)
    * lisibilité
    * possibilité de disperser la définition complète dans tous les composants dans lesquels une référence à une transduction existe, afin d'éviter d'avoir à les importer dans un seul fichier cebtralisé.

    En interne, il y a des tableaux doublés par des Maps pour s'y retrouver plus vite.

    QUESTIONS:

    * trouver les conditions nécessaires pour activer le callback de rejet si lecture non acceptable
    * la file d'attente des appels asynchrones est elle optimale ?
    * comment définir ses propres fonctions Promises ou async (paramètre "action"de la méthode "on") ?

    Si quelqu'un peut m’aider un peu il est bienvenu. Le "bundule" de test est en pièce jointe. IL n'y a qu'à le coller dans un fichier et le lancer avec Nodde ou depuis le navigateur.
    index.js
    Merci, A+ François.

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 668
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 668
    Par défaut
    je ne suis pas sur d'avoir bien compris ce que représente "lag" mais à partir de votre exemple d'exécution, je dirais que le rejet est quand "change" n'est pas défini et que "lag" vaut "false".

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/11/2020, 21h56
  2. Réponses: 7
    Dernier message: 04/01/2018, 13h40
  3. Réponses: 8
    Dernier message: 30/12/2017, 23h33
  4. Programmer un Automate à états finis avec des règles XML
    Par ilyesssll dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 12/02/2016, 12h20
  5. [Etat-Transition] Relation avec les automates d'état finis vu en théorie des langages ?
    Par isma44 dans le forum Autres Diagrammes
    Réponses: 3
    Dernier message: 15/03/2007, 00h15

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