Как сгенерировать генератор парсера с использованием Xtext? - PullRequest
0 голосов
/ 21 января 2019

Я планирую реализовать мета-язык поверх Xtext.Другими словами, я использую грамматику Xtext для определения своего собственного метаязыка.Этот метаязык затем может быть использован для определения языка (используя синтаксис, который я определил).Используя определенный язык, пользователь может создать модель.

Следовательно, я хотел бы использовать Xtext / Xtend в качестве генератора для генераторов синтаксического анализатора.Это позволило бы мне добавить столько метауровней, сколько мне нравится.Насколько я понимаю, сам Xtext определен с использованием Xtext, поэтому это должно быть возможно?

Проблема в том, что я не знаю, как к этому подойти, поскольку я не являюсь экспертом в средах генерации Xtext или генератора синтаксических анализаторовв общем.Любые решения / подходы / подсказки приветствуются.

Обновление (более подробная информация и мотивация)

Xtext может использоваться для генерации чего угодно, поэтому я мог бы написать генератор на основеXtext, который генерирует парсер.Это можно сделать, указав грамматику моего метаязыка, используя Xtext для генерации синтаксического анализатора для этой грамматики, поэтому у меня будет доступ к AST, который представляет модель, написанную на моем метаязыке.Однако с этого момента я остался бы один, чтобы делать с AST все, что я хочу, например генерировать синтаксический анализатор (поскольку AST представляет грамматику пользовательского языка).Но поскольку Xtext обладает особой способностью генерировать синтаксические анализаторы, я подумал о повторном использовании этой функции вместо реализации собственного генератора синтаксических анализаторов на основе AST грамматики.

Моя мотивация - желание определить свою собственную грамматику DSLязык (в качестве замены для Xtext), при этом все еще имея возможность использовать инфраструктуру, предоставляемую проектом Xtext.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Для другого подхода см .:

WWW.XTRAN-LLC.com / xtran.html # синтаксического анализ поколение

Короче говоря, я устал от создания синтаксических анализаторов для XTRAN, нашей экспертной системы, язык правил которой управляет компьютерными языками, данными и текстом, поэтому я создал механизм синтаксического анализа, который непосредственно выполняет EBNF во время анализа (в отличие от создания синтаксического анализа). код, например, Lexx / YACC и ANTLR). Поскольку XTRAN также должен отображать содержимое кода, представленное во внутреннем представлении / AST (после того, как им манипулируют), как текст исходного кода, я создал соответствующий механизм визуализации, который выполняет (гораздо более простую форму) EBNF во время визуализации.

0 голосов
/ 22 января 2019

Я пришел к следующему решению: грамматика, написанная с использованием моего грамматического языка, будет проанализирована Xtext.Затем полученный AST преобразуется в язык грамматики Xtext AST, который можно использовать в качестве входных данных для существующего генератора синтаксического анализатора.

В общем, с учетом некоторого грамматического языка l1 модель, написанная на этом языке, будет проанализирована, и результирующий AST будет преобразован в AST грамматического языка l2, который использовался для указания l1.Этот шаг повторяется до тех пор, пока мы не получим AST, представляющий модель языка грамматики Xtext, которая будет использоваться для создания нового синтаксического анализатора.

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

...