[Nitra] Rust raw string literals
От: pekabon  
Дата: 09.02.16 11:11
Оценка:
Привет,

А подскажите, плз, как написать правило для парсинга subj?

https://doc.rust-lang.org/reference.html#raw-string-literals
Re: [Nitra] Rust raw string literals
От: WolfHound  
Дата: 09.02.16 19:43
Оценка:
Здравствуйте, pekabon, Вы писали:

P>А подскажите, плз, как написать правило для парсинга subj?

Никак.
Вот с этим проблема.

followed by the same number of U+0023 (#) characters

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

В качестве временной заплатки можно довольно просто сделать ручной разбор токенов вот с таким интерфейсом:
ParseMyToken(text : string, startPos : int) : int
{
//ручной разбор токена

//возвращаемое значение
//в случае успешного разбора позиция следующего за токеном символа
//в случае не успешного ~(позиция облома)
}
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: [Nitra] Rust raw string literals
От: pekabon  
Дата: 10.02.16 09:39
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>В данный момент нет способа сделать зависимый от контекста парсинг.

WH>В принципе это можно сделать. Но нужно перетряхнуть весь парсер.

жаль, выходит плюсы тоже не попарсим.

WH>В качестве временной заплатки можно довольно просто сделать ручной разбор токенов вот с таким интерфейсом:


Было бы здорово, даже не в качестве временной заплатки, а в качестве фолбека. Все равно абсолютно все кейсы вряд ли удастся по крыть.
В antlr такая возможность есть, вроде бы.
Re[2]: [Nitra] Rust raw string literals
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.02.16 09:45
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>В качестве временной заплатки можно довольно просто сделать ручной разбор токенов вот с таким интерфейсом:

WH>
WH>ParseMyToken(text : string, startPos : int) : int
WH>{
WH>//ручной разбор токена

WH>//возвращаемое значение
WH>//в случае успешного разбора позиция следующего за токеном символа
WH>//в случае не успешного ~(позиция облома)
WH>}
WH>


И как это будет помогать обрабатывать контекстные данные в условиях откатного парсера с мемоизацией?

Надо аналог вот этого реализовывать.

Сейчас можно тупо вбить 10 правил для фиксированной длинны, что на практике будет достаточно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: [Nitra] Rust raw string literals
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.02.16 09:53
Оценка:
Здравствуйте, pekabon, Вы писали:

P>А подскажите, плз, как написать правило для парсинга subj?

P>https://doc.rust-lang.org/reference.html#raw-string-literals

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

Но для практического применения будет достаточно описать 5-10 правил парсящих литералы с заданной длинной последовательностей '#':
syntax RawStringLiteral1 = Open (!Close Any)* Close
{
  regex Sharps = "#";
  regex Open   = "r" Sharps '\"';
  regex Close  = '\"' Sharps;
} 

syntax RawStringLiteral2 = Open (!Close Any)* Close
{
  regex Sharps = "##";
  regex Open   = "r" Sharps '\"';
  regex Close  = '\"' Sharps;
} 

syntax RawStringLiteral3 = Open (!Close Any)* Close
{
  regex Sharps = "###";
  regex Open   = "r" Sharps '\"';
  regex Close  = '\"' Sharps;
} 

// ... размножаем нужное количество раз
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 10.02.2016 12:31 VladD2 . Предыдущая версия .
Re[2]: [Nitra] Rust raw string literals
От: pekabon  
Дата: 10.02.16 09:57
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Но для практического применения будет достаточно описать 5-10 правил парсящих литералы с заданной длинной последовательностей '#':


Спасибо за совет, пока так и сделаем
Re[3]: [Nitra] Rust raw string literals
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.02.16 12:30
Оценка:
Здравствуйте, pekabon, Вы писали:

P>Спасибо за совет, пока так и сделаем


Если не секрет, чем занимавшийся? Решил сделать поддержку Rust-а?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: [Nitra] Rust raw string literals
От: WolfHound  
Дата: 10.02.16 12:33
Оценка:
Здравствуйте, pekabon, Вы писали:

P>жаль, выходит плюсы тоже не попарсим.

Почему?
Я не помню такие правила в плюсах.

P>Было бы здорово, даже не в качестве временной заплатки, а в качестве фолбека. Все равно абсолютно все кейсы вряд ли удастся по крыть.

Может быть.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: [Nitra] Rust raw string literals
От: WolfHound  
Дата: 10.02.16 12:33
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>И как это будет помогать обрабатывать контекстные данные в условиях откатного парсера с мемоизацией?

Примерно так же как регексы.

VD>Надо аналог вот этого реализовывать.

Ещё раз. Это всё я придумал за долго до того, как ты показал мне эту статью.
Малой кровью это не сделать. Нужно переписать весь парсер.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[4]: [Nitra] Rust raw string literals
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.02.16 12:35
Оценка: 8 (1)
Здравствуйте, WolfHound, Вы писали:

WH>Я не помню такие правила в плюсах.


В 11-ом появились.

P>>Было бы здорово, даже не в качестве временной заплатки, а в качестве фолбека. Все равно абсолютно все кейсы вряд ли удастся по крыть.

WH>Может быть.

Это надо в откаты и мемоизацию встраивать. А это уже не сильно сложнее нежели нормальные параметризованные правила с семантическими предикатами. Думаю, если ограничиться доступом к литералам это не сложно будет реализовать. За одно сможем отступные грамматики парсить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: [Nitra] Rust raw string literals
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.02.16 12:41
Оценка:
Здравствуйте, WolfHound, Вы писали:

VD>>И как это будет помогать обрабатывать контекстные данные в условиях откатного парсера с мемоизацией?

WH>Примерно так же как регексы.

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

Ну, предположим ты сделал рукопашный парсинг "регекса". ОК. Но ведь надо из одного такого рукопашного взять информацию о числе спарсившихся '#' и передать во второй. А это нужно делать в рамках syntax-руля.

WH>Малой кровью это не сделать. Нужно переписать весь парсер.


Я не понимаю причин этого. Нам нужно:
1. Передавать в правила параметры (в том числе out).
2. Запоминать значения out-параметров внутри мемоизации.
3. Реализовать предикаты которые будут действовать по raw-AST-у (а не по синтаксису).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: [Nitra] Rust raw string literals
От: WolfHound  
Дата: 10.02.16 13:14
Оценка:
Здравствуйте, VladD2, Вы писали:

WH>>Я не помню такие правила в плюсах.

VD>В 11-ом появились.
А конкретно?
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[5]: [Nitra] Rust raw string literals
От: WolfHound  
Дата: 10.02.16 13:14
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Не прокатит.

Прокатит. Просто нужно весь литерал отпарсить руками.

WH>>Малой кровью это не сделать. Нужно переписать весь парсер.

VD>Я не понимаю причин этого. Нам нужно:
VD>1. Передавать в правила параметры (в том числе out).
VD>2. Запоминать значения out-параметров внутри мемоизации.
VD>3. Реализовать предикаты которые будут действовать по raw-AST-у (а не по синтаксису).
Вот тут вылезает куча деталей реализации плюс куча плясок вокруг восстановления после ошибок.
Это всё только звучит просто. А на практике куча работы.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[6]: [Nitra] Rust raw string literals
От: pekabon  
Дата: 10.02.16 13:40
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


WH>>>Я не помню такие правила в плюсах.

VD>>В 11-ом появились.
WH>А конкретно?

prefix(optional) R "delimiter( raw_characters )delimiter"    (6)    (since C++11)

const char* s1 = R"foo(
Hello
World
)foo";


