Нисходящие синтаксические анализаторы, такие как те, которые собирает JavaCC, должны заранее знать, какой выбор выбрать, основываясь на следующем токене или нескольких следующих токенах. Токены, проверенные для принятия этого решения, являются «жетонами предпросмотра».
В идеале решение может быть принято с помощью следующего токена; если нет, то парсер должен буферизовать следующие токены, а также иметь гораздо большую таблицу решений. Не существует алгоритма, который может предсказать, сколько токенов предварительного просмотра необходимо, поэтому JavaCC требует, чтобы вы сказали это. Вот что просят вас сделать эти сообщения об ошибках.
Если два применимых варианта выбора начинаются с одного и того же токена, то этот токен не может помочь анализатору решить, какой из вариантов выбрать, поэтому ему нужно посмотреть еще как минимум еще один токен. Очевидно, что все, кроме POINT
после начальных цифр, указывает на то, что NUMBER
должен соответствовать второму выбору. Предполагая, что за number
не может следовать POINT
, тогда POINT
после начальных цифр означает, что NUMBER
. В этом случае достаточно заглянуть в 2. Однако, если за number
может последовать POINT
, то анализатору придется посмотреть дальше, чтобы принять решение.