ANTLR - встраивание кода Java, оценка до или после? - PullRequest
2 голосов
/ 01 мая 2010

Я пишу простой язык сценариев поверх Java / JVM, где вы также можете встраивать код Java, используя скобки {}. Проблема в том, как мне разобрать это в грамматике? У меня есть два варианта:

  1. Разрешить все в нем, например: [a-z|a-Z|0-9|_|$], и продолжить
  2. Получите дополнительную Java-грамматику и используйте эту грамматику для анализа небольшого кода (это действительно возможно и эффективно?)

Поскольку вариант 2], по сути, является двойной проверкой, поскольку при оценке кода Java он также проверяется. Теперь мой последний вопрос - это способ динамически выполнять код Java также с объектами, которые были созданы во время выполнения?

Спасибо

Уильям ван Дорн

Ответы [ 2 ]

1 голос
/ 01 мая 2010

1] Разрешить все в нем, например: [a-z | a-Z | 0-9 | _ | $], и продолжить

Вы не можете просто сделать это: вам придется учитывать открывающие и закрывающие скобки.

2] Получить дополнительную грамматику Java и использовать эту грамматику для анализа этого небольшого кода (это действительно возможно и эффективно?)

Да, это возможно. Но я предлагаю вам сначала заставить что-то работать, а затем беспокоиться об эффективности (это действительно проблема здесь?).

... это способ динамически выполнять Java-код также с объектами, которые были созданы во время выполнения?

Да, начиная с Java 6, существует способ динамической компиляции исходных файлов. См. JavaCompiler API.

0 голосов
/ 18 марта 2011

Я предлагаю заключить ваш Java-код в символы типа '`', которые не используются в Java-коде и едва присутствуют в литералах.

JavaCode: '' ( EscapeSequence | ~('\\'|'')) * '`' ;

Используйте java.g, предоставленный примерами antlr, чтобы получить определение EscapeSequence, ...

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

...