http://en.cppreference.com/w/cpp/language/string_literal
Отредактировано 29.03.2016 18:03 VladD2 . Предыдущая версия .
Re[4]: [Nitra] Rust raw string literals
От: pekabon  
Дата: 10.02.16 14:17
Оценка:
Здравствуйте, VladD2, Вы писали:

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


P>>Спасибо за совет, пока так и сделаем


VD>Если не секрет, чем занимавшийся? Решил сделать поддержку Rust-а?


Да, решили изучить пару новых для себя технологий на примере поддержки rust
Re[7]: [Nitra] Rust raw string literals
От: pekabon  
Дата: 10.02.16 14:26
Оценка: +1
Здравствуйте, pekabon, Вы писали:

Кстати, в случае С++ костыль Влада (5-10 правил парсящих литералы с разными делимитерами) не покатит
Re[5]: [Nitra] Rust raw string literals
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.02.16 15:02
Оценка: +1
Здравствуйте, pekabon, Вы писали:

P>Да, решили изучить пару новых для себя технологий на примере поддержки rust


Тогда обращайся, если что. Или тут, или по скайпу (vc.rsdn.ru). Нам примеры использования и сторонники очень нужны.

Проект в открытом доступе?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 11.02.2016 12:46 VladD2 . Предыдущая версия .
Re[6]: [Nitra] Rust raw string literals
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.02.16 18:53
Оценка:
Здравствуйте, WolfHound, Вы писали:

