Вопрос

Позвольте сказать, что мы используем Prentricive Parser LL (1).Почему необходимо, чтобы

Первый (\ \ alpha) \ cap Первый (\ beta)=puredset $ ,

для всех $ \ alpha, \ beta $ Правая сторона альтернативных постановок I.e., Productions, связанные с тем же нетеплением.Почему это условие необходимо?

Это было полезно?

Решение

Вот интуитивное объяснение:

По сути, по существу следует из природы LL (1) Parsers: LL (1) Парсер построить таблицу PARSING LL (1). Ряды стола нетерминали, а столбцы клеммы. Мы можем подумать о разборе LL (1) на анализ LL (1) поиска таблиц при столкновении каждого символа на входе: мы смотрим на запись, определенную текущим нетермонным и входным терминалом, и применять соответствующее правило производства. Таким образом, таблица LL (1) не может содержать несколько правил производства в каждой записи, в противном случае анализатор не может решить, какое правило применить.

Если правая сторона производства $ \ alpha $ , $ \ beta $ есть пересекание Первые наборы, то у нас было бы несколько правил в одной записи в таблице LL (то есть дублирующих / конфликтующих записей) - - нетривиальное пересечение первых наборов, по существу, предотвращает нас построению таблицы Parsing LL (1).

Если вы все еще неясно, почему это условие необходимо, я предлагаю вам построить пример с пересекающимися первыми наборами на правой стороне производства, а затем попытаться вручную построить LL (1) Таблица разбора или использовать один из одного из Инструменты онлайн-визуализации ; Вы немедленно найдете конфликт.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с cs.stackexchange
scroll top