[Nitra] Первые впечатления и вопросы
От: Дьяченко Александр Россия  
Дата: 11.10.14 15:09
Оценка: 10 (2)

Предыстория

Был у меня персональный проект с разбором исходников на Модула-2 с использованием макроса peg-grammar, застрявший на этапе попытки сделать типизатор и в конце концов замороженный по причине нехватки времени.
Долго собирался попробовать переписать этот проект на Nitra, и вот наконец наконец собрался.

Установка

Скачал NemerleSetup-net-4.0-v1.2.391.0.msi и Nitra.Setup.msi (Nitra v0.1.1245.0 for .NET v4.0 installation package), поставил на VS2013 (Microsoft Visual Studio Professional 2013 Version 12.0.30723.00 Update 3).
Проблем при инсталляции никаких не было что уже хорошо, правда чтобы заработала подсветка пришлось перезагружаться (как я понял причина была в том что нужна была переменная окружения NitraPath, которую инсталятор хотя и создал, но была почему-то не видна до перезагрузки, может хватило бы и перелогиниться).

Первые шаги

Для начала попробовал создать грамматику для языка Модула-2, как результат за час я написал пол-страницы с 5 или 6 попытки .
В процессе VS2013 падала с концами 3 раза и еще несколько раз зависла.
Была предпринята попытка подцепиться отладчиком и попытаться найти причину.
В результате этой попытки было выяснено что похоже здесь виновата как интеграция с VS, так и компилятор Нитры.

Вопросы

Ну и наконец вопросы:
  1. [Nitra] Хотелось бы увидеть свежий Roadmap, нашел какой-то здесь, но он старый от мая 2013 (я уже спрашивал, но ответа не получил)
  2. [VS] Зачем обновлять кеш в UI потоке?
    Nitra / VisualStudioExtensions / Nitra.VisualStudio / Coloring / NitraClassifier.n:48
    parseAgent.ParseComplete +=
      fun(_, args)
      {
        def updateCache()
        {
          match (_classificationCache.Update(args.Result))
          {
            | Nothing => ()
            | All     => OnClassificationChanged(SnapshotSpan(args.Snapshot, 0, args.Snapshot.Length));
            | Ranges(rangesToUpdate) =>
              foreach(range in rangesToUpdate)
                OnClassificationChanged(SnapshotSpan(args.Snapshot, range.StartPos, range.Length));
          }
        }
        if (Thread.CurrentThread == NitraPackage.Instance.DataHostService.UIThread : object)
          updateCache();
        else
          _ = NitraPackage.Instance.DataHostService.BeginInvokeOnUIThread(Action(updateCache));
      };

    Вызывать OnClassificationChanged может и надо в UI потоке но обновлять кеш то зачем (смотри выделенное)?
  3. [VS] Почему в диалоге About версия 1.0?
    Nemerle   1.0
    Nemerle Visual Studio Integration
    Version 1.0
    
    Nitra Language Framework for Microsoft VisualStudio   1.0
    Nitra Language Framework helps developing domain specific languages (DSL)

  4. [Nitra] Сложилось впечатление что в парсере при восстановлении после ошибок есть ошибки
    Например вот такой код грамматики:
    syntax module Modula
    {
        syntax program_module = "MODULE" module_identifier [interrupt_protection] semicolon import_lists module_block module_identifier ".";
    }

    Порождает вот такое AST:
    syntax module Modula
    {
      syntax program_module = <# ambiguous RuleExpression, 64 options
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
        "MODULE" module_identifier ◄[►interrupt_protection ◄]► semicolon import_lists module_block module_identifier "."
      #>
      ;
    }

    А AST вот для такой грамматики:
    syntax module Modula
    {
        syn implementation_module =
          "IMPLEMENTATION", "MODULE", module_identifier,
          [interrupt_protection], semicolon,
            import_lists,
            module_block, module_identifier, period ;
    }

    Я не рискну сюда постить, потому что файл занимает почти 11 мегабайт.

Выводы

Пока рано...

PS. За Nitra.Visualizer спасибо прикольный инструмент, AST получены как раз им. По крайней мере в отличие от VS он не падает при попытке вставить весь файлик (13 Кб) с грамматикой, а пытается его разобрать и сожрав 1,5 Гб за 30 секунд бросает это занятие и говорит Unexpected token.

PS2. При попытке скопировать ошибку (с помощью контекстного меню) падает уже Nitra.Visualizer.

System.NullReferenceException was unhandled
Message: An unhandled exception of type 'System.NullReferenceException' occurred in Nitra.Visualizer.exe
Additional information: Ссылка на объект не указывает на экземпляр объекта.

в Nitra.Visualizer.MainWindow._errorsTreeView_CopyNodeText(Object sender, RoutedEventArgs e)
в System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
в System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
в System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
...

nitra
Re[7]: [Nitra] Первые впечатления и вопросы
От: WolfHound  
Дата: 15.10.14 22:19
Оценка: 6 (1)
Здравствуйте, Дьяченко Александр, Вы писали:

ДА>Баг на "не разбор" грамматики завел:

ДА>NTR-44 Not parsing simple grammar
Пофиксил. Ждём билд сервер.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: [Nitra] Первые впечатления и вопросы
От: WolfHound  
Дата: 12.10.14 16:28
Оценка:
Здравствуйте, Дьяченко Александр, Вы писали:

ДА>[Nitra] Сложилось впечатление что в парсере при восстановлении после ошибок есть ошибки

Это не впечатление. Они там есть.
Ты нарвался на единственный, известный на данный момент, комбинаторный взрыв.
Почему он происходит понятно. Что делать пока не очень. Но мысли есть.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: [Nitra] Первые впечатления и вопросы
От: Дьяченко Александр Россия  
Дата: 12.10.14 23:14
Оценка:
Здравствуйте, WolfHound, Вы писали:

ДА>>[Nitra] Сложилось впечатление что в парсере при восстановлении после ошибок есть ошибки

WH>Это не впечатление. Они там есть.
WH>Ты нарвался на единственный, известный на данный момент, комбинаторный взрыв.
WH>Почему он происходит понятно. Что делать пока не очень. Но мысли есть.

Ясно. Повязло.

А по 4 вопросу почему получается 64 одинаковых варианта?
... << RSDN@Home 1.2.0 alpha 5 rev. 76>>
Re[3]: [Nitra] Первые впечатления и вопросы
От: WolfHound  
Дата: 13.10.14 00:02
Оценка:
Здравствуйте, Дьяченко Александр, Вы писали:

ДА>Ясно. Повязло.

На самом деле не очень.
Он проявляется только на весьма специфических грамматиках.
И грамматика найтры одна из них.
В данном случае козлит вот это правило.
    | Sequence                        = LeftRule=RuleExpression ^ 10 RightRules=(sm RuleExpression ^ 10)+

Это н-арный оператор пробел.

Кстати где ты этот синтаксис взял?
[interrupt_protection]

Найтра такое не умеет.
Думатель обе скобки удалил.

Найтра использует регексные операторы.
? для опционального правила.
И вот такие варианты для циклов:
  syntax RepeatQuantifier
  {
    Bounds() : RepeatBounds;

    | ZeroOrMany = "*"                                { override Bounds = (0,               None());                }
    | OneOrMany  = "+"                                { override Bounds = (1,               None());                }
    | UpperBound = "{" sm        "," sm Number sm "}" { override Bounds = (0,               Some(Number.Value()));  }
    | LowerBound = "{" sm Number ","           sm "}" { override Bounds = (Number.Value(),  None());                }
    | FullBounds = "{" sm Number "," sm Number sm "}" { override Bounds = (Number1.Value(), Some(Number2.Value())); }
    | Exact      = "{" sm Number               sm "}" { override Bounds { def x = Number.Value(); (x, Some(x)); }   }
  }


ДА>А по 4 вопросу почему получается 64 одинаковых варианта?

Я же говорю комбинаторный взрыв. Думатель придумал 64 способа разобрать эту строку.
Посмотри АСТ в визуализаторе.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: [Nitra] Первые впечатления и вопросы
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.10.14 00:16
Оценка:
Здравствуйте, Дьяченко Александр, Вы писали:

ДА>Проблем при инсталляции никаких не было что уже хорошо, правда чтобы заработала подсветка пришлось перезагружаться (как я понял причина была в том что нужна была переменная окружения NitraPath, которую инсталятор хотя и создал, но была почему-то не видна до перезагрузки, может хватило бы и перелогиниться).


Видимо ты не закрыл Студию или приложение из которого ее запускал. Процессы виндовс наследуют окружение. При открытой студии вообще не следует производить инсталляцию, так как она может заблокировать файлы которые нужно обновлять.

ДА>* [Nitra] Хотелось бы увидеть свежий Roadmap, нашел какой-то здесь, но он старый от мая 2013 (я уже спрашивал, но ответа не получил)


Постараюсь обновить в ближайшее время. В двух словах: в ближайших планах работа над символами и связванием. Работы уже идут. Уже реализованы декларации, которые уже задействованы в проекте нового форматера для РСДН. Это внутренняя фича, но ее уже можно использовать как средство создания AST с требуемой структурой.

ДА>* [VS] Зачем обновлять кеш в UI потоке?


Это UI-кэш который обновляется синхронно. Вкратце: у нас нет лексера по этому пока мы не получим результат парсинга, то не может даже подсвечивать ключевые слова. Чтобы текст не чернел на время парсинга в UI-потоке содержится кэш прошлой отрисовки. Он обновляется так чтобы внесенное изменение сдвигало элементы подсветки соответствующим образом. За одно, это позволяет определить какую часть текста нужно перерисовать.

ДА>Вызывать OnClassificationChanged может и надо в UI потоке но обновлять кеш то зачем (смотри выделенное)?


Затем, что он синхронный. Изменения там плевые. Они спокойно делаются на каждый чих.

ДА>* [VS] Почему в диалоге About версия 1.0?


Версия пакета указана явно. В принципе она может быть любой, так как она ни на что не влияет. Если это напрягает, можно подумать как сделать ее обновляемой в процессе сборки.

ДА>* [Nitra] Сложилось впечатление что в парсере при восстановлении после ошибок есть ошибки


У меня тоже. Вольфхаунд сейчас работает над этим вопросом. К сожалению, в безлексерном парсере допускающем неоднозначности это очень не простая задача.

Мы добились весьма неплохих результатов, но иногда вылезает экспонента в обходчиках и парсере.

Если появилась такая ситуация, нужно прислать нам код парсера и/или набор действий приводящих к ошибке. Лучше создать issue в багтрекер, или прислать по скайпу (vc.rsdn.ru). Но лучше, конечно, issue создать, а по скайпу дать на него ссылку.

ДА>Я не рискну сюда постить, потому что файл занимает почти 11 мегабайт.


Обходчик втыкаем на комбинаторном взрыве. Постараемся пофиксить в ближайшее время.

ДА>

Выводы

ДА>Пока рано...

Дык, если не пробовать, то мы так никогда о некоторых проблемах не узнаем. Проще пробовать и сразу же обращаться на нам, если что-то не работает как надо.

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

ДА>PS. За Nitra.Visualizer спасибо прикольный инструмент, AST получены как раз им. По крайней мере в отличие от VS он не падает при попытке вставить весь файлик (13 Кб) с грамматикой, а пытается его разобрать и сожрав 1,5 Гб за 30 секунд бросает это занятие и говорит Unexpected token.


Там тоже обходчик втыкает. Мы с ними постараемся разобраться. Студия вылетает, так как результат полученный от обходчика передается дифу, который не линейный, к сожалению.

ДА>PS2. При попытке скопировать ошибку (с помощью контекстного меню) падает уже Nitra.Visualizer.

ДА>System.NullReferenceException was unhandled

Было бы признателен, если бы ты завел на каждый баг issue на youtrack.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 13.10.2014 2:15 VladD2 . Предыдущая версия .
Re[4]: [Nitra] Первые впечатления и вопросы
От: Дьяченко Александр Россия  
Дата: 13.10.14 01:25
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Кстати где ты этот синтаксис взял?

WH>
WH>[interrupt_protection]
WH>

WH>Найтра такое не умеет.
WH>Думатель обе скобки удалил.

Переделываю грамматику в Найтру из другого описания, это рудимент.

WH>Найтра использует регексные операторы.

WH>? для опционального правила.

Спасибо, знаю.

ДА>>А по 4 вопросу почему получается 64 одинаковых варианта?

WH>Я же говорю комбинаторный взрыв. Думатель придумал 64 способа разобрать эту строку.
WH>Посмотри АСТ в визуализаторе.

