Насколько я понял, FOLLOW-Set должен сказать мне в первый возможный момент, если во входном потоке есть ошибка. Это правильно?LL-1 Parsers: Действительно ли нужен FOLLOW-Set?
Потому что в противном случае мне интересно, для чего вам это действительно нужно. Рассмотрим вы синтаксический анализатор имеет нетерминальный на вершине стека (в нашем классе мы использовали стек в качестве абстракции для LL-Парсеры)
т.е.
[TOP] X...[BOTTOM]
Х - пусть это будет не -терминал - должен быть заменен на следующем шаге, так как он находится в верхней части стека. Поэтому анализатор задает таблицу синтаксического анализа, что вывод использовать для X. Рассмотрим вход
+ b
Где +
и b
являются оба терминала.
Предположим, что X имеет ""
т. Е. Пустую строку в ее FIRST-наборе. И он имеет NO +
в своем FIRST-наборе.
Насколько я вижу в этой ситуации, анализатор может просто проверить, не находится в первом наборе X нет +
, а затем использовать вывод, который позволяет X растворяться в ""
т.е. пустой строки, поскольку она является единственной так как анализатор, возможно, может продолжить синтаксический анализ ввода без возникновения ошибки. Если входной поток недействителен, синтаксический анализатор все равно узнает его в какой-то момент позже. Я понимаю, что набор FOLLOW может помочь здесь сразу определить, может ли синтаксический разбор продолжаться без ошибки или нет.
Мой вопрос - это действительно единственная роль, которую играет FOLLOW?
Надеюсь, мой вопрос принадлежит здесь - извините, если нет. Также не стесняйтесь запрашивать разъяснения, если что-то неясно.
Вы заранее заблаговременно