openjdk.ruOpenJDK на русском

JEP 236: Parser API for Nashorn

API парсера для Nashorn

Авторsundararajan.athijegannathan@oracle.com
ОтветственныйSundararajan Athijegannathan
ТипFeature
ОбластьJDK
СтатусClosed / Delivered
Выпуск9
Компонентcore-libs / jdk.nashorn
Обсуждениеnashorn dash dev at openjdk dot java dot net
ТрудоёмкостьM
ДлительностьM
РецензентыJim Laskey
ОдобренBrian Goetz, Jim Laskey
Создан2014/06/26 08:42
Обновлён2017/05/17 00:46
Задача8048176

Аннотация

Определить поддерживаемый API для абстрактного синтаксического дерева ECMAScript в Nashorn.

Цели

  • Предоставить интерфейсные классы, представляющие узлы синтаксического дерева Nashorn.

  • Предоставить фабрику для создания настроенного экземпляра парсера. Настройка выполняется передачей параметров командной строки Nashorn через API.

  • Предоставить API для обхода узлов AST по шаблону «Посетитель» (visitor).

  • Предоставить примеры и тестовые программы, использующие этот API.

Что не является целью

  • Узлы AST будут по возможности представлять понятия из спецификации ECMAScript, но не будут в точности им соответствовать. Везде, где возможно, для ECMAScript будут использованы интерфейсы API дерева javac.

  • Внешние стандарты или API парсеров и деревьев использоваться не будут.

  • API парсера на уровне скриптов не будет. Это Java API, хотя скрипты могут вызывать код на Java и, следовательно, использовать этот API.

Мотивация

IDE, например NetBeans, используют Nashorn для редактирования и отладки кода на ECMAScript, а также для его анализа. Сейчас эти инструменты и фреймворки используют для анализа кода внутреннее представление AST в Nashorn. Использование внутренних классов из пакета jdk.nashorn.internal.ir и его подпакетов мешает свободно развивать внутренние классы реализации Nashorn. Этот JEP определит API парсера Nashorn в открытом пакете jdk.nashorn.api.tree. Похожий API абстрактного синтаксического дерева уже поддерживается в javac, в com.sun.source пакете и его подпакетах.

API парсера позволит программам, таким как IDE и серверные фреймворки, анализировать код на ECMAScript, не завися от внутренних классов реализации Nashorn.

Описание

Во вложенном файле javadoc описаны предлагаемые интерфейсы и классы нового пакета jdk.nashorn.api.tree. Отправная точка API — классы ParserFactory и ParserFactoryImpl. Объект ParserFactory принимает массив строк с параметрами для настройки парсера. Поддерживаются те же параметры, что и в инструменте командной строки Nashorn jjs, а также в системном свойстве nashorn.args скриптового движка Nashorn.

После создания экземпляра парсера ему можно передать исходный код на ECMAScript из строки, URL или файла, и парсер вернёт объект CompilationUnitTree. Обо всех ошибках разбора сообщается через объект DiagnosticListener, переданный вызывающей стороной.

Тестирование

Для Nashorn уже есть более 1000 тестовых скриптов. Все исходники, которые можно разобрать, будут разобраны, чтобы проверить, что парсер не падает. Отобранные файлы с различными шаблонами кода будут разобраны, и их JSON-представление будет сравниваться с ожидаемыми результатами. Также будет добавлен набор файлов с ошибками разбора, чтобы проверить, что переданный пользователем DiagnosticListener получает сообщения об ошибках, а в полученном CompilationUnitTree есть нужные узлы ErrorTree.