Там и смотрю на закладке с текстом — 64 одинаковых варианта.
Re[2]: [Nitra] Первые впечатления и вопросы
От: Дьяченко Александр Россия  
Дата: 13.10.14 02:36
Оценка:
Здравствуйте, VladD2, Вы писали:

ДА>>Проблем при инсталляции никаких не было что уже хорошо, правда чтобы заработала подсветка пришлось перезагружаться (как я понял причина была в том что нужна была переменная окружения NitraPath, которую инсталятор хотя и создал, но была почему-то не видна до перезагрузки, может хватило бы и перелогиниться).

VD>Видимо ты не закрыл Студию или приложение из которого ее запускал.

Студия конечно была закрыта.

VD>Процессы виндовс наследуют окружение. При открытой студии вообще не следует производить инсталляцию, так как она может заблокировать файлы которые нужно обновлять.


Скорей всего это был explorer.exe, т.к. из командной строки переменную тоже видно не было.

ДА>>* [Nitra] Хотелось бы увидеть свежий Roadmap, нашел какой-то здесь, но он старый от мая 2013 (я уже спрашивал, но ответа не получил)

VD>Постараюсь обновить в ближайшее время.

Спасибо ждем.

VD>В двух словах: в ближайших планах работа над символами и связванием. Работы уже идут. Уже реализованы декларации, которые уже задействованы в проекте нового форматера для РСДН. Это внутренняя фича, но ее уже можно использовать как средство создания AST с требуемой структурой.


Видел, ссылка на новый форматер где-то по форуму проскакивала, но ничего не понял статейку бы какую-нибудь...

ДА>>* [VS] Зачем обновлять кеш в UI потоке?

VD>Это UI-кэш который обновляется синхронно. Вкратце: у нас нет лексера по этому в пока мы не получим результат парсинга, то не может даже подсвечивать ключевые слова. Чтобы текст не чернел на время парсинга в UI-потоке содержится кэш прошлой отрисовки. Он обновляется так чтобы внесенное изменение сдвигало элементы подсветки соответствующим образом. За одно это позволяет определить какую часть текста нужно перерисовать.
ДА>>Вызывать OnClassificationChanged может и надо в UI потоке но обновлять кеш то зачем (смотри выделенное)?
VD>Затем, что он синхронный. Изменения там плевые. Они спокойно делаются на каждый чих.

Вроде ClassificationCache.Update не зависит от UI потока?
Может отделить все таки, коли диф не линейный?
Как нибудь так?

parseAgent.ParseComplete +=
  fun(_, args)
  {
    def updateCache(result)
    {
      | Nothing => ()
      | All     => OnClassificationChanged(SnapshotSpan(args.Snapshot, 0, args.Snapshot.Length));
      | Ranges(rangesToUpdate) =>
        foreach(range in rangesToUpdate)
          OnClassificationChanged(SnapshotSpan(args.Snapshot, range.StartPos, range.Length));
    }

    def updateResult = _classificationCache.Update(args.Result);
    if (Thread.CurrentThread == NitraPackage.Instance.DataHostService.UIThread : object)
      updateCache(updateResult);
    else
      _ = NitraPackage.Instance.DataHostService.BeginInvokeOnUIThread(Action(updateCache(updateResult)));
  };


ДА>>* [VS] Почему в диалоге About версия 1.0?

VD>Версия пакета указана явно. В принципе она может быть любой, так как она ни на что не влияет. Если это напрягает, можно подумать как сделать ее обновляемой в процессе сборки.

Просто вызывает некоторое недоумение. Лучше бы конечно что бы версия совпадала с реальной.

ДА>>* [Nitra] Сложилось впечатление что в парсере при восстановлении после ошибок есть ошибки

VD>У меня тоже. Вольфхаунд сейчас работает над этим вопросом. К сожалению, в безлексерном парсере допускающем неоднозначности это очень не простая задача.
VD>Мы добились весьма неплохих результатов, но иногда вылезает экспонента в обходчиках и парсере.
VD>Если появилась такая ситуация, нужно прислать нам код парсера и/или набор действий приводящих к ошибке. Лучше создать issue в багтрекер, или прислать по скайпу (vc.rsdn.ru). Но лучше, конечно, issue создать, а по скайпу дать на него ссылку.

В первом сообщении код приведен полностью. Я его прям в таком виде в визализаторе писал.

ДА>>Я не рискну сюда постить, потому что файл занимает почти 11 мегабайт.

VD>Обходчик втыкаем на комбинаторном взрыве. Постараемся пофиксить в ближайшее время.

Будем ждать.

ДА>>

Выводы

ДА>>Пока рано...
VD>Дык, если не пробовать, то мы так никогда о некоторых проблемах не узнаем. Проще пробовать и сразу же обращаться на нам, если что-то не работает как надо.
VD>Я вот уже несколько проектов создал и на эти проблемы не нарвался. Видимо пишу с меньшим количеством грамматических ошибок, так что на экспоненту не нарывался.

Просто у меня грамматика уже есть в каком-то виде и я пытался вставить файлик, а потом править по ходу.
Оттуда и ошибки.

ДА>>PS. За Nitra.Visualizer спасибо прикольный инструмент, AST получены как раз им. По крайней мере в отличие от VS он не падает при попытке вставить весь файлик (13 Кб) с грамматикой, а пытается его разобрать и сожрав 1,5 Гб за 30 секунд бросает это занятие и говорит Unexpected token.

VD>Там тоже обходчик втыкает. Мы с ними постараемся разобраться. Студия вылетает, так как результат полученный от обходчика передается дифу, который не линейный, к сожалению.

Понял, ждем...

ДА>>PS2. При попытке скопировать ошибку (с помощью контекстного меню) падает уже Nitra.Visualizer.

ДА>>System.NullReferenceException was unhandled
VD>Было бы признателен, если бы ты завел на каждый баг issue на youtrack.

Сделаю.
Re[3]: [Nitra] Первые впечатления и вопросы
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.10.14 05:43
Оценка:
Здравствуйте, Дьяченко Александр, Вы писали:

ДА>Скорей всего это был explorer.exe, т.к.


Не. Эксплорер — исключение.

ДА>из командной строки переменную тоже видно не было.


Ее переокрывать нужно. Возможно ее и не было видно, так как сессия старая была.

ДА>Видел, ссылка на новый форматер где-то по форуму проскакивала, но ничего не понял статейку бы какую-нибудь...


