Программирование интерпретатора для компилятора - PullRequest
0 голосов
/ 08 февраля 2011

Я пишу интерпретатор для программы компилятора на Java. Поэтому после проверки исходного кода, синтаксиса и семантики я хочу иметь возможность запускать исходный код, который является вводом для моего компилятора. Мне просто интересно, могу ли я просто перевести некоторые токены, например, out (он печатает материал на экране), я могу просто заменить его на System.out.print? затем снова подать исходный код, чтобы запустить его в Java?

Я слышал об использовании API Java Compiler, это хороший план?

Большое спасибо заранее!

Ответы [ 5 ]

3 голосов
/ 08 февраля 2011

То, что вы спрашиваете, - это метод реализации виртуальной машины. Чтобы запустить Java-код в целом, вы должны реализовать следующее:

  1. Первые несколько шагов, я думаю, вы уже сделали (спроектируйте / опишите семантику языка, создайте AST и выполните требуемую проверку кода)
  2. Вам необходимо сгенерировать свой байт-код, оригинальная Java работает точно так же, она генерирует другое представление исходного кода, от читабельного человеком до машиночитаемого. Здесь вы можете увидеть, как выглядит байт-код Java http://www.ibm.com/developerworks/ibm/library/it-haggar_bytecode/
  3. Вам необходимо реализовать виртуальную машину стека, которая читает байт-код и запускает его для выполнения.

Итак, как вы видите, у вас должно быть 3 отдельных компонента (проекта) для вашей задачи: 1. Языковая грамматика 2. Компилятор (генератор байт-кода) 3. Виртуальная машина (интерпретатор байт-кода)

P.S. У меня есть опыт создания крошечного подобного Java-компилятора с нуля (определение грамматики с помощью ANTlr, реализация компилятора, реализация виртуальной машины), поэтому, возможно, я смогу поделиться с вами дополнительной информацией (даже исходным кодом), если вам нужно что-то конкретное

2 голосов
/ 08 февраля 2011

Вам действительно нужно прочитать некоторые книги и / или пройти курсы по компиляторам - это не может быть решено ответом из двух абзацев о SO.

1 голос
/ 08 февраля 2011

К сожалению, вы не упомянули, какой язык сценариев вы планируете поддерживать.Если это один из известных языков, просто используйте готовый интерпретатор, написанный на чистом Java.См. Сценарии BSF и Java 5 (http://www.ibm.com/developerworks/java/library/j-javascripting1/)

Это ваш собственный язык

  1. Подумайте дважды: вам это действительно нужно?
  2. Если вы уверены, что вам нуженсобственный язык думать о JavaCC
1 голос
/ 08 февраля 2011

Вы можете создать кросс-компилятор, который читает ваш язык и выводит код Java, чтобы сделать то же самое. Это может быть самый простой вариант.

API компилятора Java можно использовать для компиляции кода Java. Вам нужно будет сначала перевести существующий код на Java, чтобы использовать его.

Это не то же самое, что написать переводчика. Это домашнее задание? В задаче говорится, что вы должны написать интерпретатор, или вы можете заставить код работать любым способом, который работает?

0 голосов
/ 08 февраля 2011

Прежде всего, большое спасибо за быстрые ответы.

Как часть нашего проекта компилятора, мы должны иметь возможность скомпилировать и запустить программу, написанную на нашем собственном указанном языке.Язык очень похож на C. Я запутался в том, как работает переводчик, есть ли более простой способ реализовать это?Без генерации байт-кодов?Моя идея состояла в том, чтобы перевести каждый оператор в эквивалентные операторы Java и позволить Java обрабатывать генерацию байт-кода.Еще раз большое спасибо за предложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...