VD>>В 11-ом появились.

WH>А конкретно?

Чем я лучше Гугля?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: [Nitra] Rust raw string literals
От: pekabon  
Дата: 11.02.16 09:33
Оценка:
Здравствуйте, VladD2, Вы писали:



VD>Проект в открытом доступе?


Пока нет, будет что открыть — откроем
Re[7]: [Nitra] Rust raw string literals
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.02.16 15:20
Оценка:
Здравствуйте, pekabon, Вы писали:

P>Пока нет, будет что открыть — откроем


Дык, если сразу открыть, то и вероятность того что что–то получится выше будет.

И мы бы помогать смогли бы, и помощники найтись могли бы.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 11.02.2016 20:43 VladD2 . Предыдущая версия .
Re[8]: [Nitra] Rust raw string literals
От: pekabon  
Дата: 29.03.16 11:32
Оценка: 156 (1)
Здравствуйте, VladD2, Вы писали:

P>>Пока нет, будет что открыть — откроем

VD>Дык, если сразу открыть, то и вероятность того что что–то получится выше будет.
VD>И мы бы помогать смогли бы, и помощники найтись могли бы.

Привет,

У нас кое-что уже нарисовалось.
Делаем интеграцию на базе VisualRust, репа здесь.

Пока сделали автоматическую конвертацию бизоновской грамматики в найтровскую, работаем над инкрементальным обновлением.

В вижуалайзере уже что-то видно:
Re[9]: [Nitra] Rust raw string literals
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.03.16 18:02
Оценка:
Здравствуйте, pekabon, Вы писали:

P>Делаем интеграцию на базе VisualRust, репа здесь.


P>Пока сделали автоматическую конвертацию бизоновской грамматики в найтровскую, работаем над инкрементальным обновлением.


Добавил ссылку на ваши парсерв в Вики на страничку Languages powered by Nitra
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: [Nitra] Rust raw string literals
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.03.16 18:02
Оценка: 9 (2)
Здравствуйте, pekabon, Вы писали:

P>Пока сделали автоматическую конвертацию бизоновской грамматики в найтровскую,


Может лучше для этого конвертера создать отдельный репозиторий? Он может многим пригладиться.

P>работаем над инкрементальным обновлением.


Обновлением чего?

P>В вижуалайзере уже что-то видно:

P>Image: rust-vis.png

Поздравляю! Но парсер это пол дела. Надо еще, как минимум, типизацию сделать.

Не стесняйтесь обращаться. Поможем чем сможем.

ЗЫ

Я, тем временем, работаю над новой, клиент-серверной, версией движка IDE. Он будет пахать в другом процессе, а клиент будет очень простым и его можно будет подключить к любым IDE (в том числе на Линукс и Макоси). В перспективе можно будет, на его основе, и Веб-морду сделать. Визуалайзер будет тоже через него работать, так что везде будет использоваться единый интерфейс. Сами интеграции станут очень тонкими обертками содержащими исключительно презентационную логику.

