Вопросец разработчикам парсера: вот есть грамматика, повешенная на класс. Далее создаём экземпляр этого класса и вызываем Parse(). А что надо делать, чтобы перехватить ошибку неправильного входа и красиво на неё указать?
После def (len, res) = calc.TryParse("1 + -7 +6") я получаю (-1, 0) и.... чо?
1. "Нельзя просто взять и рассказать о PegGrammar без упоминания об обработке ошибок!"
2. GetMaxRollbackPosAndIds — не самое лучшее имя для такой функции.
3. Есть ли по ней документация?
4. Что делать со всеми этими IDs? Зачем их так много?
5. Оператор ..$ — выглядит клёво, но что делает — непонятно.
Здравствуйте, matumba, Вы писали:
M>Вопросец разработчикам парсера: вот есть грамматика, повешенная на класс. Далее создаём экземпляр этого класса и вызываем Parse(). А что надо делать, чтобы перехватить ошибку неправильного входа и красиво на неё указать? M>После def (len, res) = calc.TryParse("1 + -7 +6") я получаю (-1, 0) и.... чо?
$"..$col" ==> склеивает элементы col с разделителем запятая.
$<#..$(col; sep; func)#> ==> склеивает элементы col с разделителем sep, при этом обрабатывая функцией func (T -> T).
. Вопрос отнюдь не праздный или второстепенный, такие следует сразу освещать. Зато с "расширяемыми грамматиками" как раз можно было повременить — люди сначала должны освоить азы.
Кста, как ты нашёл этот форум?? В списке форумов такого нет.
_NN>$"..$col" ==> склеивает элементы col с разделителем запятая.
Клёво! Тыщу раз нужен был.
_NN>$<#..$(col; sep; func)#> ==> склеивает элементы col с разделителем sep, при этом обрабатывая функцией func (T -> T).
Ага, тоже полезно. Вместо всяких join/select; Спасибо!
Они тоже где-то в ФАКах описаны?
Здравствуйте, matumba, Вы писали:
M>Здравствуйте, _NN_, Вы писали:
_NN>>Q&A содержит полезные ссылки.
M>Спасибо, _НН_! Всё же настаиваю на том, что подобные вещи должны быть описаны прямо в статье
. Вопрос отнюдь не праздный или второстепенный, такие следует сразу освещать. Зато с "расширяемыми грамматиками" как раз можно было повременить — люди сначала должны освоить азы.
Поддерживаю, но статью писал не я.
M>Кста, как ты нашёл этот форум?? В списке форумов такого нет.
Какой форум ?
Q&A прямо наверху в заголовках. Слева от "Автор"
_NN>>$"..$col" ==> склеивает элементы col с разделителем запятая.
M>Клёво! Тыщу раз нужен был.
_NN>>$<#..$(col; sep; func)#> ==> склеивает элементы col с разделителем sep, при этом обрабатывая функцией func (T -> T).
M>Ага, тоже полезно. Вместо всяких join/select; Спасибо! M>Они тоже где-то в ФАКах описаны?
Они описаны на форуме, но поиском не удалось найти с первого раза. Попробуй поискать.
Здравствуйте, matumba, Вы писали:
M>4. Что делать со всеми этими IDs? Зачем их так много?
Ты же сам код привел — передавать в GetRuleName(). Она вернет имя правила на котором облом произошел.
M>5. Оператор ..$ — выглядит клёво, но что делает — непонятно.
Дык документацию надо читать. Там все описано.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Статью появилась раньше чем этот механизм. Надо, конечно, ее доработать.
Могу порадовать, что в Н2 обработка ошибок сделана очень круто. Там и восстановление будет, и более качественная информация, и текстовое сообщение будет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Могу порадовать, что в Н2 обработка ошибок сделана очень круто. Там и восстановление будет, и более качественная информация, и текстовое сообщение будет.
В смысле, всё это уже есть, или только частично или в планах?
Здравствуйте, VladD2, Вы писали:
M>>4. Что делать со всеми этими IDs? Зачем их так много? VD>Ты же сам код привел — передавать в GetRuleName().
Но "обламывается" же одно правило, зачем возвращается целый список?
VD>Дык документацию надо читать. Там все описано.
У Немерле прямо скажем — не самая лучшая документация. Я читал и вводные статьи, и про макросы, но это как бы "сливки" (причём с излишне техническим углублением), а вот классического описания языка (как у C#) — нет. Понятно, что бóльшая часть языка сидит в макросах, но начинающим это не интересно — им нужно знать, что уже есть и повсеместные примеры как это юзать. Можно даже обойтись без дотошных определений, но нужна краткая и всепокрывающая страница по всем возможностям — чтобы быстро находить незнакомые вещи.
Здравствуйте, VladD2, Вы писали:
M>>Но "обламывается" же одно правило, зачем возвращается целый список?
VD>Обламываться могут сразу несколько правил.
Каким образом? Ты про вложенные правила?
У меня на грамматике "калькулятор" почему-то выдалось единственное правило — num (парсинг числа). Тогда по идее должно было выдаться и sum, и start. Вот грамматика еси чо:
num : int = ['0'..'9']+;
S : void = ' '*;
start : int = S sum ![Any];
sum : int = num S ('+' S num S)*;
M>>У Немерле прямо скажем — не самая лучшая документация. VD>Какие проблемы?
Проблемы организации и наименования документов. Лексика — последнее, куда я полезу за списковым оператором.