2011-05-21 2 views
4

Salut
Je veux écrire un programme pour pouvoir analyser & exécuter certains fichiers
Le fichier se compose de quelques commandes personnalisées (je veux être en mesure de définir des commandes et des méthodes appropriées pour quand le programme voir cette commande devrait exécuter la méthode appropriée)
Sa grammaire n'est pas importante pour moi; Je veux juste pouvoir définir des commandes
Quelque chose comme un interpréteur simple et petit écrit en Java.
Y a-t-il une bibliothèque dans ce but?
Ou je dois écrire par moi-même?interprète personnalisée en java

Merci

Répondre

1

Vous pouvez utiliser ANTLR, mais vous devez définir une grammaire (l'analyseur sera généré pour vous).

Cochez cette case expression elevator example, cela ressemble à votre problème, mais au lieu de lire les fichiers, il est lu à partir de l'entrée standard.

Si vous choisissez ANTLR, regardez ANTLRWorks, c'est une interface graphique qui va vous aider dans le développement d'ANTLR (je pense que c'est aussi un plugin Eclipse).

+0

peut-être un peu plus Elaborer sur les bits manquants? –

+0

@ Thorbjørn Ravn Andersen: J'ai lié un exemple similaire à ce qu'il a demandé. – iruediger

2

Avez-vous envisagé de regarder BeanShell?

Permet d'avoir des extraits de type Java interprétés lors de l'exécution.

Si vous avez besoin d'un peu plus, pensez à l'incorporation par ex. JPython ou un autre petit interprète. Choisissez simplement celui qui est compatible JSR-233 pour obtenir un support de débogage générique.

1

Ce dont vous avez besoin est appelé "moteur de script". La recherche rapide révèle Rhino. C'est une bonne option parce que c'est JavaScript, et beaucoup de gens connaissent JavaScript et il existe une certaine quantité d'extensions tierces (bibliothèques et extraits de code) pour cela.

+0

Saviez-vous qu'un moteur de script fait partie de Java standard depuis Java 6? Regardez le paquet 'javax.script'. (Il s'agit en fait d'une version de Rhino intégrée dans la bibliothèque Java standard). – Jesper

+0

@Jesper Rhino n'est pas garanti avec la JVM. –

4

Java 6 (et plus récent) ont ceci dans la bibliothèque standard: jetez un oeil à la documentation API du paquet javax.script. Vous pouvez l'utiliser pour exécuter des scripts à partir de votre programme Java (par exemple pour automatiser votre programme) en utilisant n'importe quel langage de script pour lequel un moteur de plug-in est disponible pour l'API javax.script. Par défaut, le support pour JavaScript est fourni.

Voir le Java Scripting Programmer's Guide.

exemple simple de ce guide:

import javax.script.*; 
public class EvalScript { 
    public static void main(String[] args) throws Exception { 
     // create a script engine manager 
     ScriptEngineManager factory = new ScriptEngineManager(); 
     // create a JavaScript engine 
     ScriptEngine engine = factory.getEngineByName("JavaScript"); 
     // evaluate JavaScript code from String 
     engine.eval("print('Hello, World')"); 
    } 
} 
0

Je sais que ce vieux fil, mais il y a quelque temps que je l'ai mis en place un petit interpréteur pour un langage similaire avec JavaScript (avec plus de restrictions), le code est publié dans Github à https://github.com/guilhermelabigalini/interpreter

mais supporte SI/CAS/BOUCLES/functions, voir ci-dessous:

function factorial(n) { 
    if (n == 1) 
    return 1; 

    return n * factorial(n - 1); 
} 

var x = factorial(6);