[Nitra] HLSL parser
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.11.14 19:26
Оценка: 3 (1) +1
HLSL parser: https://github.com/tgjones/hlsl-parser

Блог от автора грамматики: Getting started with JetBrains Nitra
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 25.11.2014 17:19 VladD2 . Предыдущая версия .
Re: [Nitra] HLSL parser
От: btn1  
Дата: 23.11.14 13:08
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>HLSL parser


Посмотрел. Красиво, опрятненько! Понравилась естественность грамматики:

| Div                  = Expression sm "/" sm Expression precedence 130;


Помнится, во всех теориях по грамматикам обязательно говорят про всякие рекурсии, которые могут впадать в бесконечность. Тут это надёжно решено?

Не критично, но смущает многословие типа "precedence" и "right-associative" — нельзя ли как-то полаконичнее? Например:

| Div                  = Expression sm "/" sm Expression @pr=130 @RA; /* приоритет=130, правоассоциативный */


Ещё заметил — есть просто Expression, но нет деления на Logical/Arithmetic — это вообще неважно для языка?
Re: [Nitra] HLSL parser
От: btn1  
Дата: 23.11.14 13:12
Оценка:
Ещё вопросец:

var sourceSnapshot = new SourceSnapshot(sourceCode);
var parserHost = new ParserHost();
var compilationUnit = HlslGrammar.CompilationUnit(sourceSnapshot, parserHost);

Assert.That(compilationUnit.IsSuccess, Is.True);

var parseTree = compilationUnit.CreateParseTree();


А чего так сложно-то? Зачем нужен host? Нельзя ли делать SourceSnapshot внутри CompilationUnit()? И если выходом всегда будет AST, зачем его ещё отдельно получать через CreateParseTree()?
Re[2]: [Nitra] HLSL parser
От: WolfHound  
Дата: 23.11.14 15:22
Оценка:
Здравствуйте, btn1, Вы писали:

B>Помнится, во всех теориях по грамматикам обязательно говорят про всякие рекурсии, которые могут впадать в бесконечность. Тут это надёжно решено?

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

B>Не критично, но смущает многословие типа "precedence" и "right-associative" — нельзя ли как-то полаконичнее? Например:

Экономить на буквах последнее дело. Экономить нужно сущности.

Иначе можно дойти до такого:
The following defines a J function named "avg" to calculate the average of a list of numbers:
avg=: +/ % #
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: [Nitra] HLSL parser
От: WolfHound  
Дата: 23.11.14 15:22
Оценка:
Здравствуйте, btn1, Вы писали:

B>А чего так сложно-то?

За тем, что проще не получается.

B>Зачем нужен host?

За тем, что там кэшируется очень много чего.

B>Нельзя ли делать SourceSnapshot внутри CompilationUnit()?

Можно.

B>И если выходом всегда будет AST, зачем его ещё отдельно получать через CreateParseTree()?

Не всегда.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: [Nitra] HLSL parser
От: btn1  
Дата: 24.11.14 21:18
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Экономить на буквах последнее дело. Экономить нужно сущности.


Я ж предлагаю не цемент в бетоне экономить! Краткая запись — это не только экономия нажатий и объёма грамматики, но и УДОБСТВО ЧТЕНИЯ — взгляду легче охватить три символа, чем ковыряться в распознавании языка Шекспира.
Плюс, "плюшка" создаёт дополнительный сигнал: ага, это не просто "что-то следует за чем-то", а флаг для правила! (её даже напечатать можно — сразу будет видно)
Re[3]: [Nitra] HLSL parser
От: btn1  
Дата: 24.11.14 21:22
Оценка:
Здравствуйте, WolfHound, Вы писали:

B>>А чего так сложно-то?

WH>За тем, что проще не получается.

Верю. Потому и спрашиваю!

B>>Зачем нужен host?

WH>За тем, что там кэшируется очень много чего.

Что-то наводит меня на мысль, что за примером "распарсили — получили АСТ" может идти ещё более интересный пример "распарсили — поменяли исходник — снова распарсили (в 10 раз быстрее) — получили обновлённый АСТ"... Не?

B>>И если выходом всегда будет AST, зачем его ещё отдельно получать через CreateParseTree()?

WH>Не всегда.

А есть какие-то примеры? Я думал, парсер на то и нужен, чтобы получать АСТ — наиболее полезный выхлоп.
Re[4]: [Nitra] HLSL parser
От: WolfHound  
Дата: 24.11.14 22:00
Оценка:
Здравствуйте, btn1, Вы писали:

B>Я ж предлагаю не цемент в бетоне экономить! Краткая запись — это не только экономия нажатий и объёма грамматики, но и УДОБСТВО ЧТЕНИЯ — взгляду легче охватить три символа, чем ковыряться в распознавании языка Шекспира.

Если тебе нравится сжимать исходники jpeg'ом, ты всегда сможешь сделать для себя другой синтаксис.

B>Плюс, "плюшка" создаёт дополнительный сигнал: ага, это не просто "что-то следует за чем-то", а флаг для правила! (её даже напечатать можно — сразу будет видно)

Для этого существует подсветка синтаксиса.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[4]: [Nitra] HLSL parser
От: WolfHound  
Дата: 24.11.14 22:07
Оценка:
Здравствуйте, btn1, Вы писали:

B>Что-то наводит меня на мысль, что за примером "распарсили — получили АСТ" может идти ещё более интересный пример "распарсили — поменяли исходник — снова распарсили (в 10 раз быстрее) — получили обновлённый АСТ"... Не?

Это есть в планах, но ещё не делали.
ParserHost кэширует загруженные грамматики.

B>А есть какие-то примеры? Я думал, парсер на то и нужен, чтобы получать АСТ — наиболее полезный выхлоп.

Например, можно делать подсветку синтаксиса или преттипринт.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: [Nitra] HLSL parser
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.11.14 17:20
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Блог от автора грамматики: Getting started with JetBrains Nitra


Добавил ссылку на блогпост.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: [Nitra] HLSL parser
От: kekekeks  
Дата: 25.11.14 17:57
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, VladD2, Вы писали:


VD>>Блог от автора грамматики: Getting started with JetBrains Nitra


VD>Добавил ссылку на блогпост.


Он там в самом конце хочет макропрограммирование в C#. Надо бы его обнадёжить планами суперсета шарпа с макросами.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.