Да, наверно надо. Приоритет был не пример, а просто потестировать найтру. Там интересный случай, так называемый, island parsing (т.е. когда в море плоского текста встречаются островки грамматических конструкций).

ДА>Вроде ClassificationCache.Update не зависит от UI потока?


Зависит. Я же говорю. Этот кэш — синхронный. Если во время изменения придет еще одно, то сначала придется накатить старые.

Я уже поглядел что там. Там дело не в кэше, а в обходчиках собирающих информацию о подстветке (и т.п.). Обходчик подсветки выдавал список в котором токены многократно дублировались и содержали пустые диапазаоны. Я добавил проверки исключающие пустые диапазоны и заменил список на таблицы. Должно помочь.

Но это все равно не полное решение проблемы. Вольфхаунд потом постарается устранить саму причину — комбинаторный взрыв в обходчиках.

ДА>Может отделить все таки, коли диф не линейный?


После моих изменений проблема должна исчезнуть. Ну, а с дифом надо смотреть. Может быть его как-то оптимизировать можно.
ДА>Как нибудь так?

ДА>
ДА>    def updateResult = _classificationCache.Update(args.Result);
ДА>    if (Thread.CurrentThread == NitraPackage.Instance.DataHostService.UIThread : object)
ДА>      updateCache(updateResult);
ДА>    else
ДА>      _ = NitraPackage.Instance.DataHostService.BeginInvokeOnUIThread(Action(updateCache(updateResult)));
ДА>  };
ДА>


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

ДА>Просто вызывает некоторое недоумение. Лучше бы конечно что бы версия совпадала с реальной.


ОК, подумаем что нужно делать. Заведи, плиз ишью, а то забудем.

ДА>В первом сообщении код приведен полностью. Я его прям в таком виде в визализаторе писал.


ОК, просто с ишью всегда проще. Можно проконтролировать и не потеряется.


ДА>Просто у меня грамматика уже есть в каком-то виде и я пытался вставить файлик, а потом править по ходу.

ДА>Оттуда и ошибки.

Ясно. Ну, тогда воркэрануд — поправить грамматику в отдельном редакторе и вставить с меньшим числом ошибок. Тогда зависать не должно. Возможно мое изменение у

ДА>Понял, ждем...


Я уже закомитил фикс. Но когда соберется не знаю. И проверить не могу из-за технических проблем со сборкой. Так что скачай по позже инсталлятор. Если версия будет больше чем v0.1.1245, попробуй. Должно помочь.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: [Nitra] Первые впечатления и вопросы
От: Дьяченко Александр Россия  
Дата: 13.10.14 13:57
Оценка:
Здравствуйте, VladD2, Вы писали:

ДА>>Скорей всего это был explorer.exe, т.к.

VD>Не. Эксплорер — исключение.
ДА>>из командной строки переменную тоже видно не было.
VD>Ее переокрывать нужно. Возможно ее и не было видно, так как сессия старая была.

Я как раз новую и открывал (старой просто не было).
В любом случае это мелочь.

ДА>>Вроде ClassificationCache.Update не зависит от UI потока?

VD>Зависит. Я же говорю. Этот кэш — синхронный. Если во время изменения придет еще одно, то сначала придется накатить старые.

Ну может не доглядел чего...

VD>Я уже поглядел что там. Там дело не в кэше, а в обходчиках собирающих информацию о подстветке (и т.п.). Обходчик подсветки выдавал список в котором токены многократно дублировались и содержали пустые диапазаоны. Я добавил проверки исключающие пустые диапазоны и заменил список на таблицы. Должно помочь.

VD>Но это все равно не полное решение проблемы. Вольфхаунд потом постарается устранить саму причину — комбинаторный взрыв в обходчиках.

Ок потестим.

ДА>>Просто вызывает некоторое недоумение. Лучше бы конечно что бы версия совпадала с реальной.

VD>ОК, подумаем что нужно делать. Заведи, плиз ишью, а то забудем.
ДА>>В первом сообщении код приведен полностью. Я его прям в таком виде в визализаторе писал.
VD>ОК, просто с ишью всегда проще. Можно проконтролировать и не потеряется.

Вроде завел на все где споткнулся:

NTR-40 System.NullReferenceException in Nitra.Visualizer when copy error from context menu
NTR-41 Very many equal ambiguous options when parsing
NTR-42 Find not all posible ambiguous options when parsing
NTR-43 Invalid version in VS about dialog

Интересны коментарии на вот NTR-42.

ДА>>Просто у меня грамматика уже есть в каком-то виде и я пытался вставить файлик, а потом править по ходу.

ДА>>Оттуда и ошибки.
VD>Ясно. Ну, тогда воркэрануд — поправить грамматику в отдельном редакторе и вставить с меньшим числом ошибок. Тогда зависать не должно. Возможно мое изменение у

Это можно но без подсветки как-то совсем грусно , итак синтаксис только в статьях и видел, чуть что лезешь смотреть.

ДА>>Понял, ждем...

VD>Я уже закомитил фикс. Но когда соберется не знаю. И проверить не могу из-за технических проблем со сборкой. Так что скачай по позже инсталлятор. Если версия будет больше чем v0.1.1245, попробуй. Должно помочь.

Ок потестим.
... << RSDN@Home 1.2.0 alpha 5 rev. 76>>
Re[5]: [Nitra] Первые впечатления и вопросы
От: WolfHound  
Дата: 13.10.14 15:18
Оценка:
Здравствуйте, Дьяченко Александр, Вы писали:

ДА>Интересны коментарии на вот NTR-42.

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

ДА>Там и смотрю на закладке с текстом — 64 одинаковых варианта.

Там есть ещё закладка reflection.
В ней можно посмотреть реальную структуру АСТ.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[6]: [Nitra] Первые впечатления и вопросы
От: Дьяченко Александр Россия  
Дата: 13.10.14 16:53
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, Дьяченко Александр, Вы писали:


ДА>>Интересны коментарии на вот NTR-42.

WH>Прокомментировал. Это правильное поведение.

Я правильно понимаю, что выбираються альтернативы с минимумом додумывания?
Тоесть даже если бы тот кусок грамматики выглядел так:
  syntax RepeatQuantifier
  {
    | ZeroOrMany = "*"
    | OneOrMany  = "+"
    | UpperBound = "{" sm        "," sm Number sm "}"
    | LowerBound = "{" sm Number ","           sm "}"
    | FullBounds = "<" sm Number "," sm Number sm ">"
    | Exact      = "{" sm Number               sm "}"
  }


