Java-интерпретатор для JavaScript - PullRequest
0 голосов
/ 26 июля 2011

Как проект в школе, я должен сделать интерпретатор JavaScript.(Все, включая весь бэкэнд, должен быть сделан мной).

Все должно быть написано на Java - я использую ANTLR для анализа и генерации AST.

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

У меня есть некоторый опыт написания компиляторов для статически типизированных языков, но я оченьв сомнениях, как поступить отсюда, поскольку JS является динамически типизированным языком.

Если бы вы могли дать мне несколько хороших советов о том, как действовать, я был бы признателен!

Лично я считаю, что сначала мне нужно сделать машину с байт-кодом, а затем настроить ИК на эту машину впоследствии.,К сожалению, я не могу найти какие-либо хорошие учебники о том, как написать байт-код машины.

PS.Я знаком со следующими книгами по этой теме:

"Современная реализация компилятора в Java (Appel)", "Процессоры языка программирования в Java (Watt & Brown)", "Шаблоны языковой реализации (Parr)"

С уважением, Сьюн

1 Ответ

0 голосов
/ 26 июля 2011

Если вы хотите только выполнить javascript, вам не нужно преобразовывать AST в IR, а затем в (какой-то?) Байт-код, что также заставит вас выполнить исполнитель байт-кода.

Почему бы просто не выполнить JavaScript AST в Java-движке?Вы можете сохранить все значения как Map<String, Object> и интерпретировать их при прохождении AST.Новая функция получает среду / контекст (новая Map<...>).

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

Для «динамического» поведения: если вам нужноdouble для сложения вы анализируете только значение Object.toString() для double стандартным способом (более динамичным, чем это трудно получить :)):

String value = contextMap.get(key); 
Double dvalue = Double.parseDouble(value.toString());
....
...