Пропустить значения, если они отсутствуют в ANTLR4 - PullRequest
0 голосов
/ 31 мая 2018

У меня есть файл, который я хочу проанализировать, и в этом файле есть значения, зависящие от других значений.например, рассмотрим этот файл

0,1,2,3,4,1,2,3,4,5,9,7,2,1,2

здесь 4 состояниячто следующие 4 числа представляют собой последовательность из 4 чисел.если это 2, то будет только 2 числа.То же самое касается 2, который находится на 3-м месте по сравнению с последним, в котором говорится, что есть 2 числа.Как написать грамматику, которая пропускает поля, если их нет в случаях, подобных этому, учитывая, что для этой последовательности существует максимальный предел, например 8 или 10.

, а другой случай зависит от значения, есть некоторые полякоторые присутствуют или нет, например,

1, 2, 3, 52, 5, 8, 6, 9 здесь рассматривают 52 состояния, что 8 присутствует, а 6 нет, поэтому серия будет 1, 2, 3, 52, 5, 8, 9 тогда как пропустить это поле и разобрать остальные.заранее спасибо.

1 Ответ

0 голосов
/ 31 мая 2018

Я также пытался проверить ввод во время синтаксического анализа и позвольте мне сказать вам следующее: это полный беспорядок и, скорее всего, он не будет работать должным образом.
Это связано с тем, что парсер должен делать именно это: parseвход.Все проверки, которые должны быть выполнены с проанализированными данными, должны выполняться внутри Слушателя или Посетителя и, следовательно, после анализа файла.

Поэтому я настоятельно советую вам следовать советам @Bart Kiers из комментариев и просто анализировать все как разделенный запятыми список и выполнять всю контекстно-зависимую проверку и группировку после анализа.

РЕДАКТИРОВАТЬ:
Вы заявили, что вам нужно иметь отдельные (посещение) методы для всех подпоследовательностей, найденных в CSV.Это может быть достигнуто с помощью пользовательской сборки системы walker- + listener поверх вашего алгоритма группировки.Поэтому вы должны проанализировать файл, затем сгруппировать все подпоследовательности и создать из него некую структуру данных.Затем вы возьмете эту структуру и передадите ее в свой пользовательский обходчик, который, в свою очередь, уведомит настраиваемых слушателей об определенных встреченных подпоследовательностях.

...