Здравствуйте, Аноним, Вы писали:
А>гугление не помогло, но где-то вопрос этот подымался: А>в грамматике имею
А>.. А>(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 парсер не останавливаться
Здравствуйте, catbert, Вы писали:
C>Как вариант, добавить в definites (или его подправила) альтернативу error = anything*, которая будет ловить все ошибки.
Добавить в definites восстановление после ошибок с помощью FailureRecovery или описания ошибочных случаев в грамматике.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: как заставить PEG парсер не останавливаться
Здравствуйте, Аноним, Вы писали:
А>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 парсер не останавливаться
Здравствуйте, Аноним, Вы писали:
А>>>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 парсер не останавливаться
Здравствуйте, Аноним, Вы писали:
А>>>и куда надо вписать error = anything*?
VD>> Посмотри как он применяется в грамматике шарпа.
А>ни error ни anything в данном файле не нахожу. неверная ссылка?
Я о них и не говорил. Читай внимательнее что я написал:
Скобки отличный детектор наличия definition. Так что в него и нужно вставлять код восстановления после ошибок. Но делать это лучше с помощью атрибута FailureRecovery. Посмотри как он применяется в грамматике шарпа.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.