Liquid template language
От: ifle  
Дата: 12.08.17 12:02
Оценка:
Всё никак не мог себя заставить изучить нитру, довольно специфическая тема.
А вот попалась ручная реализация Liquid парсера
https://github.com/sebastienros/fluid
И захотелось сделать такой-же на нитре
Язык довольно простой
https://shopify.github.io/liquid/
Будет интересно сравнить по скорости.
С чего начать? Что-то не нашёл как начинать свой проект на нитра.
Re: Liquid template language
От: ifle  
Дата: 14.08.17 13:43
Оценка:
Создал проэкт, модуль, синтакс, получаю ошибку на совсем безобидном примере. Что не так?

namespace Parser
{
    
    syntax module NLiquidSyntax
    {  
      using Nitra.Core;
      using Nitra.CStyleComments;

      [StartRule]
      syntax Start = "hello";

    }
}


1>------ Rebuild All started: Project: NLiquid, Configuration: Debug Any CPU ------
1>D:\Dev\GitHub\Nitra\Boot2\Net-4.0\Nitra.Runtime.dll(1,1): warning : Failed to read metadata from referenced assembly: Unknown member 'Fir'.
1>D:\Dev\GitHub\Nitra\Boot2\Net-4.0\Nitra.Runtime.dll(1,1): warning : Failed to read metadata from referenced assembly: assertion failed in file CompilingNitraProject.n, line 59: Cannot get Nemerle type for symbol ''
1>C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(289,5): error : internal compiler error: got some unknown exception of type System.NullReferenceException: Object reference not set to an instance of an object.
1>       at Nitra.Typing.SyntaxModuleBodyContext._N_appendSymbol__74998.apply(TokenLiteralSymbol symbol, Map`2 map) in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\Context\SyntaxModuleBodyContext.n:line 30
1>       at Nemerle.Collections.NList.FoldLeft[T,TOut](list`1 l, TOut acc, Function`3 f)
1>       at Nitra.Typing.SyntaxModuleBodyContext._N_walk_75025(_N_closureOf_get_TokenNamesMap_74988 _N_get_TokenNamesMap_cp_75024, Context baseContext) in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\Context\SyntaxModuleBodyContext.n:line 38
1>       at Nitra.Typing.SyntaxModuleBodyContext._N_walk_75025(_N_closureOf_get_TokenNamesMap_74988 _N_get_TokenNamesMap_cp_75024, Context baseContext) in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\Context\SyntaxModuleBodyContext.n:line 38
1>       at Nitra.Typing.SyntaxModuleBodyContext.get_TokenNamesMap() in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\Context\SyntaxModuleBodyContext.n:line 43
1>       at Nitra.Utils.MakeLiteralName(option`1 fieldName, String value, Context context) in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\Utils.n:line 267
1>       at Nitra.Utils.StringRuleTyping(Location loc, String value, option`1 fieldName, Context context) in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\Utils.n:line 527
1>       at NitraSyntaxParseTree.RuleExpression.String.Typing(option`1 _baseRule, PrecedenceInfo _precedenceInfo, option`1 _fieldName, Context context, RuleDefinitionOptions _options) in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\NitraSyntax.nitra:line 2350
1>       at NitraSyntaxParseTree.SimpleRule.MakeTypedRule() in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\NitraSyntax.nitra:line 1596
1>       at NitraSyntaxParseTree.SimpleRule.Typing() in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\NitraSyntax.nitra:line 1600
1>       at NitraSyntaxParseTree.SyntaxModuleMember.SimpleRule.Typing() in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\NitraSyntax.nitra:line 1049
1>       at NitraSyntaxParseTree.NamespaceMember.SyntaxModule.Typing() in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\NitraSyntax.nitra:line 918
1>       at NitraSyntaxParseTree.NamespaceBody.Typing() in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\NitraSyntax.nitra:line 99
1>       at NitraSyntaxParseTree.NamespaceMember.Namespace.Typing() in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\NitraSyntax.nitra:line 882
1>       at NitraSyntaxParseTree.Start.Typing() in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\NitraSyntax.nitra:line 84
1>       at Nitra.Compiler.CompilingNitraProject.TypeSyntaxModules(List`1 parseTree) in D:\Dev\GitHub\Nitra\Boot2\Nitra.Compiler\CompilingNitraProject.Passes.n:line 160
1>       at Nitra.Compiler.CompilingNitraProject.BeforeTypedMembers() in D:\Dev\GitHub\Nitra\Boot2\Nitra.Compiler\CompilingNitraProject.Passes.n:line 350
1>       at Nitra.InvokeNitraCompiler_assembly_preaddMacro._N__N_method_lambda__42293.apply_void() in D:\Dev\GitHub\Nitra\Boot2\Nitra.Compiler\Macros\Macros.n:line 0
1>       at Nemerle.Compiler.MacroColorizator.InGlobalColor(FunctionVoid fn)
1>       at Nitra.InvokeNitraCompiler_assembly_preaddMacro.Run(Typer _N__1, list`1 parms) in D:\Dev\GitHub\Nitra\Boot2\Nitra.Compiler\Macros\Macros.n:line 27
1>       at Nemerle.Compiler.TypesManager.AttributeMacroExpansion.Expand()
1>       at Nemerle.Compiler.TypesManager.ExpandMacros()
1>       at Nemerle.Compiler.TypesManager.Run()
1>       at Nemerle.Compiler.ManagerClass.Run()
1>       at Nemerle.CommandlineCompiler.MainClass.main_with_catching()
1>Done building project "NLiquid.nproj" -- FAILED.
1>
1>1 error, 2 warnings.
Re[2]: Liquid template language
От: WolfHound  
Дата: 14.08.17 14:58
Оценка:
Здравствуйте, ifle, Вы писали:

I>Создал проэкт, модуль, синтакс, получаю ошибку на совсем безобидном примере. Что не так?

У меня собирается.
Запусти RebuildBoot.cmd после чего пересобери нитру.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: Liquid template language
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.08.17 02:00
Оценка:
Здравствуйте, ifle, Вы писали:

Извиняюсь, что сразу не заметил вопрос.

I>С чего начать? Что-то не нашёл как начинать свой проект на нитра.


1. Собрать Нитру. Инструкция здесь: https://github.com/rsdn/nitra/wiki/Nitra-Build-process
2. Создать проект с синтаксическим модулем и описанием языка. Это ты уже пытался сделать. Надо повторить еще раз. Вот инструкция.
3. Скомпилировать проект и получить длл со своим языком.
4. Создать солюшен с в Nitra.Vizsualizer.exe и добавить туда описание своего языка (которое будет в длл-и).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Liquid template language
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.08.17 16:07
Оценка:
Здравствуйте, ifle, Вы писали:

I>С чего начать? Что-то не нашёл как начинать свой проект на нитра.


Если что можешь стучаться мне на Скайп: vc.rsdn.ru
Это будет оперативнее.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Liquid template language
От: ifle  
Дата: 15.08.17 17:56
Оценка:
Не собирается последняя версия нитры.
Получаю такие ошибки:

Error        Type 'DotNet.BaseTypeReferenceSet' does not contain any method marked with 'Nitra.Staging.CollectAttribute' attribute.    Nitra.Grammar    D:\Dev\GitHub\nitra\Nitra\Nitra.Grammar\AST\Language.nitra    28    
Error        Type 'DotNet.BaseTypeReferenceSet' does not contain any method marked with 'Nitra.Staging.CollectAttribute' attribute.    Nitra.Grammar    D:\Dev\GitHub\nitra\Nitra\Nitra.Grammar\AST\Language.nitra    29    
Error        Type 'DotNet.BaseTypeReferenceSet' does not contain any method marked with 'Nitra.Staging.CollectAttribute' attribute.    Nitra.Grammar    D:\Dev\GitHub\nitra\Nitra\Nitra.Grammar\AST\Members\Ast.nitra    24    
Error        Type 'DotNet.BaseTypeReferenceSet' does not contain any method marked with 'Nitra.Staging.CollectAttribute' attribute.    Nitra.Grammar    D:\Dev\GitHub\nitra\Nitra\Nitra.Grammar\AST\Members\Ast.nitra    25    
Error        Type 'DotNet.BaseTypeReferenceSet' does not contain any method marked with 'Nitra.Staging.CollectAttribute' attribute.    Nitra.Grammar    D:\Dev\GitHub\nitra\Nitra\Nitra.Grammar\AST\Members\AstMembers\AstMember.nitra    80    
Error        The "CreateZipPackage" task failed unexpectedly.
System.TypeLoadException: Could not load type 'Microsoft.VisualStudio.Setup.PartialManifestType' from assembly 'Microsoft.VisualStudio.Setup.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
   at Microsoft.VisualStudio.Sdk.BuildTasks.CreateZipPackageBase.Execute()
   at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
   at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext()    CSharp.VisualStudio.Plugin
Re[2]: Liquid template language
От: ifle  
Дата: 15.08.17 17:57
Оценка:
Здравствуйте, VladD2, Вы писали:

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


I>>С чего начать? Что-то не нашёл как начинать свой проект на нитра.


VD>Если что можешь стучаться мне на Скайп: vc.rsdn.ru

VD>Это будет оперативнее.
Спасибо.
Re[3]: Liquid template language
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.08.17 18:17
Оценка:
Здравствуйте, ifle, Вы писали:

I>Не собирается последняя версия нитры.


Что-то ты сделал не так. Ты берешь мастер?

Надо проверить по шгам.
1. Что установлена последняя версия Немерла. Ее надо или собрать из исходников, или установить с сайта.
2. Очистить репозиторий. Лучше всего это сделать гитом. В ГитЭкстеншон для этого есть команда Command\Clean working directory...
3. Собрать бут запустив BuildBoot.cmd. При этом все копии VS нужно закрыть. И вообще закрыть все что может "держать" файлы.
4. После этого открыть NitraTools.sln и попробовать собрать.

Ну, и нужно проверить окружение. Какая версия студии стоит?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Liquid template language
От: ifle  
Дата: 15.08.17 18:23
Оценка:
VD>Что-то ты сделал не так. Ты берешь мастер?
Да

VD>Надо проверить по шгам.

VD>1. Что установлена последняя версия Немерла. Ее надо или собрать из исходников, или установить с сайта.
Стоит последняя версия. Установил с сайта

VD>2. Очистить репозиторий. Лучше всего это сделать гитом. В ГитЭкстеншон для этого есть команда Command\Clean working directory...

Я заного клонировал репозиторий

VD>3. Собрать бут запустив BuildBoot.cmd. При этом все копии VS нужно закрыть. И вообще закрыть все что может "держать" файлы.

Собирается нормально

VD>4. После этого открыть NitraTools.sln и попробовать собрать.

NitraTools.sln компилируется нормально, падает Nitra-Stagt1.sln

VD>Ну, и нужно проверить окружение. Какая версия студии стоит?

VS2017 v15.3
Re[5]: Liquid template language
От: ifle  
Дата: 15.08.17 19:05
Оценка:
В принципе и без компиляции Nitra-Stagt1.sln мой проект начал собираться. Спасибо. Попробую писать грамматику.
Re[5]: Liquid template language
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.08.17 19:06
Оценка:
Здравствуйте, ifle, Вы писали:

VD>>Ну, и нужно проверить окружение. Какая версия студии стоит?

I>VS2017 v15.3

15.3? А он уже зарелизен? Или это превью?

А при установке Visual Studio SDK был поставлен?

Переключи количество параллельных сборок в 1 (https://msdn.microsoft.com/en-us/library/y0xettzf(v=vs.90).aspx), чтобы выхлоп понятно от какого проекта был. И попробуй еще раз. Потом выхлопм сюда скопипасть.

То что у тебя был в первый раз больше похоже на какой-то клинч сборок.

А еще лучше поставь себе TeamViewer и по скайпу явки и пароли пришли, чтобы я очно глянул.

I>NitraTools.sln компилируется нормально, падает Nitra-Stagt1.sln


В принципе для начала роботы над языком этого достаточно. В Nitra-Stagt1.sln компилируются плагины для Студии. Они тебе пока что не сильно нужны.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Liquid template language
От: ifle  
Дата: 15.08.17 19:25
Оценка:
Здравствуйте, VladD2, Вы писали:

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


VD>>>Ну, и нужно проверить окружение. Какая версия студии стоит?

I>>VS2017 v15.3

VD>15.3? А он уже зарелизен? Или это превью?

Уже зарелизили 15.3, ASP.NET Core 2, .NET Core 2. .NET Standart 2

А как работать с Nitra.Visualizer.exe. Он завязан на клиент\сервер. Как их поднять?
Отредактировано 15.08.2017 19:29 ifle . Предыдущая версия .
Re[7]: Liquid template language
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.08.17 19:29
Оценка:
Здравствуйте, ifle, Вы писали:

VD>>15.3? А он уже зарелизен? Или это превью?

I>Уже зарелизили 15.3, ASP.NET Core 2, .NET Core 2. .NET Standart 2

Давно? Нашел релиз от вчерашнего дня.

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

15.2 пока апдэйт не предлагает.

I>А как работать с Nitra.Visualizer.exe. Он завязан на клиент\сервер? Как их поднять?


Просто запустить и все. Сервер он сам поднимет.

Если нужно будет отлаживать свой код, надо будет приатачиться отладчиком к серверу. Но это все в будущем. Пока что нужно минимально освоиться. Сделать первые шаги. Написать грамматику...

Сейчас тебе нужно сделать тестовый проект в Nitra.Visualizer.exe. Его настройка, это как раз самая косячная часть Nitra.Visualizer-а.

Твоя задача добиться запуска простейшего теста.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 15.08.2017 19:33 VladD2 . Предыдущая версия .
Re[8]: Liquid template language
От: ifle  
Дата: 15.08.17 19:38
Оценка:
VD>Боюсь у тебя какой-нибудь пре-релиз в котором могут быть косяки.
Я сегодня поставил.

VD>15.2 пока апдэйт не предлагает.

Они дозируют по регионам
I>>А как работать с Nitra.Visualizer.exe. Он завязан на клиент\сервер? Как их поднять?

VD>Просто запустить и все. Сервер он сам поднимет

Получаю такой ассерт
Re[9]: Liquid template language
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.08.17 19:40
Оценка:
Здравствуйте, ifle, Вы писали:

I>Получаю такой ассерт

I>Image: nitra1.jpg

Это нормально. Ты текст то прочти. Просто жми Ignore (или Retry, если нужна отладка). Этот ассерт нужен, чтобы подключаться к серверу на ранних стадиях его загрузки.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Liquid template language
От: ifle  
Дата: 15.08.17 19:48
Оценка:
Здравствуйте, VladD2, Вы писали:

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


VD>Это нормально. Ты текст то прочти. Просто жми Ignore (или Retry, если нужна отладка). Этот ассерт нужен, чтобы подключаться к серверу на ранних стадиях его загрузки.

Ну мне то это сообщение ни очём не говорит.
Создал тест, а он падает. Что-то не так видимо сделал.
А есть где-то описание, как работать с Nitra.Visualizer?

System.NullReferenceException occurred
  HResult=0x80004003
  Message=Object reference not set to an instance of an object.
  Source=<Cannot evaluate the exception source>
  StackTrace:
   at Nitra.ClientServer.Messages.Config.Serialize(BinaryWriter writer)
   at Nitra.ClientServer.Messages.ClientMessage.ProjectStartLoading.Serialize(BinaryWriter writer)
   at Nitra.ClientServer.Client.NitraClient.Send(ClientMessage msg) in D:\Dev\GitHub\Nitra\Nitra\ClientServer\Nitra.ClientServer.Client\NitraClient.n:line 118
   at Nitra.ViewModels.SolutionVm.Activate(NitraClient client) in D:\Dev\GitHub\Nitra\Nitra.TestsLauncher\ViewModels\SolutionVm.n:line 70
   at Nitra.Visualizer.MainWindow.ActivateVm(IClientHost oldVm, IClientHost newVm, NitraClient client) in D:\Dev\GitHub\nitra\Nitra.Visualizer\MainWindow.xaml.cs:line 1239
   at Nitra.Visualizer.MainWindow.ChangeCurrentTest(SuiteVm newTestSuite, SolutionVm newSolution, ProjectVm newProject, FileVm newTest) in D:\Dev\GitHub\nitra\Nitra.Visualizer\MainWindow.xaml.cs:line 992
   at Nitra.Visualizer.MainWindow.ProcessSelectTestTreeNode(RoutedPropertyChangedEventArgs`1 e) in D:\Dev\GitHub\nitra\Nitra.Visualizer\MainWindow.xaml.cs:line 927
   at Nitra.Visualizer.MainWindow._testsTreeView_SelectedItemChanged(Object sender, RoutedPropertyChangedEventArgs`1 e) in D:\Dev\GitHub\nitra\Nitra.Visualizer\MainWindow.xaml.cs:line 908
   at System.Windows.RoutedPropertyChangedEventArgs`1.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)
   at System.Windows.Controls.TreeView.OnSelectedItemChanged(RoutedPropertyChangedEventArgs`1 e)
   at System.Windows.Controls.TreeView.ChangeSelection(Object data, TreeViewItem container, Boolean selected)
   at System.Windows.Controls.TreeViewItem.Select(Boolean selected)
   at System.Windows.Controls.TreeViewItem.OnGotFocus(RoutedEventArgs e)
   at System.Windows.UIElement.IsFocused_Changed(DependencyObject d, DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
   at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
   at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
   at System.Windows.DependencyObject.SetValue(DependencyPropertyKey key, Object value)
   at System.Windows.Input.FocusManager.OnFocusedElementChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
   at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
   at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
   at System.Windows.Input.FocusManager.SetFocusedElement(DependencyObject element, IInputElement value)
   at System.Windows.Input.KeyboardNavigation.UpdateFocusedElement(DependencyObject focusTarget)
   at System.Windows.FrameworkElement.OnGotKeyboardFocus(Object sender, KeyboardFocusChangedEventArgs e)
   at System.Windows.Input.KeyboardFocusChangedEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
   at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
   at System.Windows.Input.InputManager.ProcessStagingArea()
   at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
   at System.Windows.Input.KeyboardDevice.ChangeFocus(DependencyObject focus, Int32 timestamp)
   at System.Windows.Input.KeyboardDevice.TryChangeFocus(DependencyObject newFocus, IKeyboardInputProvider keyboardInputProvider, Boolean askOld, Boolean askNew, Boolean forceToNullIfFailed)
   at System.Windows.Input.KeyboardDevice.Focus(DependencyObject focus, Boolean askOld, Boolean askNew, Boolean forceToNullIfFailed)
   at System.Windows.Input.KeyboardDevice.Focus(IInputElement element)
   at System.Windows.UIElement.Focus()
   at System.Windows.Controls.TreeViewItem.OnMouseLeftButtonDown(MouseButtonEventArgs e)
   at System.Windows.UIElement.OnMouseLeftButtonDownThunk(Object sender, MouseButtonEventArgs e)
   at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
   at System.Windows.UIElement.OnMouseDownThunk(Object sender, MouseButtonEventArgs e)
   at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
   at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
   at System.Windows.Input.InputManager.ProcessStagingArea()
   at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
   at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
   at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
   at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
   at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
   at System.Windows.Application.RunDispatcher(Object ignore)
   at System.Windows.Application.RunInternal(Window window)
   at System.Windows.Application.Run(Window window)
   at System.Windows.Application.Run()
   at Nitra.Visualizer.App.Main()
Re[11]: Liquid template language
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.08.17 21:01
Оценка:
Здравствуйте, ifle, Вы писали:

I>А есть где-то описание, как работать с Nitra.Visualizer?


Проблема в том, что его переписывал ionoy на создании новых проектов не тестировал. Я сейчас глянул, там действительно проблемы.

Сейчас попробую подправить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Liquid template language
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.08.17 21:15
Оценка:
Здравствуйте, ifle, Вы писали:

I>Создал тест, а он падает. Что-то не так видимо сделал.


Посмотрел код. Там баг связанный с тем, что не изменяется имя сюита (поле вверху диалога) и из-за этого при изменении "New suite" на что-т другое начинают лететь ислючения.

Можно создать сюит не меняя имени (т.е. оставить "New suite"), потом закрыть Визуалайзер и изменить имя получившейся директории.

Баг пока не пофиксил. Код писал не я, так что нужно время на изучение нюансов.

PS

Если хочешь, могу тебе через TeamViewer все настроить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Liquid template language
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.08.17 21:48
Оценка:
Здравствуйте, ifle, Вы писали:

I>Создал тест, а он падает. Что-то не так видимо сделал.


Подправил Nitra.Visualizer. Теперь он позволяет переименовывать сюиты при создании.

Сейчас запишу ролик демонстрирующий начальную настройку Nitra.Visualizer-а для языка.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Liquid template language
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.08.17 22:54
Оценка:
Здравствуйте, ifle, Вы писали:

I>А есть где-то описание, как работать с Nitra.Visualizer?


http://rsdn.org/wiki/Nitra.Nitra.Visualizer-New-tests
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Liquid template language
От: ifle  
Дата: 16.08.17 05:58
Оценка:
Здравствуйте, VladD2, Вы писали:

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


I>>А есть где-то описание, как работать с Nitra.Visualizer?


VD>http://rsdn.org/wiki/Nitra.Nitra.Visualizer-New-tests

Здорово. Создал тест, вроде всё нормально.
Re[3]: Liquid template language
От: ifle  
Дата: 16.08.17 06:00
Оценка:
Здравствуйте, ifle, Вы писали:

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


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


I>>>С чего начать? Что-то не нашёл как начинать свой проект на нитра.


VD>>Если что можешь стучаться мне на Скайп: vc.rsdn.ru

VD>>Это будет оперативнее.
I>Спасибо.
Постучался
Re: Liquid template language
От: ifle  
Дата: 16.08.17 07:24
Оценка:
Мне нужно разобрать следующий текст
Hello {{ name }}

Простые правила.
В этом случае получается, что весь текст как Plain. Прям как голодный регекс всё сжирает
[StartRule]
[ExplicitSpaces]
syntax Start = Content?;

syntax Content
{
    | Block = Expr;
    | Plain = Any+;
}
syntax Expr
{
    | Object = "{{" sm IdentifierBody sm "}}";
}
Re[13]: Liquid template language
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.08.17 12:21
Оценка:
Здравствуйте, ifle, Вы писали:

VD>>http://rsdn.org/wiki/Nitra.Nitra.Visualizer-New-tests

I>Здорово. Создал тест, вроде всё нормально.

Значит надо переходить к написанию грамматики, АСТ-а и маппинга.

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

Будет лучше, если ты заведешь для проекта отдельный репозиторий и дашь мне права на его изменения. Я тогда смогу помогать по мелочи.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Liquid template language
От: ifle  
Дата: 16.08.17 13:56
Оценка:
Здравствуйте, VladD2, Вы писали:

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


VD>>>http://rsdn.org/wiki/Nitra.Nitra.Visualizer-New-tests

I>>Здорово. Создал тест, вроде всё нормально.

VD>Значит надо переходить к написанию грамматики, АСТ-а и маппинга.

Начал играться грамматикой. Пока блекаоут По немногу разберусь

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

Грамматики нету, но есть пример реализации на антрл3. Но для меня это как филькина граммота.


VD>Будет лучше, если ты заведешь для проекта отдельный репозиторий и дашь мне права на его изменения. Я тогда смогу помогать по мелочи.

Я послал тебе приглашение в гитхабе быть контрибутором.

Посмотри пожалуйста на мой вопрос здесь
http://rsdn.org/forum/nemerle/6875196.1
Автор: ifle
Дата: 16.08.17


Вроде читаю про нитру, но пока нет ясности с пробелами и новыми строчками.
Например есть такой пример грамматики : "{{" Name "}}"
1. Как скзазать парсеру, что это выражение должно быть только на одной строке
т.е текст
{{
    firstName
}}

не валидный
2. Как разрешить парсеру подобный пример?
Re[15]: Liquid template language
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.08.17 16:46
Оценка:
Здравствуйте, ifle, Вы писали:

I>Начал играться грамматикой. Пока блекаоут По немногу разберусь


Если до этого с грамматиками никогда дела не имел, надо для начала разобраться в этом вопросе.

I>Грамматики нету, но есть пример реализации на антрл3. Но для меня это как филькина граммота.

I>

Это и есть грамматика, только немного в другом формате. Наша будет по проще, так как не нужен лексер и приседания с ним.

I>Я послал тебе приглашение в гитхабе быть контрибутором.


Агя, вижу. Добавился... скачал... смотрю.

Уже первую правку внес. Сделал путь (в тестах) относительным, чтобы не зависеть от конкретных путей.

Так же разбил тесты на разные солюшены. Наличие сложной структуры у тестов сделано для того чтобы можно было делать тесты эмулирующие многфайловые проекты и многопроктные солюшены. Для простых тестов надо каждый раз создавать отдельный солюшен. Иначе у тебя будут слишком много всего в оном тесте тестироваться.

Так что обновись.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Liquid template language
От: WolfHound  
Дата: 16.08.17 16:50
Оценка:
Здравствуйте, ifle, Вы писали:

I>В этом случае получается, что весь текст как Plain. Прям как голодный регекс всё сжирает

У нитры жадный неуступчивый парсер.
Any+ съест всё.
используй
(!"{{" !"}}" Any)+
в этом случае это правило не будет есть {{ и }}
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[16]: Liquid template language
От: ifle  
Дата: 16.08.17 17:36
Оценка:
Здравствуйте, VladD2, Вы писали:

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


I>>Начал играться грамматикой. Пока блекаоут По немногу разберусь


VD>Если до этого с грамматиками никогда дела не имел, надо для начала разобраться в этом вопросе.

С грамматиками раньше дело не имел. Пользовался готовыми парсерами рослин, решарпер, но сам никогда неписал


I>>Я послал тебе приглашение в гитхабе быть контрибутором.


VD>Агя, вижу. Добавился... скачал... смотрю.


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


VD>Так же разбил тесты на разные солюшены. Наличие сложной структуры у тестов сделано для того чтобы можно было делать тесты эмулирующие многфайловые проекты и многопроктные солюшены. Для простых тестов надо каждый раз создавать отдельный солюшен. Иначе у тебя будут слишком много всего в оном тесте тестироваться.


VD>Так что обновись.

Спасибо. Я только начал и пока там ничего нету. Я хочу с начала реализовать самый простой случай {{ property }} с парсингом и evaluation.
А потом буду по немногу усложнять.
Re[3]: Liquid template language
От: ifle  
Дата: 16.08.17 18:10
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


I>>В этом случае получается, что весь текст как Plain. Прям как голодный регекс всё сжирает

WH>У нитры жадный неуступчивый парсер.
WH>Any+ съест всё.
WH>используй
WH>(!"{{" !"}}" Any)+
WH>в этом случае это правило не будет есть {{ и }}

Почти regex.
Поясни пожалуста этот синтакс. Т.е я понимаю по твоему примеру, что он делает.
Но я не очень понимаю почему так, а не наоборот? (Any !"{{" !"}}" )+
Можно ли логически разбивать на AND, OR?

Почему весь текст начиная "{{" ушёл в ignored?
[StartRule]        
syntax Start = Content?;

syntax Content
{
    | Block = Part
    | Plain = (!"{{" !"}}" Any)+
}

syntax Part
{
    | Object = "{{" IdentifierBody "}}"
}




У меня полная путанница с whitespaces.

Например есть такой пример грамматики : "{{" Name "}}"
1. Как скзазать парсеру, что это выражение должно быть только на одной строке
т.е текст
{{
    firstName
}}

не валидный
2. Как разрешить парсеру подобный пример?
Re[2]: Liquid template language
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.08.17 19:10
Оценка:
Здравствуйте, ifle, Вы писали:

I>Простые правила.

I>В этом случае получается, что весь текст как Plain. Прям как голодный регекс всё сжирает

Все правильно. В Нитре парсер "жадный". Конструкция Any+ сожрет весь текст до конца файла.

Чтобы это не происходило нужно использовать предикты. Я там подправил грамматику (за основу взял АНТЛР-овскую грамматику и подправил ее чтобы использовать фичи Нитры).

Вот как это выглядит с предикатом:
https://github.com/ifle/NLiquid/blob/master/NLiquid/Liquid.nitra#L25
    syntax Content
    {
      | Atom
      | Plain = (!Atom Any)+
    }
    
    syntax Atom
    {
      | Tag
      | Output      = "{{" s sm OutputExpr s sm  "}}"
      | Assignment  = "{%" s sm "assign" s sm Name s sm "=" s sm Expr s sm Filter? "%}"
    }


Так же я добавил в грамматику следующие правила:

extend token IgnoreToken
{
| SpaceToken = Spaces;
}

token Reference = IdentifierBody;
token Name = IdentifierBody;

они должны быть в любой грамматике.
IgnoreToken — определяет содержимое пробельных правил. В последствии в них можно будет загнать комментарии и т.п.
Name и Reference нужны для связывания имен (на следующем этапе).

Ну, и я там накидал корневые правила (по АНТЛР-овской грамматике).

Тебе надо осмыслить все это и продолжить развивать грамматику.

Что касается пробельных правил. Для этого языка, как я понимаю, пробельные правила важны. Ими лучше управлять вручную. Так что я добавил атрибут [ExplicitSpaces] прямо на синтаксический модуль. Это приводит к тому, что все вложенные правила как будут неявно помечены этим атрибутом.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Liquid template language
От: ifle  
Дата: 16.08.17 20:01
Оценка:
Большое спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.