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>Здорово. Создал тест, вроде всё нормально.

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

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

Будет лучше, если ты заведешь для проекта отдельный репозиторий и дашь мне права на его изменения. Я тогда смогу помогать по мелочи.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
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>Я послал тебе приглашение в гитхабе быть контрибутором.


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

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

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

Так что обновись.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
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 "}}"
}


http://files.rsdn.org/119343/nitra2.jpg

У меня полная путанница с 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] прямо на синтаксический модуль. Это приводит к тому, что все вложенные правила как будут неявно помечены этим атрибутом.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Liquid template language
От: ifle  
Дата: 16.08.17 20:01
Оценка:
Большое спасибо.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.