Я бы варианта FullBounds в альтернативах не увидел?
... << RSDN@Home 1.2.0 alpha 5 rev. 76>>
Re[7]: [Nitra] Первые впечатления и вопросы
От: WolfHound  
Дата: 13.10.14 17:18
Оценка:
Здравствуйте, Дьяченко Александр, Вы писали:

ДА>Я правильно понимаю, что выбираються альтернативы с минимумом додумывания?

Я стараюсь. Но это не просто.

ДА>Тоесть даже если бы тот кусок грамматики выглядел так:

хъ
ДА>Я бы варианта FullBounds в альтернативах не увидел?
Не важно. Я токены считаю.

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

ДА>Я как раз новую и открывал (старой просто не было).

ДА>В любом случае это мелочь.

Если ты не ошибешься, то это какие-то чудеса. А я очень не люблю когда не полностью понимаю проходящее.

VD>>Я уже поглядел что там. Там дело не в кэше, а в обходчиках собирающих информацию о подстветке (и т.п.). Обходчик подсветки выдавал список в котором токены многократно дублировались и содержали пустые диапазаоны. Я добавил проверки исключающие пустые диапазоны и заменил список на таблицы. Должно помочь.

VD>>Но это все равно не полное решение проблемы. Вольфхаунд потом постарается устранить саму причину — комбинаторный взрыв в обходчиках.

ДА>Ок потестим.


Новая версия собралась. Твой второй пример прочухался (не виснет), но все же подтормаживает. Полностью все заработает кагда Вольфвхаунд победит экспоненту в обходчиках.

ДА>Вроде завел на все где споткнулся:...


Спасибо!

ДА>Это можно но без подсветки как-то совсем грусно , итак синтаксис только в статьях и видел, чуть что лезешь смотреть.


Ну, так как только подправишь и поместишь код в студию, подсветка появится. В прочем, твой пример уже работает терпимо. А если поправить syn на syntax, то даже особых тормозов нет. Удаление же запятых вообще дает отличный результат. Так что достаточно пары замен по контексту и все будет воркать.

Мы же пока поищем другие места где экспонента вылезает. Похоже волкер отвечающий за скобки тоже втыкает на неоднозначностях.

В общем, скачай новую версию.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: [Nitra] Первые впечатления и вопросы
От: Дьяченко Александр Россия  
Дата: 13.10.14 19:23
Оценка:
Здравствуйте, WolfHound, Вы писали:

ДА>>Я бы варианта FullBounds в альтернативах не увидел?

WH>Не важно. Я токены считаю.
WH>Или у тебя есть идея, что ещё можно посчитать?

Пока наверно нет. Мало опыта...
Есть только внутреннее ощущение, примерно следующего вида:
1. Подправила одного правила имеют довольно сильную связь.
2. Из п.1 вытекает, что исключать не противоречащие подправила не правильно... поэтому я и написал про 3 альтернативы
3. А из п.2 вытекает, что и в ошибках ождалось — Expected "{Number,}" or "{,Number}" or "{Number,Number}"

Вобщем порисую грамматику дальше, может появяться идеи на своей, а там обобщить может получиться.

PS. Кстати а почему не предлагает банальный вариант удалить запятую?
... << RSDN@Home 1.2.0 alpha 5 rev. 76>>
Re[6]: [Nitra] Первые впечатления и вопросы
От: Дьяченко Александр Россия  
Дата: 13.10.14 19:34
Оценка:
Здравствуйте, VladD2, Вы писали:

ДА>>Я как раз новую и открывал (старой просто не было).

VD>Если ты не ошибешься, то это какие-то чудеса. А я очень не люблю когда не полностью понимаю проходящее.

Хорошо попробую воспроизвести, там видно будет.

ДА>>Ок потестим.

VD>Новая версия собралась. Твой второй пример прочухался (не виснет), но все же подтормаживает. Полностью все заработает кагда Вольфвхаунд победит экспоненту в обходчиках.

Попробую, но завтра, а то у нас уже ночь — спать пора.

ДА>>Это можно но без подсветки как-то совсем грусно , итак синтаксис только в статьях и видел, чуть что лезешь смотреть.

VD>Ну, так как только подправишь и поместишь код в студию, подсветка появится. В прочем, твой пример уже работает терпимо. А если поправить syn на syntax, то даже особых тормозов нет. Удаление же запятых вообще дает отличный результат. Так что достаточно пары замен по контексту и все будет воркать.

Хорошо бы. А то пробывал в блокноте — жесть .

VD>Мы же пока поищем другие места где экспонента вылезает. Похоже волкер отвечающий за скобки тоже втыкает на неоднозначностях.

VD>В общем, скачай новую версию.

Хорошо. Кстати со скобками в визуализаторе тоже ловились странности при разбалансировке фигурных скобок, пару раз вроде он уходил в несознанку — типа немогу разобрать и подчеркивал весь текст как ошибку, тоже так себе поведение.
Если поймаю стабильно, то отпишусь.
... << RSDN@Home 1.2.0 alpha 5 rev. 76>>
Re[6]: [Nitra] Первые впечатления и вопросы
От: Дьяченко Александр Россия  
Дата: 13.10.14 19:34
Оценка:
Здравствуйте, WolfHound, Вы писали:

ДА>>Там и смотрю на закладке с текстом — 64 одинаковых варианта.

WH>Там есть ещё закладка reflection.
WH>В ней можно посмотреть реальную структуру АСТ.

Посмотрел на примере попроще:
syntax module M1
{
    syntax S1 = E1,E2,;
}

Действительно в рефлекшене отличается, но что-то я не соображу как у него такие подветки получаются что в первой альтернативе, что во второй...
Вроде по грамматике не так должно быть...
... << RSDN@Home 1.2.0 alpha 5 rev. 76>>
Re[7]: [Nitra] Первые впечатления и вопросы
От: Дьяченко Александр Россия  
Дата: 13.10.14 19:50
Оценка:
По мне вот такое дерево должно быть:
Sequence
|- Repeat
|  |- Call
|  |- RepeatQuantifier
|- List
   |- Repeat
      |- Call
      |- RepeatQuantifier

