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.