Разрешение токенов в Beanshell

Я хочу использовать beanshell (bsh) для оценки пользовательских выражений. Я хочу, чтобы эти выражения имели своего рода подстановку макросов, например:

boolean isTrue = i.eval("@something == 5");

Есть ли способ, чтобы bsh перезвонил моей java для замены переменных, когда он анализирует приведенный выше пример перед оценкой?

РЕДАКТИРОВАНИЕ Мое намерение состоит в том, чтобы позволить пользователю указать выражение (например, @something == 5), где @something является ключом и требует замены фактического значения. Я хочу иметь возможность передать всю строку оценки, как указано пользователем, и хотел бы, чтобы beanshell вызывал обработчик типа «преобразователь» во время синтаксического анализа.

Заранее спасибо -- Франк


person Frank C.    schedule 07.03.2011    source источник
comment
Или что-нибудь (Rhino и т. д.), что бы это поддерживало   -  person Frank C.    schedule 08.03.2011


Ответы (2)



Очень старый вопрос, но вот мой ответ:

  1. Установите свой преобразователь как переменную в интерпретаторе

Interpreter i = new Interpreter(); i.set("resolver", myResolver);

  1. Токены процесса

Предварительно обработайте пользовательский ввод для шаблона @something в регулярное выражение или что-то еще, чтобы отобразить токен скрипта как:

resolver.resolve("@something") == 5
  1. Выполнить скрипт (я пропустил \" для ясности, так как это будет переменная)

i.eval("resolver.resolve("@something") == 5")

Метод разрешения может возвращать объект; Свободная типизация Beanshell и автобокс должны позаботиться о вещах. Я вижу проблему, например, в таких вещах, как String.equals(), поскольку для этого требуется нечто большее, чем просто замена токена.

person GaryMcM    schedule 28.04.2016