Пакет Джей

Это сайт Джей, а LALR(1) парсер-генератор: Беркли yacc доступен © перенастроено C# и Java.

См.:
Описание

Класс Резюме
манекен поддельные класс, триггеры документации javadoc.

Пакет Джей Описание

Это сайт Джей, а LALR(1) парсер-генератор: Беркли yacc доступен © перенастроено C# и Java.

 

Использование

Джей читает спецификации грамматики из файла и создает LALR(1) парсер для него. Синтаксический анализатор состоит из набора таблиц разбора и драйвер процедуры от скелета, который считывается из стандартного ввода. Любой скелеты существуют для Java и C#. Столы и драйвера записываются в стандартный вывод.

jay [-ctv] [-b file-prefix] grammar skeleton|<skeleton
  java -jar jay.jar [-ctv] [-b file-prefix] grammar skeleton|<skeleton

Доступны следующие параметры:

-bfile-prefix изменяет префикс, присоединяемый к дополнительному выходу имена файлов в строку обозначается file_prefix. Префикс по умолчанию-персонажапо Y.
организует для препроцессора C #строки директивы должны быть включены в выходные данные. Это полезно только для C#.
организует отладочной информации должны быть включены в выходные данные. Актуальная информация контролируется скелет файлы; как распределяется это зависит от дополнительных пакетов во время выполнения. Для C# это часть исходного кода скачать, для Java, см.jay.yydebug.
-с V причины удобочитаемое описание сгенерированный синтаксический анализатор, который будет записан в файл file_prefix.выходной.

