А в восстановлении после ошибок прогресс есть?
Там с чем больше проблем — с концепцией(сам принцип как разные конструкции восстанавливать), или с реализацией? Я сначала думал в самом dsl(Nitra) будут какие-то хинты вставляемые вручную, подсказки — как восстанавливать. Для полностью автоматического восстановления одной грамматики достаточно, чтобы оно качественно работало?
Здравствуйте, Silver_S, Вы писали:
S_S>А в восстановлении после ошибок прогресс есть?
Да. С ним все почти в порядке. Единственная проблема — алгоритмы получились не быстрыми. Сейчас Wolfhound занимается их оптимизацией.
S_S>Там с чем больше проблем — с концепцией(сам принцип как разные конструкции восстанавливать), или с реализацией?
Проблема в алгоритмах. За время работы над восстановлением мы выбросили 3 подхода (назовем это так). В итоге мы нашли отличное решение проблемы, но весьма вычислительно сложное.
S_S>Я сначала думал в самом dsl(Nitra) будут какие-то хинты вставляемые вручную, подсказки — как восстанавливать. Для полностью автоматического восстановления одной грамматики достаточно, чтобы оно качественно работало?
Нам очень хотелось создать именно полностью автоматизированный вариант. В практических парсерах, (например, в используемом в Решарпере) разработчик грамматики фактически описывает дополнительные (более широкие) правила для ошибочных случаев. Для большой конторы и малого числа языков это приемлемо. Но для широкого применения это не лучшее решение.
Мы так же обдумываем добавление error-правил для обхода разных сложных случаев и для улучшения диагностических сообщений. Но этого пока нет. Сейчас задача довести до ума автоматическое решение.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>http://confluence.jetbrains.com/display/Nitra/Home
VD>Ссылки на бинарники пока не сделали, так как пока не ясно куда и как их выкладывать. В ближайшее время разберемся выложим инсталлятор.
С помощью этой версии Nitra можно разобрать язык основанный на отступах ?
Здравствуйте, _NN_, Вы писали:
_NN>С помощью этой версии Nitra можно разобрать язык основанный на отступах ?
Нет.
Этот вопрос даже не прорабатывался.
Ясно, что нужно добавить некоторые примитивы. Но какие не ясно.
Можешь предлагать варианты.
Желательно чтобы их можно было использовать для чего-то ещё.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, _NN_, Вы писали:
_NN>>С помощью этой версии Nitra можно разобрать язык основанный на отступах ?
VD>Специальных средств для этого нет.
Мои поздравления команде!!
Вы — большие молодцы, так держать!! Ну и да, не отвлекайтесь и чините баги ))))
Здравствуйте, VladD2, Вы писали:
VD>http://confluence.jetbrains.com/display/Nitra/Home
VD>Ссылки на бинарники пока не сделали, так как пока не ясно куда и как их выкладывать. В ближайшее время разберемся выложим инсталлятор.
public PositionToLineColumn(pos : int) : LineColumn;
public GetSourceLine(pos : int) : Location;
виртуальными, можно было бы написать производный класс, который бы препроцессил исходник, докидывая в текст некие indent и dedent, а потом делал корректное позиционирование к оригинальному тексту. Тогда, полагаю, можно было бы описывать грамматику как контекстно-свободную.
Здравствуйте, STDray, Вы писали:
STD>виртуальными, можно было бы написать производный класс, который бы препроцессил исходник, докидывая в текст некие indent и dedent, а потом делал корректное позиционирование к оригинальному тексту. Тогда, полагаю, можно было бы описывать грамматику как контекстно-свободную.
Там есть вот такой конструктор.
public this(originalText : string,
text : string,
fileIndex : int,
fileName : string,
lineIndexes : array[int],
textOffset : int);
Хотя конечно поддержку препроцессора нужно сделать по нормальному.
Но в данном случае это костыль. Хотелось бы придумать способ описания отступов в самой грамматике.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, <Аноним>, Вы писали:
А>Предикаты выражений.
хъ А>В случае положительного результата предиката разбор идет дальше, в случае отрицательного данная ветвь отбрасываеться.
Предикаты зло.
У нас уже есть синтаксические предикаты.
Они создают очень много проблем. Мы думаем выкинуть их вообще.
А твои предикаты вообще контекстно-зависимые. Совсем ужОс-ужОс.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[9]: [Nitra] описание
От:
Аноним
Дата:
22.04.14 13:03
Оценка:
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, <Аноним>, Вы писали:
А>>Предикаты выражений. WH>хъ А>>В случае положительного результата предиката разбор идет дальше, в случае отрицательного данная ветвь отбрасываеться. WH>Предикаты зло. WH>У нас уже есть синтаксические предикаты. WH>Они создают очень много проблем. Мы думаем выкинуть их вообще.
WH>А твои предикаты вообще контекстно-зависимые. Совсем ужОс-ужОс.
Наверно прав. А как насчет определенного числа повторений
например num*4 возвращает список из 4 num
num*4-8 возвращает список от 4 до 8 num
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, <Аноним>, Вы писали: WH>Предикаты зло. WH>У нас уже есть синтаксические предикаты. WH>Они создают очень много проблем. Мы думаем выкинуть их вообще.
Предикаты были последним средством чтобы разрулить неоднозначность в парсере без приоритета правил, как можно будет без них тогда разруливать ее?
Здравствуйте, <Аноним>, Вы писали:
А>Наверно прав. А как насчет определенного числа повторений А>например num*4 возвращает список из 4 num А>num*4-8 возвращает список от 4 до 8 num
Это не проблема. Оно даже реализовано.
Но синтаксиса для этого нет.
Нужно придумать синтаксис и оно сразу появится.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, CodingUnit, Вы писали:
CU>Предикаты были последним средством чтобы разрулить неоднозначность в парсере без приоритета правил, как можно будет без них тогда разруливать ее?
Как вариант создавать неоднозначный АСТ и разруливать типизатором. Перегрузка синтаксиса, в сущности, ничем не отличается от перегрузки функций.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[11]: [Nitra] описание
От:
Аноним
Дата:
22.04.14 14:02
Оценка:
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, <Аноним>, Вы писали:
А>>Наверно прав. А как насчет определенного числа повторений А>>например num*4 возвращает список из 4 num А>>num*4-8 возвращает список от 4 до 8 num WH>Это не проблема. Оно даже реализовано. WH>Но синтаксиса для этого нет. WH>Нужно придумать синтаксис и оно сразу появится.
Как вариант Num**(first-last, first2-, -last2, count)
Вроде бы 2 звездочки нигде не повторяються
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, CodingUnit, Вы писали:
CU>>Предикаты были последним средством чтобы разрулить неоднозначность в парсере без приоритета правил, как можно будет без них тогда разруливать ее? WH>Как вариант создавать неоднозначный АСТ и разруливать типизатором. Перегрузка синтаксиса, в сущности, ничем не отличается от перегрузки функций.
Типизатор должен будет обращаться к парсеру, чтобы узнать что сработали те или иные правила над неоднозначной последовательностью, помоему это все же задача парсера а не типизатора, лучше пока предикаты не убирать, пока не будет найдено универсальное решение без лишних сложностей.