Я использую Marpa :: R2 :: Scanless :: G для анализа устаревшего формата текстового файла. Формат файла имеет хорошо структурированный раздел вверху, за которым следует плохо структурированный беспорядок текста и uuencoded. Последний материал может быть полностью проигнорирован, но я не могу понять, как рассказать интерфейс Marpa SLIF: все готово; не беспокойтесь о оставшемся тексте.Сбрасывать и пропускать неструктурированный текст с помощью Perl Marpa?
В очень упрощенном виде файл может выглядеть следующим образом:
("field_a_val" 1,
"field_b_vals" (1,2,3),
"field_c_pairs" ((a 1)(b 2)(c 3))
)now_stuff_i_dont_care_about a;oiwermnv;alwfja;sldfa
asdf343avadfg;okm;om;oia3
e{<|1ydblV, HYED c"L. 78b."8
U=nK Wpw: Qh(e x!,~dU...
У меня есть все данные мне нужно разобранные из верхней части, но когда он попадет в нижнем мусор, если не пытаться Я согласен с этим: Ошибка в синтаксическом анализе SLIF: анализ исчерпан, но лексемы остаются.
Я не могу понять, как создать термин, который говорит, чтобы разложить потенциально мегабайты дерьма, просто продолжайте идти в конец файла, независимо от того, что встретил текст. Не повезло с моими попытками использовать: отменить или «pause => after», хотя я, вероятно, неправильно их использую.
Для контекста у меня нет четкого понимания разбора и лексирования. Я ударил по грамматике, пока она не сработала.
@rjt_jr замечательный. Параны проверяют, что правило все еще согласовано, но не вычисляется значение для этого правила. Например, грамматика 'Text :: = 'foo' ('bar') 'baz' action => :: array; : discard ~ [\ s] + 'соответствует строке' 'foo bar baz''. Когда мы посмотрим на значение синтаксического анализа, мы найдем значения для foo и baz, но не для bar, потому что они скрыты в parens: '[" foo "," baz "]'. Для небольших вопросов, подобных этому, рассмотрите также переход на канал #marpa на irc.freenode.net (вы можете использовать этот [веб-клиент] (https://webchat.freenode.net)). – amon
Моя основная проблема заключалась в том, что у меня не было «latm => 1», и поэтому мои попытки сопоставить «все, что осталось» не срабатывали, и я не мог понять, как это сделать. –