2011-10-12 3 views
2

Je suis en train de développer un assistant pour taper des commandes de base de données pour les DBA, car ces commandes ont beaucoup de paramètres, et un assistant les aidera beaucoup dans leur travail. Pour cet assistant, j'ai besoin de la grammaire des commandes, mais les fournisseurs de bases de données (Oracle, DB2) ne fournissent cette information dans aucun format, la seule chose est la documentation.Analyseur syntaxique Java Grammaire (ASCII to graph)

Un exemple d'une commande DB2 est: http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.admin.cmd.doc/doc/r0001933.html

Pour cette raison, je suis en train d'analyser le schéma de grammaire ou d'un diagramme de chemin de fer (http://en.wikipedia.org/wiki/Syntax_diagram), mais je n'ai rien trouvé en Java qui pourrait me aider. Je voudrais un outil de re-engineering (reverse) qui prend l'ASCII (représentation textuelle) de la grammaire, et crée un graphe en Java. Ensuite, avec le graphe en Java, l'assistant pourrait proposer des options de la commande tapée courante.

Par exemple de l'assistant http://www.youtube.com/watch?v=5sBoUHJupvs

Si vous avez des informations sur la façon d'analyser les schémas de grammaire avec Java (génère pas) Je vais apprécier cette information.

Répondre

0

Vous pouvez essayer d'utiliser ANTLR http://www.antlr.org/ Il ne sera pas en mesure de comprendre une représentation ASCII de la grammaire, mais il est assez puissant pour faire autre chose dont vous avez besoin, si cela ne vous dérange pas de passer le temps d'apprendre le logiciel .

3

L'outil le plus proche que j'ai vu est Grammar Recovery System par Ralf Lammel. Il dépend de l'accessibilité des diagrammes de chemin de fer comme les chaînes de texte. Ce n'est généralement pas comment ils sont trouvés. Vous semblez avoir de la chance dans l'affaire DB2, les points de travail de Ralf vont dans la bonne direction. Considérant que ces diagrammes sont habituellement rendus comme un ensemble de pixels (les PLSQL sont comme cela dans les fichiers PDF fournis pour la documentation), vous avez plusieurs types de problèmes: reconnaître des entités graphiques à partir de pixels, les assembler en représentations réelles de les diagrammes de chemin de fer, puis en utilisant comme votre assistant. Je pense que c'est une approche longue, difficile et peu pratique. Si vous l'avez fait fonctionner, vous découvrirez que les diagrammes sont légèrement faux dans de nombreux endroits (lisez l'article de Ralf ou découvrez à la dure), et donc inutilisable pour un outil qui est censé produire le "bon" truc pour aider votre DBA. Bien sûr, vous vous opposez à l'autre approche longue, difficile, "impraticable" de lire la documentation et de produire des grammaires qui correspondent, puis de valider ces grammaires par rapport au monde réel. Oui, c'est aussi un slogan difficile, mais en réalité cela produit des résultats utiles. Vous devez trouver des fournisseurs qui ont fait cela et le rendront disponible pour vous.

ANTLR.org offre une variété de grammaires. Avez-vous vérifié là?

Mon entreprise propose des grammaires et des outils pour les traiter. Nous l'avons fait pour PLSQL et SQL2011 mais pas encore DB2. Étant donné une grammaire, vous devez maintenant l'utiliser pour fournir des «conseils» à vos utilisateurs. Vos utilisateurs ne vont pas taper un "programme" complet; ils veulent générer des fragments (par exemple, des instructions SELECT). Maintenant vous avez besoin d'un analyseur qui traitera les fragments de grammaire et au moins dira "légal" ou "non". La plupart ne le feront pas. Notre DMS Software Reengineering Toolkitle fera.

Pour fournir conseiller, vous devez être capable de marcher la grammaire (autant que vous avez considéré pour les diagrammes de chemin de fer) pour calculer "ce qui est légal suivant". C'est en fait assez difficile (en fait, il est à peu près équivalent à ce que fait un générateur d'analyseur LR/GLR lors de la construction de tables). Notre moteur DMS le fait lors de la réparation d'erreur de syntaxe en parcourant ses tables d'analyse GLR (puisque ce travail est déjà encodé dans les tables!). Ce n'est pas facile à faire, car c'est une variante particulière de l'algorithme d'analyse GLR. Vous pourriez faire mieux avec un analyseur Earley, qui conserve toutes les analyses possibles comme un ensemble de choix; vous pourriez simplement inspecter chacun d'eux.

Mais cela demande beaucoup de travail et je pense que vous serez surpris par la quantité de machines dont vous avez besoin.

Le meilleur travail dans ce domaine est Harmonia, qui produit des éditeurs incrémentiels pour le code. L'analyseur de notre moteur DMS est basé sur les travaux antérieurs de ce projet, car nous sommes intéressés par l'aspect incrémentalité.