как заставить PEG парсер не останавливаться
От: Аноним  
Дата: 29.09.12 20:03
Оценка:
гугление не помогло, но где-то вопрос этот подымался:
в грамматике имею

..
(signs)? s identifier (s definites)?
..

и вылазит проблема: когда в definites ошибка парсер игнорит полный разбор, что не есть правильно.
и как заставить его пережевать всю строку? до конца
Re: как заставить PEG парсер не останавливаться
От: catbert  
Дата: 30.09.12 06:01
Оценка:
Здравствуйте, Аноним, Вы писали:

А>гугление не помогло, но где-то вопрос этот подымался:

А>в грамматике имею

А>..

А>(signs)? s identifier (s definites)?
А>..

А>и вылазит проблема: когда в definites ошибка парсер игнорит полный разбор, что не есть правильно.

А>и как заставить его пережевать всю строку? до конца

Как вариант, добавить в definites (или его подправила) альтернативу error = anything*, которая будет ловить все ошибки.
Re[2]: как заставить PEG парсер не останавливаться
От: Аноним  
Дата: 30.09.12 17:31
Оценка:
А>>..
А>>(signs)? s identifier (s definites)?
А>>..

А>>и вылазит проблема: когда в definites ошибка парсер игнорит полный разбор, что не есть правильно.

А>>и как заставить его пережевать всю строку? до конца

C>Как вариант, добавить в definites (или его подправила) альтернативу error = anything*, которая будет ловить все ошибки.


Хм.. вот имею

definition : Any = "{"s (statlink ","s)* statlink? "}"s;

и куда надо вписать error = anything*?
Re[2]: как заставить PEG парсер не останавливаться
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.09.12 22:56
Оценка:
Здравствуйте, catbert, Вы писали:

C>Как вариант, добавить в definites (или его подправила) альтернативу error = anything*, которая будет ловить все ошибки.


Добавить в definites восстановление после ошибок с помощью FailureRecovery или описания ошибочных случаев в грамматике.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: как заставить PEG парсер не останавливаться
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.09.12 23:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А>definition : Any = "{"s (statlink ","s)* statlink? "}"s;


Начнем с того, что это (скорее всего) ошибочная грамматика, так как она пропустит два statlink без запятой. Если все понял правильное, то правильная будет выглядеть как-то так:
definition : Any = "{"s (statlink (","s statlink)*)? "}"s;


А>и куда надо вписать error = anything*?


Скобки отличный детектор наличия definition. Так что в него и нужно вставлять код восстановления после ошибок. Но делать это лучше с помощью атрибута FailureRecovery. Посмотри как он применяется в грамматике шарпа.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: как заставить PEG парсер не останавливаться
От: Аноним  
Дата: 01.10.12 19:23
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Аноним, Вы писали:


А>>definition : Any = "{"s (statlink ","s)* statlink? "}"s;


VD>Начнем с того, что это (скорее всего) ошибочная грамматика, так как она пропустит два statlink без запятой.


Как такое возможно?
Re[5]: как заставить PEG парсер не останавливаться
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.10.12 19:28
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>>definition : Any = "{"s (statlink ","s)* statlink? "}"s;


VD>>Начнем с того, что это (скорее всего) ошибочная грамматика, так как она пропустит два statlink без запятой.


А>Как такое возможно?


Что-то я вчера ступил. Поздновато было видимо. Мне показалось, что ","s необязательный. Вроде все ОК. Эта грамматика просто допускает запятую в конце перечисления. Так что если это не проблема, то все ОК.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: как заставить PEG парсер не останавливаться
От: Аноним  
Дата: 03.10.12 14:25
Оценка:
А>>и куда надо вписать error = anything*?

VD> Посмотри как он применяется в грамматике шарпа.


ни error ни anything в данном файле не нахожу. неверная ссылка?
Re[5]: как заставить PEG парсер не останавливаться
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.10.12 14:31
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>>и куда надо вписать error = anything*?


VD>> Посмотри как он применяется в грамматике шарпа.


А>ни error ни anything в данном файле не нахожу. неверная ссылка?


Я о них и не говорил. Читай внимательнее что я написал:

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

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