Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, VladD2, Вы писали:
VD>>Блог от автора грамматики: Getting started with JetBrains Nitra
VD>Добавил ссылку на блогпост.
Он там в самом конце хочет макропрограммирование в C#. Надо бы его обнадёжить планами суперсета шарпа с макросами.
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()?
Здравствуйте, 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) А. Эйнштейн
Здравствуйте, btn1, Вы писали:
B>А чего так сложно-то?
За тем, что проще не получается.
B>Зачем нужен host?
За тем, что там кэшируется очень много чего.
B>Нельзя ли делать SourceSnapshot внутри CompilationUnit()?
Можно.
B>И если выходом всегда будет AST, зачем его ещё отдельно получать через CreateParseTree()?
Не всегда.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Экономить на буквах последнее дело. Экономить нужно сущности.
Я ж предлагаю не цемент в бетоне экономить! Краткая запись — это не только экономия нажатий и объёма грамматики, но и УДОБСТВО ЧТЕНИЯ — взгляду легче охватить три символа, чем ковыряться в распознавании языка Шекспира.
Плюс, "плюшка" создаёт дополнительный сигнал: ага, это не просто "что-то следует за чем-то", а флаг для правила! (её даже напечатать можно — сразу будет видно)
Здравствуйте, WolfHound, Вы писали:
B>>А чего так сложно-то? WH>За тем, что проще не получается.
Верю. Потому и спрашиваю!
B>>Зачем нужен host? WH>За тем, что там кэшируется очень много чего.
Что-то наводит меня на мысль, что за примером "распарсили — получили АСТ" может идти ещё более интересный пример "распарсили — поменяли исходник — снова распарсили (в 10 раз быстрее) — получили обновлённый АСТ"... Не?
B>>И если выходом всегда будет AST, зачем его ещё отдельно получать через CreateParseTree()? WH>Не всегда.
А есть какие-то примеры? Я думал, парсер на то и нужен, чтобы получать АСТ — наиболее полезный выхлоп.
Здравствуйте, btn1, Вы писали:
B>Я ж предлагаю не цемент в бетоне экономить! Краткая запись — это не только экономия нажатий и объёма грамматики, но и УДОБСТВО ЧТЕНИЯ — взгляду легче охватить три символа, чем ковыряться в распознавании языка Шекспира.
Если тебе нравится сжимать исходники jpeg'ом, ты всегда сможешь сделать для себя другой синтаксис.
B>Плюс, "плюшка" создаёт дополнительный сигнал: ага, это не просто "что-то следует за чем-то", а флаг для правила! (её даже напечатать можно — сразу будет видно)
Для этого существует подсветка синтаксиса.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, btn1, Вы писали:
B>Что-то наводит меня на мысль, что за примером "распарсили — получили АСТ" может идти ещё более интересный пример "распарсили — поменяли исходник — снова распарсили (в 10 раз быстрее) — получили обновлённый АСТ"... Не?
Это есть в планах, но ещё не делали.
ParserHost кэширует загруженные грамматики.
B>А есть какие-то примеры? Я думал, парсер на то и нужен, чтобы получать АСТ — наиболее полезный выхлоп.
Например, можно делать подсветку синтаксиса или преттипринт.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн