Пользовательский переводчик в Java - PullRequest
4 голосов
/ 21 мая 2011

Привет
Я хочу написать программу, которая сможет анализировать и выполнять некоторые файлы
Файл состоит из некоторых пользовательских команд (я хочу иметь возможность определять команды и соответствующие методы, поэтому, когда программа видит эту команду, она должна выполнить соответствующий метод)
Это грамматика не важна для меня; Я просто хочу иметь возможность определять команды
Что-то вроде простого и маленького интерпретатора, написанного на Java.
Есть ли для этого какая-нибудь библиотека?
Или мне нужно написать самому?

Спасибо

Ответы [ 5 ]

4 голосов
/ 21 мая 2011

Java 6 (и новее) имеют это в стандартной библиотеке: посмотрите документацию API пакета javax.script. Вы можете использовать это для запуска сценариев из вашей Java-программы (например, для автоматизации вашей программы), используя любой язык сценариев, для которого есть механизм плагинов, доступный для javax.script API. По умолчанию предоставляется поддержка JavaScript.

См. Руководство по программированию сценариев Java .

Простой пример из этого руководства:

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')");
    }
}
2 голосов
/ 21 мая 2011

Рассматривали ли вы посмотреть на BeanShell?

Обеспечивает интерпретацию Java-подобных фрагментов во время выполнения.

Если вам нужно немного больше, подумайте о встраивании, например. JPython или другой маленький переводчик. Просто выберите тот, который совместим с JSR-233, чтобы получить общую поддержку отладки.

1 голос
/ 21 мая 2011

То, что вам нужно, называется «механизм сценариев». Быстрый поиск показывает Rhino . Это хороший вариант, потому что это JavaScript, и многие знают JavaScript, и для него существует определенное количество сторонних расширений (библиотек и фрагментов кода).

1 голос
/ 21 мая 2011

Вы можете использовать ANTLR , но вам нужно будет определить грамматику (для вас будет сгенерирован синтаксический анализатор).

Проверьте этот пример элеватора выражений ,это похоже на вашу проблему, но вместо чтения файлов, которые он читает со стандартного ввода.

Если вы выбираете ANTLR, взгляните на ANTLRWorks , это графический интерфейс, который поможет сРазработка ANTLR (я думаю, что она также доступна в виде плагина Eclipse).

0 голосов
/ 15 сентября 2016

Я знаю, что это старая ветка, но некоторое время назад я реализовал небольшой интерпретатор для языка, похожего на JavaScript (с большими ограничениями), код опубликован в Github на https://github.com/guilhermelabigalini/interpreter

Но он поддерживает IF / CASE / LOOPS / FUNCTIONS, см. Ниже:

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

   return n * factorial(n - 1);
}

var x = factorial(6);  
...