Я записал синтаксический анализатор выражения в F# и занесенный в блог об этом здесь . Это использует алгоритм сортировочной станции, но вместо того, чтобы преобразовать от инфикса до RPN, я добавил второй стек для накопления результатов вычислений. Это правильно обрабатывает приоритет оператора, но не поддерживает унарные операторы. Я записал это, чтобы изучить F#, не изучить парсинг выражения, все же.
Вам нужен менеджер безопасности . Вы можете ограничить разрешения приложения, указав политику .
Для приложения AWT / Swing вам нужно использовать нестандартный класс AppContext
, который может измениться в любой момент. Итак, чтобы быть эффективными, вам нужно будет запустить другой процесс для запуска кода подключаемого модуля и иметь дело с коммуникацией между ними (немного как Chrome). Для процесса подключаемого модуля потребуется набор SecurityManager
и ClassLoader
, чтобы изолировать код подключаемого модуля и применить соответствующий ProtectionDomain
к подключаемым классам.
Определение и регистрация собственного диспетчера безопасности позволит вам ограничить действия кода - см. Документацию Oracle для SecurityManager .
Также обратите внимание на ] создание отдельного механизма для загрузки кода - то есть вы можете написать или создать другой загрузчик классов для загрузки кода из специального места. У вас может быть соглашение о загрузке кода - например, из специального каталога или из специально отформатированного zip-файла (как файлы WAR и файлы JAR). Если вы пишете загрузчик классов, это ставит вас в положение, когда вам нужно выполнить работу, чтобы загрузить код. Это означает, что если вы видите что-то (или некоторую зависимость), от которого хотите отказаться, вы можете просто не загрузить код. http://java.sun.com/javase/6/docs/api/java/lang/ClassLoader. html