А у него получаются:
RuleExpression
|- Ambiguous of <NULL>
   |- <NULL>
   |  |- Call
   |  |- RepeatQuantifier
   |  |- List
   |  |  |- RuleExpression
   |  |     |- Call
   |  |- RepeatQuantifier
   |- <NULL>
      |- Call
      |- RepeatQuantifier
      |- List
         |- RuleExpression
            |- Call
            |- RepeatQuantifier

Второй вариант вроде похож на правду, но откуда в первом варианте появляется RepeatQuantifier из граматики не ясно...
... << RSDN@Home 1.2.0 alpha 5 rev. 76>>
Re[7]: [Nitra] Первые впечатления и вопросы
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.10.14 20:48
Оценка:
Здравствуйте, Дьяченко Александр, Вы писали:

ДА>Хорошо. Кстати со скобками в визуализаторе тоже ловились странности при разбалансировке фигурных скобок, пару раз вроде он уходил в несознанку — типа немогу разобрать и подчеркивал весь текст как ошибку, тоже так себе поведение.


Присылай мне примеры. Будем разбираться.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: [Nitra] Первые впечатления и вопросы
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.10.14 20:59
Оценка:
Здравствуйте, WolfHound, Вы писали:

ДА>>Интересны коментарии на вот NTR-42.

WH>Прокомментировал. Это правильное поведение.

Лучший вариант тут — грохнуть запятую.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: [Nitra] Первые впечатления и вопросы
От: WolfHound  
Дата: 13.10.14 21:06
Оценка:
Здравствуйте, Дьяченко Александр, Вы писали:

ДА>1. Подправила одного правила имеют довольно сильную связь.

Не согласен.

ДА>2. Из п.1 вытекает, что исключать не противоречащие подправила не правильно... поэтому я и написал про 3 альтернативы

ДА>3. А из п.2 вытекает, что и в ошибках ождалось — Expected "{Number,}" or "{,Number}" or "{Number,Number}"
Боюсь, ты не понимаешь масштаб проблемы.
Наш думатель может найти вообще все варианты.
И если его не ограничивать, то он тебе вывалит лес деревьев эпичного размера.
Это:
1)Вредно. Тебе все эти варианты не нужны.
2)Медленно. У нас на всю работу 100 миллисекунд времени. Ибо это время реакции человека. Всё что меньше для человека мгновенно. Всё что больше тормозит.

ДА>Вобщем порисую грамматику дальше, может появяться идеи на своей, а там обобщить может получиться.

Подумай. Только осторожно. Там столько экспонент в кустах прячется Я их уже много задавил. Последняя осталась.

ДА>PS. Кстати а почему не предлагает банальный вариант удалить запятую?

По тому, что его стоимость +3/-1(3 вставки одно удаление).
По нашей эвристике это даже хуже чем просто +4 у третьего варианта.
У выбранных вариантов стоимость +3.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[7]: [Nitra] Первые впечатления и вопросы
От: WolfHound  
Дата: 13.10.14 21:07
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Лучший вариант тут — грохнуть запятую.

Нет. Этот вариант +3/-1. Смотри грамматику внимательней.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[8]: [Nitra] Первые впечатления и вопросы
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.10.14 11:26
Оценка:
Здравствуйте, WolfHound, Вы писали:

VD>>Лучший вариант тут — грохнуть запятую.

WH>Нет. Этот вариант +3/-1. Смотри грамматику внимательней.

С какого переполоха? Будет 0/-1. Просто цикла там нет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: [Nitra] Первые впечатления и вопросы
От: WolfHound  
Дата: 14.10.14 13:14
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>С какого переполоха? Будет 0/-1. Просто цикла там нет.

Я уже понял. Вчера затупил.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[10]: [Nitra] Первые впечатления и вопросы
От: Дьяченко Александр Россия  
Дата: 14.10.14 15:57
Оценка:
Здравствуйте, WolfHound, Вы писали:

VD>>С какого переполоха? Будет 0/-1. Просто цикла там нет.

WH>Я уже понял. Вчера затупил.

Тогда почесу не предлагает?
... << RSDN@Home 1.2.0 alpha 5 rev. 76>>
Re[11]: [Nitra] Первые впечатления и вопросы
От: WolfHound  
Дата: 14.10.14 16:09
Оценка:
Здравствуйте, Дьяченко Александр, Вы писали:

VD>>>С какого переполоха? Будет 0/-1. Просто цикла там нет.

WH>>Я уже понял. Вчера затупил.
ДА>Тогда почесу не предлагает?
Не знаю. Там ещё много проблем. Я их пытаюсь решать.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[6]: [Nitra] Первые впечатления и вопросы
От: Дьяченко Александр Россия  
Дата: 14.10.14 16:13
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Новая версия собралась. Твой второй пример прочухался (не виснет), но все же подтормаживает. Полностью все заработает кагда Вольфвхаунд победит экспоненту в обходчиках.

VD>В общем, скачай новую версию.

Скачал — уже гораздо лучше, за час Студия всего 2 раза померла .

Студия вешалась при работе со скобрами, с минимальным примером пока не получается.

Связано похоже с тем что граматику:
syntax module M1
{
    syntax S1 = E1;
    syntax S2 = { E2 };
    syntax S3 = E3;
}

Найтра не разбирает вообще, в Errors:
(1,1): Exception: Unexpected token: {

А вот если выделенную фигурную скобку заменить на круглую, то тогда разбирает:
(4, 20): Expected: ')'
(4, 21): Unexpected token: }

В большом примере это похоже накладывается на комбинаторный взрыв и Студия падает съев всю память.

Баг на "не разбор" грамматики завел:
NTR-44 Not parsing simple grammar
... << RSDN@Home 1.2.0 alpha 5 rev. 76>>
Re[7]: [Nitra] Первые впечатления и вопросы
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.10.14 17:23
Оценка:
Здравствуйте, Дьяченко Александр, Вы писали:

ДА>Скачал — уже гораздо лучше, за час Студия всего 2 раза померла .


Плохо.

ДА>Студия вешалась при работе со скобрами, с минимальным примером пока не получается.


По грамматике нитры фигурных скобок в этом месте действительно не должно быть. Фигурные скобки применимы только к квантификаторам циклов и как тело правила, но до тела и до квантификатора должно идти хотя бы одно другое правило.


ДА>Найтра не разбирает вообще, в Errors:

ДА>
ДА>(1,1): Exception: Unexpected token: {
ДА>


Но от этого исключения лететь не должны. Так что это точно баг.

ДА>Баг на "не разбор" грамматики завел:

ДА>NTR-44 Not parsing simple grammar

Эта грамматика ошибочна. Баг в том, что летит исключение, а не выдается сообщение об ошибке.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: [Nitra] Первые впечатления и вопросы
От: Дьяченко Александр Россия  
Дата: 15.10.14 00:36
Оценка:
Здравствуйте, VladD2, Вы писали:

ДА>>Студия вешалась при работе со скобрами, с минимальным примером пока не получается.

VD>По грамматике нитры фигурных скобок в этом месте действительно не должно быть. Фигурные скобки применимы только к квантификаторам циклов и как тело правила, но до тела и до квантификатора должно идти хотя бы одно другое правило.

Знаю, это я продолжаю переносить грамматику, вот и возникаю разные казусы.

ДА>>Баг на "не разбор" грамматики завел:

ДА>>NTR-44 Not parsing simple grammar
VD>Эта грамматика ошибочна. Баг в том, что летит исключение, а не выдается сообщение об ошибке.

То что грамматика не правильная я понимаю.
Вобщем надо переформулировать баг.
... << RSDN@Home 1.2.0 alpha 5 rev. 76>>
Re: [Nitra] Версия Nitra v0.1.1259.0
От: Дьяченко Александр Россия  
Дата: 19.10.14 16:18
Оценка:
Стало почти неплохо. Студия уже почти не падает, только подтормаживает временами...

  1. Со скобками еще не все проблемы решили, причем похоже вопрос уже не к памяти так как студия падает моментально, минимальный пример так воспроизвести и не смог.
    Пробовал подключиться второй Студией результат какой-то странный при тех же действиях получал исключение "JetBrains.Application.Progress.ProcessCancelledException", но при продолжении первая Студия не падает, вобщем попытка поймать подение ни к чему не привела, может от Решарпера какая наведенка....
    Файл Modula.nitra выглядит примерно так:
    namespace Awtl.Modula.Grammar
    {
        syntax module Modula
        {
            ... Куча правильных правил
    
            syntax EmptyStatement =
                ; <<< Здесь ругается (369, 4): Expected: RuleExpression
    
            ... Ещё куча правильных правил
    
            syntax VariableDesignator =
                EntireDesignator |
                IndexedDesignator |
                SelectedDesignator |
                DereferencedDesignator ;
                
            ... Куча кривого текста
        }
    }

    И вот при попытке преобразовать VariableDesignator в правильную форму, следующим способом:
    — выделяю "=" и давлюу Enter
    — вставляю "{"
    — выделяю ";" и давлюу Enter
    — давлю Backspace
    — вставляю "}"
    — делаю вертикальное выделение перед EntireDesignator и до DereferencedDesignator
    — печатаю "| "
    — удаляю "|" в конце правил
    Студия падает где-то между всавкой "}" и завершением последнего пункта.
  2. Так же после каких-то действий получил "System.OperationCanceledException" сначала в "Nitra.Internal.ExtensibleRuleParser.Parse", потом в "Nitra.ParserHost.DoParsingImpl", после чего отвалился разбор — на ввод любого символа получал тоже самое исключение, в тех же местах. Сложилось впечатление что это поведение является следствием переиспользования ParsingResult и поэтому после однократной установки свойства TerminateParsing в True, при последующих разборах сразу получаю OperationCanceledException в ExtensibleRuleParser.Parse.
  3. Ну и напоминаю про Roadmap, может создать задачу в трекере?.
... << RSDN@Home 1.2.0 alpha 5 rev. 76>>
Re[2]: [Nitra] Версия Nitra v0.1.1259.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 31.10.14 15:17
Оценка:
Здравствуйте, Дьяченко Александр, Вы писали:

ДА>И вот при попытке преобразовать VariableDesignator в правильную форму, следующим способом:

ДА>- выделяю "=" и давлюу Enter
ДА>- вставляю "{"
ДА>- выделяю ";" и давлюу Enter
ДА>- давлю Backspace
ДА>- вставляю "}"
ДА>- делаю вертикальное выделение перед EntireDesignator и до DereferencedDesignator
ДА>- печатаю "| "
ДА>- удаляю "|" в конце правил
ДА>Студия падает где-то между всавкой "}" и завершением последнего пункта.

Что-то пробую воспроизвести и не получается. Видимо нужна эта самая куча кода.

Не мог бы ты прислать код который воспроизводит проблему?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: [Nitra] Версия Nitra v0.1.1259.0
От: Дьяченко Александр Россия  
Дата: 31.10.14 16:02
Оценка:
Здравствуйте, VladD2, Вы писали:

ДА>>И вот при попытке преобразовать VariableDesignator в правильную форму, следующим способом:

ДА>>- выделяю "=" и давлюу Enter
ДА>>- вставляю "{"
ДА>>- выделяю ";" и давлюу Enter
ДА>>- давлю Backspace
ДА>>- вставляю "}"
ДА>>- делаю вертикальное выделение перед EntireDesignator и до DereferencedDesignator
ДА>>- печатаю "| "
ДА>>- удаляю "|" в конце правил
ДА>>Студия падает где-то между всавкой "}" и завершением последнего пункта.

VD>Что-то пробую воспроизвести и не получается. Видимо нужна эта самая куча кода.


VD>Не мог бы ты прислать код который воспроизводит проблему?


Ссылка на исходник была в сообщении — Modula.nitra.
Сейчас специально проверил на последних сборках:
Nemerle — v1.2.399.0
Nitra — v0.1.1265.0
Эффект тот же.
... << RSDN@Home 1.2.0 alpha 5 rev. 76>>
Re[4]: [Nitra] Версия Nitra v0.1.1259.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.11.14 12:18
Оценка:
Здравствуйте, Дьяченко Александр, Вы писали:

ДА>Ссылка на исходник была в сообщении — Modula.nitra.


Сори, пропустил.

ДА>Эффект тот же.


Будем разбираться.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: [Nitra] Версия Nitra v0.1.1259.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.11.14 18:15
Оценка:
Здравствуйте, Дьяченко Александр, Вы писали:

ДА>Студия падает где-то между всавкой "}" и завершением последнего пункта.


Нашел и задавил баг в выведении ошибки. Баг приводил к исключению (что-то там аут-оф-рендж). Других проблем воспроизвести не смог.
Попробуй новую версию, плиз, когда она соберется.

ДА>
  • Так же после каких-то действий получил "System.OperationCanceledException" сначала в "Nitra.Internal.ExtensibleRuleParser.Parse", потом в "Nitra.ParserHost.DoParsingImpl", после чего отвалился разбор — на ввод любого символа получал тоже самое исключение, в тех же местах. Сложилось впечатление что это поведение является следствием переиспользования ParsingResult и поэтому после однократной установки свойства TerminateParsing в True, при последующих разборах сразу получаю OperationCanceledException в ExtensibleRuleParser.Parse.

    Это я воспроизвести не смог. Проверил, там все объекты создаются при постановке парсинга в очередь.
  • Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[2]: [Nitra] Версия Nitra v0.1.1259.0
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 06.11.14 19:19
    Оценка:
    Здравствуйте, Дьяченко Александр, Вы писали:

    ДА>
  • Так же после каких-то действий получил "System.OperationCanceledException" сначала в "Nitra.Internal.ExtensibleRuleParser.Parse", потом в "Nitra.ParserHost.DoParsingImpl", после чего отвалился разбор — на ввод любого символа получал тоже самое исключение, в тех же местах. Сложилось впечатление что это поведение является следствием переиспользования ParsingResult и поэтому после однократной установки свойства TerminateParsing в True, при последующих разборах сразу получаю OperationCanceledException в ExtensibleRuleParser.Parse.

    Кажись воспроизвел, но не описанным тобой образом. Правда у меня студия не падает, но OperationCanceledException вылетают и подсветка умерает на время.

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

    Отдал тормозящий пример Вольфхаунде. Надеюсь, он придумает как это фиксить.
  • Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[3]: [Nitra] Версия Nitra v0.1.1259.0
    От: WolfHound  
    Дата: 06.11.14 21:31
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Отдал тормозящий пример Вольфхаунде.

    Как ты только людей не склоняешь...

    VD>Надеюсь, он придумает как это фиксить.

    Кто там козлит, я в общих чертах понял. Осталось понять, что делать.
    ... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[3]: [Nitra] Версия Nitra v0.1.1259.0
    От: Дьяченко Александр Россия  
    Дата: 08.11.14 06:40
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    ДА>>Студия падает где-то между всавкой "}" и завершением последнего пункта.

    VD>Нашел и задавил баг в выведении ошибки. Баг приводил к исключению (что-то там аут-оф-рендж). Других проблем воспроизвести не смог.
    VD>Попробуй новую версию, плиз, когда она соберется.

    Не получается пересобрать свой проект после обновления Nemerle (v1.2.401.0) и Nitra (v0.1.1283.0). При сборке пишет:
    C:\Users\Александр\Documents\Visual Studio 2013\Projects\Awtl.Modula\Awtl.Modula.Grammar\ModulaGrammar.nitra(1,1): error : Не удалось загрузить файл или сборку "Nitra.Core, Version=0.1.1271.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd" либо одну из их зависимостей. Не удается найти указанный файл.

    И вообще что то у вас с версиями странное:
    NitraSetup.msi — 0.1.1283.0

    Nitra.Compiler.dll — 0.1.1271.0
    Nitra.Core.dll — 0.1.1267.0
    Nitra.exe — 0.1.1283.0
    Nitra.Grammar.dll — 0.1.1271.0
    Nitra.Quote.dll — 0.1.1283.0
    Nitra.Runtime.dll — 0.1.1267.0
    Nitra.TestsLauncher.exe — 1.0.0.0
    Nitra.Visualizer.exe — 1.0.0.0
    Nitra.VisualStudio.dll — 0.1.1283.0
    ... << RSDN@Home 1.2.0 alpha 5 rev. 76>>
    Re[4]: [Nitra] Версия Nitra v0.1.1259.0
    От: hardcase Пират http://nemerle.org
    Дата: 17.11.14 13:31
    Оценка:
    Здравствуйте, Дьяченко Александр, Вы писали:

    ДА>И вообще что то у вас с версиями странное:

    ДА>NitraSetup.msi — 0.1.1283.0

    ДА>Nitra.Compiler.dll — 0.1.1271.0

    ДА>Nitra.Core.dll — 0.1.1267.0
    ДА>Nitra.exe — 0.1.1283.0
    ДА>Nitra.Grammar.dll — 0.1.1271.0
    ДА>Nitra.Quote.dll — 0.1.1283.0
    ДА>Nitra.Runtime.dll — 0.1.1267.0
    ДА>Nitra.TestsLauncher.exe — 1.0.0.0
    ДА>Nitra.Visualizer.exe — 1.0.0.0
    ДА>Nitra.VisualStudio.dll — 0.1.1283.0

    Это какой-то неправильный инсталлятор выложился. В текущем такой проблемы нет.
    /* иЗвиНите зА неРовнЫй поЧерК */
    Re[5]: [Nitra] Версия Nitra v0.1.1259.0
    От: Дьяченко Александр Россия  
    Дата: 18.11.14 15:45
    Оценка:
    Здравствуйте, hardcase, Вы писали:

    H>Здравствуйте, Дьяченко Александр, Вы писали:


    ДА>>И вообще что то у вас с версиями странное:

    ДА>>NitraSetup.msi — 0.1.1283.0

    ДА>>Nitra.Compiler.dll — 0.1.1271.0

    ДА>>Nitra.Core.dll — 0.1.1267.0
    ДА>>Nitra.exe — 0.1.1283.0
    ДА>>Nitra.Grammar.dll — 0.1.1271.0
    ДА>>Nitra.Quote.dll — 0.1.1283.0
    ДА>>Nitra.Runtime.dll — 0.1.1267.0
    ДА>>Nitra.TestsLauncher.exe — 1.0.0.0
    ДА>>Nitra.Visualizer.exe — 1.0.0.0
    ДА>>Nitra.VisualStudio.dll — 0.1.1283.0

    H>Это какой-то неправильный инсталлятор выложился. В текущем такой проблемы нет.


    Последний который смотрел — 0.1.1296.0, в нем уже лучше 2 версии — в основном 0.1.1296.0, а Nitra.Quote.dll и Nitra.Runtime.dll — 0.1.1296.0.
    Но по-крайне мере мой проект собирается.
    Я вобще-то думал что у вас так много стадий сборки как-раз из-за BootStapping-а и что бы получать одну версию.
    ... << RSDN@Home 1.2.0 alpha 5 rev. 76>>
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.