2017-09-29 2 views
1

Je travaille sur la conception de l'analyseur syntaxique HTML à des fins d'étude. Où je crée d'abord un design global.Ai-je besoin de modèle de visiteur dans mon design

Structure de données pour stocker l'élément HTML.

Base: HTMLBaseElement

Derived: HTMLElement, pElement, HtagElemement, ImgElement, BodyElement, StrongElement

Fondamentalement, je vais créer une classe dérivée pour chaque type d'élément en HTML.

Je dois réécrire ce fichier HTML dans un fichier et permettre à l'utilisateur d'ajouter l'élément dans le fichier HTML déjà analysé.

C'est ce que je pense:

Première approche:

  1. Créer une BaseVisitor qui ayant une fonction de visite pour chaque type d'élément.

  2. Créez une classe de visiteurs dérivés WriteHtmlVisitor pour écrire le fichier entier visit chaque élément dans la structure de données HTML.

Deuxième approche:

Je peux aussi utiliser une classe WriteHtmlFile, ayant un objet de HTMLElement puis écrire ce en utilisant getter de tous les éléments.

Quelle est la meilleure façon d'écrire le fichier HTML et d'ajouter de nouveaux éléments dans le fichier.

Je cherche juste une suggestion, car c'est dans la phase de conception.

Merci.

+0

Ceci est plus une question pour l'échange de pile de génie logiciel! Désolé de rebondir ce tour ... https://softwareengineering.stackexchange.com/ – Persixty

+0

@Persixty en se référant à d'autres sites, il est souvent utile de souligner que [cross-posting est désapprouvé] (https: //meta.stackexchange. com/tags/cross-posting/info) – gnat

+0

@gnat Un bon point mais dans ce cas, il a été référé par Computer Science plutôt que cross posté. Il semble que l'option dans un vote serré de renvoyer n'est pas là. – Persixty

Répondre

0

Oui, votre disposition du visiteur fonctionnerait et dans les plugins pour IntelliJ IDEA nous l'utilisons tout le temps. Pour donner un exemple concret: Dans IDEA, nous avons une sorte d'arbre de syntaxe abstraite du code dans l'éditeur. À l'aide d'un visiteur récursif, vous pouvez transformer chaque élément en représentation de chaîne et le travail est distribué à de nombreuses méthodes simples et faciles à comprendre. Chaque visitXXX transforme simplement une petite partie en chaîne et appelle la méthode visit de manière récursive.

L'avantage est que cela est facile à comprendre et à déboguer. Le seul inconvénient que j'ai jamais rencontré est que vous avez besoin d'une méthode de visite pour tous vos types d'éléments dans la classe de base. Cependant, une fois mis en place, cela fonctionne comme un charme.

Je peux vous donner du code Java à regarder et bien qu'il soit spécifique à IDEA, il devrait être assez clair pour le comprendre. Here is the base class pour le visiteur définissant des méthodes pour tous les éléments possibles. Et here is an example de ce que vous avez en tête: un visiteur qui transforme les éléments en une représentation sous forme de chaîne.

Espérons que cela aide et que le code Java ne vous dérange pas.