2016-08-16 4 views
0

У меня есть некоторая проблема, чтобы понять, как смотреть вперед в LR (1). Я уже нашел этот вопрос о той же проблеме LR(1) - Items, Look Ahead, но это не помогает мне.Посмотрите вперед в LR (1) разбор

S'->.S,$ 
S->.L=R,$ 
S->.R,$ 
L->.*R,=/$ 
L->.id,=/$ 
R->.L,$ 

Я понимаю предпросмотр из S»и S производства, а не L и R один ... вы можете мне помочь, пожалуйста? заранее спасибо.

ответ

1

Для действительно приятного лечения парсинга LR/SLR/LALR я бы рекомендовал The Dragon Book.

Построение элементов LR (1) в разделе 4.7.2, процедура CLOSURE.

Для примера, рассмотрите выполнение "расширение" (в CLOSURE) в (1) пункта S->.L=R,$ LR: результат являются LR (1) статьи

L->.*R,= 
L->.id,= 

В lookaheads каждый терминальный символ в FIRST("=R$"), то есть все, что следует за нетерминалом перед точкой, плюс взгляд, в этом вопросе новые позиции выглядят как =.

Далее рассмотрите «расширение» S->.R,$. Опять же, новички в новых элементах - все символы терминала в FIRST("$"): ничего не следует за R, следовательно, только просмотр. Это создает элемент

R ->.L,$ 

Дальнейшее расширение этого пункта, используя в качестве lookaheads все нетерминалы в FIRST("$") дает нам

L->.*R,$ 
L->.id,$ 

Таким образом, вы можете увидеть, что L->.*R,=/$ в вас оригинальный пример просто сокращенная обозначение для двух отдельных предметов, L->.*R,= и L->.*R,$, каждое из которых получено по отдельным цепям расширения.

+0

Большое спасибо! Теперь все ясно!! : D – JEricaM

 Смежные вопросы

  • Нет связанных вопросов^_^