2010-04-24 4 views
1

Je cherche une bibliothèque ou un ensemble de bibliothèques qui m'aidera à écrire un interpréteur de commandes tolérant.Meilleur (s) bibliothèque (s) Java pour interprète de commandes indulgents

Un interprète de commande tolérant serait un interpréteur de commande qui peut gérer des erreurs d'orthographe et d'ordre des mots simples et même pas si simples dans l'entrée.

Mon but est d'avoir un interprète qui prendrait l'entrée (une commande) d'un utilisateur, puis:

  1. exécuter la commande, si elle est correcte.

  2. appliquer des corrections à la commande, jusqu'à ce qu'une commande correcte est générée puis présente cette commande à l'utilisateur pour confirmer si elle est «ce l'utilisateur signifiait.

Par exemple:

Le serveur GlassFish a une interface d'administration en ligne de commande, du nom asadmin. Il permet aux utilisateurs d'écrire des scripts avec le serveur et de travailler de manière interactive avec celui-ci.

Une commande asadmin a une structure assez rigide:

asadmin <asadmin options> <subcommand> <subcommand-options> <operand> 

La commande asadmin tente actuellement d'aider les utilisateurs qui Misspell une commande, comme ceci:

vkraemer$ ../../GlassFish3.0.1.b12/glassfish/bin/asadmin creat-domain --user foobar --portbase 2600 fubar 
Deprecated syntax, instead use: 
asadmin --user foobar creat-domain [options] ... 
Remote server does not listen for requests on [localhost:4848]. 
Is the server up? 
Unable to get remote commands. 
Closest matching local command(s): 
    create-domain 
Command creat-domain failed. 

Ceci est une très bonne prise. Ce n'est pas aussi intelligent quand il s'agit d'options mal orthographiées.

Je voudrais supprimer presque toutes les contraintes sur l'entrée, pour permettre aux utilisateurs de faire plusieurs erreurs dans une commande, mais arriver au point où ils ont une chance d'exécuter une commande.

Considérons cet exemple HCl:

vkraemer$ ../../GlassFish3.0.1.b12/glassfish/bin/asadmin create-domain foobar 
Enter admin user name [Enter to accept default "admin"/no password]> 
Domain foobar already exists in /Users/vkraemer/GlassFish3.0.1.b12/glassfish/domains. Use a different domain name or the --domaindir option. 
CLI130 Could not create domain, foobar 
Command create-domain failed. 
VBKMacBookPro:web-main vkraemer$ ../../GlassFish3.0.1.b12/glassfish/bin/asadmin create-domain foobar --domaindi /tmp/test 
Enter admin user name [Enter to accept default "admin"/no password]> 
Command create-domain only accepts one operand 
Usage: asadmin [asadmin-utility-options] create-domain 
    [--adminport <adminport(default:4848)>] 
    [--instanceport <instanceport(default:8080)>] [--portbase <portbase>] 
    [--profile <profile>] [--template <template>] [--domaindir <domaindir>] 
    [--savemasterpassword[=<savemasterpassword(default:false)>]] 
    [--domainproperties <domainproperties>] 
    [--keytooloptions <keytooloptions>] 
    [--savelogin[=<savelogin(default:false)>]] 
    [--checkports[=<checkports(default:true)>]] 
    [--nopassword[=<nopassword(default:false)>]] 
    [-?|--help[=<help(default:false)>]] domain_name 
Command create-domain failed. 

Il serait agréable d'être en mesure de permettre à la deuxième commande pour terminer avec succès, même si l'option --domaindir est mal orthographié et est dans le mauvais endroit, ' dans la commande.

Par exemple, la sortie de la deuxième commande create domaine peut être

VBKMacBookPro:web-main vkraemer$ ../../GlassFish3.0.1.b12/glassfish/bin/asadmin create-domain foobar --domaindi /tmp/test 
Enter admin user name [Enter to accept default "admin"/no password]> 
Did you mean "create-domain --domaindir /tmp/test foobar"? (yes) 
+1

Envisagez d'ajouter des cas d'utilisation explicites à votre question. –

Répondre

1

L'interpréteur de commande de JNode exécute une commande connaissant la syntaxe de chaque commande et la sémantique de l'argument de commande. Il ne traite pas des fautes d'orthographe/dactylographie, mais si vous utilisez l'achèvement, ils posent moins de problèmes.

Questions connexes