[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 . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.