Как использовать W3C EBNF-Notation и создать генератор парсера? - PullRequest
3 голосов
/ 08 мая 2019

В спецификациях RDF спецификация EBNF-NOTATION XML используется для указания грамматики документа.Поэтому мне интересно, как использовать Antlr / bison / yacc (возможно, с каким-то флагом в этих инструментах, которые я не знаю, как искать) - или другими инструментами, о которых я пока не знаю, - чтобы использовать эти спецификации и генерировать парсерчтобы я мог проверить, правильно ли сформирован мой RDF, прежде чем пытаться загрузить.

Пример грамматики для моего конкретного варианта использования: https://www.w3.org/TR/n-quads/#sec-grammar

Я уже преобразовал эту грамматику вГрамматика Antlr4 и создала синтаксический анализатор с использованием этого инструмента и попыталась просто написать свой собственный анализатор рекурсивного спуска, но это заняло много времени, и я бы не стал повторять это упражнение, если мне придется делать это снова.

Не делайтена самом деле никакого кода нет, это всего лишь запрос информации.

В основном я хочу скопировать / вставить грамматики, указанные в этом XML-уведомлении EBNF, и создать генератор синтаксического анализатора, аналогичный тому, который предоставляет Antlr.

Ответы [ 2 ]

2 голосов
/ 15 мая 2019

REx Parser Generator работает с грамматиками в EBNF в стиле W3C, а Railroad Diagram Generator может извлекать грамматики непосредственно из документов W3C.

Вот как создатьрабочий синтаксический анализатор из примера грамматики (в Java - также поддерживаются некоторые другие целевые языки):

  • перейдите к Генератору железнодорожных диаграмм
  • на Get Grammar, введите пример URL https://www.w3.org/TR/n-quads
  • перейдите к Edit Grammar
  • и добавьте правило пробела в конец грамматики: WHITESPACE ::= [ #x9]+ /* ws: definition */
  • сохраните грамматикув локальный файл n-quads.ebnf
  • перейдите к REx Parser Generator
  • используйте входной файл n-quads.ebnf и командную строку -java -tree -main
  • сохраните полученный результатпарсер n_quads.java и скомпилируйте его
  • запустите парсер на примере файла: java n_quads -i a-sample-file

Полное раскрытие: Я создатель и сопровождающийREx Parser Generator.

1 голос
/ 08 мая 2019

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

Для этого вам понадобится инструмент, который можнонаучил читать ЕНБФ;на самом деле, вы, вероятно, можете научить большинство генераторов синтаксического анализатора, записывая синтаксис EBNF.

Этот инструмент должен также создать какое-то синтаксическое дерево, представляющее EBNF, которое вы можете переходить / преобразовывать к целиEBNF.Это классическая генерация кода ... наряду с обычной проблемой, когда вам нужно указать форму дерева, построить его, а затем написать все обходы дерева ad hoc, необходимые для генерации целевого BNF.

Youможно собрать все эти механизмы в пакет как систему преобразования программ (PTS).PTS обычно включает генерацию синтаксического анализатора, построение дерева и преобразование кода по шаблону.Затем вы можете сосредоточиться на написании грамматики EBNF и написании правил перевода от источника к источнику.

Для этого можно использовать наш инструментарий реинжиниринга программного обеспечения DMS .Мы сделали то же самое с DMS, а именно: прочитали описания XML DTD и синтезировали высокопроизводительные программы чтения XML на Java.

...