Думаю, в течении пары недель восстановить функциональность визуалайзера на новом движке. Далее сделаем безрешарперный плагин на основе клиент-серверной версии.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 29.03.2016 21:21 VladD2 . Предыдущая версия .
Re[10]: [Nitra] Rust raw string literals
От: pekabon  
Дата: 31.03.16 08:31
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Может лучше для этого конвертера создать отдельный репозиторий? Он может многим пригладиться.


А сделаем.

P>>работаем над инкрементальным обновлением.

VD>Обновлением чего?

Обновлением грамматики. С одной стороны исходник на бизоне будет обновляться, с другой — мы будем вносить в грамматику всякие nl, outline и т.д. А поскольку объем большой, руками это сливать не хочется.
Плюс нам еще сам конвертер предстоит покрутить, чтобы причесать результат. Например, избавиться от фейковых правил, которыми в бизоне принято опциональность делать.

VD>Я, тем временем, работаю над новой, клиент-серверной, версией движка IDE. Он будет пахать в другом процессе, а клиент будет очень простым и его можно будет подключить к любым IDE (в том числе на Линукс и Макоси). В перспективе можно будет, на его основе, и Веб-морду сделать. Визуалайзер будет тоже через него работать, так что везде будет использоваться единый интерфейс. Сами интеграции станут очень тонкими обертками содержащими исключительно презентационную логику.


Звучит классно.
Re[11]: [Nitra] Rust raw string literals
От: VladD2 Российская Империя www.nemerle.org
Дата: 31.03.16 08:44
Оценка:
Здравствуйте, pekabon, Вы писали:

P>Обновлением грамматики. С одной стороны исходник на бизоне будет обновляться, с другой — мы будем вносить в грамматику всякие nl, outline и т.д. А поскольку объем большой, руками это сливать не хочется.


А их грамматика часто сильно меняется?

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


Круто, конечно. Я бы, наверно, один раз конвертнул и дальше уже руками правил. Не думаю, что там будут значительные изменения. Ну, а на крайняк сгенерировать новую версию и дифнуть/мержнуть.

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

ЗЫ

А что у вас с типизацией? В списке фич есть переход к определению и комплишен. Но судя по подсветке вы наши символы не используете.

Намерены использовать или какие-то сложности?

Только используя типизацию на АСТ-е с нашими символами можно получить от Найтры максимум.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: [Nitra] Rust raw string literals
От: pekabon  
Дата: 31.03.16 09:43
Оценка:
Здравствуйте, VladD2, Вы писали:

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


P>>Обновлением грамматики. С одной стороны исходник на бизоне будет обновляться, с другой — мы будем вносить в грамматику всякие nl, outline и т.д. А поскольку объем большой, руками это сливать не хочется.


VD>А их грамматика часто сильно меняется?


За 2015 год менялась более 10 раз

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


VD>Круто, конечно. Я бы, наверно, один раз конвертнул и дальше уже руками правил. Не думаю, что там будут значительные изменения. Ну, а на крайняк сгенерировать новую версию и дифнуть/мержнуть.

VD>В прочем, если у вас получится и мерджилка, то вообще снимаю шляпу!

VD>ЗЫ


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


VD>Намерены использовать или какие-то сложности?


Намерены
Re[13]: [Nitra] Rust raw string literals
От: s22  
Дата: 31.03.16 17:16
Оценка:
Здравствуйте, pekabon, Вы писали:
Компиляцию в webassembler?
Re[14]: [Nitra] Rust raw string literals
От: pekabon  
Дата: 01.04.16 09:40
Оценка:
Здравствуйте, s22, Вы писали:

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

s22>Компиляцию в webassembler?

не планируем. И зачем? лучше llvm в webassembly
Re[15]: [Nitra] Rust raw string literals
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.04.16 10:19
Оценка:
Здравствуйте, pekabon, Вы писали:

P>не планируем. И зачем? лучше llvm в webassembly


Лучше сменяемые бэкэнды для разных платформ.

Сомнительно, что llvm в webassembly прокатит.

Но все это дележ шкуры не убитого медведя. Для начала нужно типизацию сделать. Это уже даст возможность использовать фичи IDE.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.