Re[2]: Реализация языка программирования Mini C на Nitra
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.03.17 12:20
Оценка:
Здравствуйте, 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, ...). Так вот АСТ и Дерево Разбора (ДР) — это разные вещи. Дерево разбора для каждого языка уникально. АСТ по большей части одинаков.

Язык трансформации и ДР в АСТ у нас получился не очень интитивным, но пока без него нельзя. Вот когда будем делать новый Немерл, то тот факт, что у Немерла единый синтаксис позволит там сделать описание макросов, которые скроит трансформацию и для большого набора случаев позволит описывать ДР и трансформацию в АСТ одной конструкцией.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.