Если одна из переменных окружения TMPDIR, с расширением tmpили Temp (температура устанавливается, строку из переменной окружения будет использоваться в качестве имени каталога, в котором создаются временные файлы.

Формат Входных Данных

Формат ввода и LALR(1) алгоритм не меняется от yacc доступен. Следует проконсультироваться с обширной литературой на yacc доступен подробную информацию по написанию и отладки грамматик, ошибка, восстановления, стратегии действий и др.

Единственные разницы величины стека, встраивание сгенерированный парсер в класс, А интерфейс к сканеру. Все это может быть изменено путем изменения скелета файлы. Оставшаяся часть этого раздела основана на каркасе файлов распределенных с Джей.

В %союз директива была удалена. Джей использует объект (или система.Объект в C#) для значения стека. Следовательно, имя в нотации тега <имя> означает класс или интерфейс.

Это имеет значение для слепков, что Джей создает: ни в C# ни на Java разрешение задания литых переменных. Поэтому, в нотации $$ ссылается на объект без бросания потому что $$ обычно присваивается. Если $$ используется для других целей, оно обычно будет содержать явных типа $<имя>$ который превратился в приведение к имени.

Аналогично, в нотации $н редко назначается. Поэтому Джей создаст литого если нотация $<>н используется для предотвращения литья.

Джей не выделяет бросает на объект. Эти слепки, как правило ненужная и такая стратегия позволяет избежать многочисленных предупреждений, но это могло бы вызвать удивление в ситуации перегрузки.

Джей не имеет понятия наследования. Это может привести к необоснованным предупреждающие сообщения жаловаться на сомнительные задания. Чувствовалось, что эти сообщения вообще полезно, даже если некоторые из них являются ошибочными.

Дженерики

Столы и скелет файлов Джей не используйте параметризованные типы. Джей.yydebug кодируется без параметризованных типов; однако источники содержат код с дженерики в линии которая на данный момент закомментированы.

Записи <тег> может содержать вложенные угловые скобки и внутри них символы [ ] пустой ? , помимо обычных буквенно-цифровых символов и . $ _. Тем не менее, ссылки на значение стека $н отлиты используя соответствующий тег и приведение к параметризованного типа будет нарисовать непроверенное предупреждение в Java.

Синтаксический анализатор может оказаться класс с аннотацией @SuppressWarnings("непроверенные"); однако, хотя это может быть образом жизни для Java 5 это наверное неразумно.

Скелет Файлы

Двоичный или исходный загружаемый компонент содержит два скелета файлы для Java, и для C#. Скелет файл содержит настройки формата генерируемых таблиц и включает в себя фактические парсер алгоритм, который интерпретирует таблицы. Алгоритмы одинаковы во всех распределенных файлов, но скелет.столы инициализирует различные таблицы, читая файл ресурсов во время выполнения; это позволяет избежать ограничения в системе java накладывает на размер сегмента кода для класса.

Чтобы создать файл ресурсов, для генерации синтаксического анализатора с использованием каркаса.столы. От парсера исходного экстракта именно строки, начинающиеся с//гг и удалить именно этот префикс. Результирующий файл должен находиться в том же каталоге, что файл класса парсера и следует использовать имя класса парсера и суффикс .столы.

Это не должно быть необходимо изменить скелет файлы, но на всякий случай они подробно прокомментированы. Файлы являются строками. Символ в первой колонке, определяет то, что происходит в строке: # обозначает комментарий и строка игнорируется. . знаки строки копируются без начального периода.

т знаменует собой линию, которая является актуальной для трассировки. Обычно он копируется с ведущим //т; если опция находится строка копируется без ведущих т.

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

actions выделяют код от действий как тело переключателя.
epilog выделяет текст после второго %%.
local выделяет Текст В %{ %} после первого %%.
prolog выделяет Текст В %{ %} до первого %%.
tokens prefix излучать каждая лексема значение как инициализированный идентификатор с оставшейся части строки как префикс.
version comment излучать // комментарий с остатком строки.
yyCheckprefix
yyDefRedprefix
yyDgotoprefix
yyGindexprefix
yyLenprefix
yyLhsprefix
yyRindexprefix
yySindexprefix
yyTableprefix
выделяют организм из соответствующей таблицы, остаток строки как префикс для каждой выходной линии.
yyFinalprefix выделяют значение в качестве инициализатора с оставшейся части строки как префикс.
yyNamesprefix излучают в таблице в виде списка слов с оставшейся части строки как префикс для каждой выходной линии.
yyNames-strings излучают в таблице в виде списка строковые инициализаторы.
yyRuleprefix излучают в таблице в виде списка строк, а остальные строки как префикс для каждой выходной линии.
yyRule-strings излучают в таблице в виде списка строковые инициализаторы.

Каждая Таблица предваряется комментарием с измерением информации.

Класс Управления

Конструкция каркаса файл должен рассмотреть две проблемы: как встроить парсер в класс и как интерфейс к сканеру.

Распределенный скелет файлы предполагается, что пользователь будет поставлять пролог в %{ %} , содержащий заголовка класса и поставлять эпилога после второго %%который закрывает этот класс. Джей не знает имя класса анализатора.

Интерфейс к сканеру yyInput формируется как член каждый анализатор класса; это может или может не быть хорошим выбором. Существует три метода: заранее не имеет аргументов и должна возвращать логическое значение, указывающее, что сканер успешно извлечен очередной входной символ; маркер имеет никаких аргументов и должна возвращать текущий входной символ в виде целочисленного значения, которое синтаксический анализатор ожидает; значения не имеет аргументов и возвращает объект значения, которое будет помещено на государственном/значение стека для ввода символа. Трассировка ожидает маркера и значение постоянной функции между каждым вызовом заранее.

Явный знак значения создаются в виде констант в классе парсера. Одиночные символы представляют сами себя; впрочем, для тех, Джей верит в ASCII, а затем в набор символов Unicode. Может было бы лучше, чтобы определить константы в интерфейс сканера, но ожидается, что сканер реализован в виде внутреннего класса парсера. пиджейподдерживает эту точку зрения даже если сканер явно построена с использованием JLex.

Популярность

Версия:
1.1.1, июнь 2006.
Автор:
Аксель Т. Шрейнер.
Ссылка на оригинал статьи: https://www.cs.rit.edu/~ats/projects/lp/doc/jay/package-summary.html

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *