Здравствуйте, Arsen.Shnurkov, Вы писали:
AS>В нитре три внутренних представления:
AS>1) синтаксис
AS>2) AST
AS>3) целевая модель
К сожалени, ока только два: синтаксис и AST. По уму надо для каждого уровня делать свои языки. Но пока на это нет ресурсов. Так что вместо целевой модели приходится использовать API вроде CCI и писать код на языке общего назначения чтобы сгенерировать тот же MSIL. И это намного сложнее нежели использовать трансформацию языков.
AS>и соответственно, минимум пять языков (3 языка описания и 2 языка трансформации)
Вот чего нет, того нет. Есть один язык описания синтаксиса, одни язык описания АСТ-а, один язык трасформации. Ну, с натяжкой еще есть язык зависимых свойств, который позволяет вести расчеты на АСТ. Никаких двух языков трансформации пока что нет. И трех описания тоже.
Собственно в концепции говорится о том, что все должно свестись к трансформации между языками. Мы берем исходный зык. Получаем для него типизированный АСТ и потом переписываем его в другой язык, более низкоуровневый. А по этому языку уже генерация должна стать тривиальным занятием. И языков таких может быть более одного, так как проще делать преобразования по уровням. Чем меньше разница абстракции между языками, тем проще трансформация.
AS>Если оставить только два представления:
AS>1) исходное;
AS>2) конечное;
AS>то понадобиться всего три формализма:
AS>1) для описания синтаксисов (EBNF)
Вот у нас и есть аналогичный язык описывающий синтаксис и Дерево Разбора (ДР) одним махом.
AS>2) для описания объектных моделей (тут какой-нибудь язык запросов для ОО-СУБД)
Это какие-то невнятные мечты. Есть АСТ и символы. Вот их нужно как-то описывать. Запросы тут никаким боком. Это скорее аналог ДМЛ или описания классов в ООЯ.
AS>3) язык преобразования (типа XSLT)
Вот это и есть наш язык трансформации из ДР в АСТ.
AS>(ну, ещё может пригодиться язык навигации по дереву EBNF типа XPath)
А зачем он нужен?
Мне кажется ты не до конца разобрался в том, что есть в Нитре.
ЗЫ
Есть такое мудрое изречение Сталина:
Есть логика намерений и логика обстоятельств, и логика обстоятельств сильнее логики намерений.
Так вот мечтать можно о чем угодно, но когда ты дойдешь до дела, то все твои мечты упрутся в суровые обстоятельства. Вот подобные фантазии тоже разбиваются о суровую действительность.
При создании инструмента типа Нитры есть множеств взаимно противоречащих задач. Одна из них, например, иметь единый код типизации для целых групп родственных языков (C#, Nemerle, VB, ...). Так вот АСТ и Дерево Разбора (ДР) — это разные вещи. Дерево разбора для каждого языка уникально. АСТ по большей части одинаков.
Язык трансформации и ДР в АСТ у нас получился не очень интитивным, но пока без него нельзя. Вот когда будем делать новый Немерл, то тот факт, что у Немерла единый синтаксис позволит там сделать описание макросов, которые скроит трансформацию и для большого набора случаев позволит описывать ДР и трансформацию в АСТ одной конструкцией.