2013-04-19 1 views
1

Я использую canonical LR Method для создания таблицы анализа.Почему мы помещаем «А» в качестве символа «вперед», когда у всех есть `` `?

Рассмотрим грамматику:

s -> D C A 
s -> D a B 
a -> C 
s -> a A 

Книга, которую я читаю упоминает состояние первое закрытие как:

I(0) = [s -> .D C A , $] 
     [s -> .D a B , $] 
     [a -> .C , A] 
     [s -> .a A , $] 

В состоянии

[a -> .C , A] 

откуда делает A в item? Все предметы имеют $ как Ищите символ, а третий элемент имеет A.

Пожалуйста, объясните это.

+1

Вы искали, известна ли эта ошибка в книге? Не могли бы вы назвать название книги (и издание)? –

+0

Обратите внимание, что для третьего элемента символ _preceding_ the '->' также отличается: это 'a' not' s'. Похож на замену четвертого правила в первом. – MSalters

+0

@MSalters отредактировал этот вопрос. Это была опечатка – saplingPro

ответ

2

Товар:

[ a -> · C, A ] 

Результаты разложения элемента:

[ s -> · a A ] 

, в котором нетерминал a следует терминала A. Это означает, что уменьшение C до a может происходить в состоянии-преемнике, контекст которого равен s -> a · A; или, другими словами, когда lookahead равен A.

Все остальные элементы в состоянии вы упоминаете привести либо из исходного (неявного) пункта

[ s' -> · s $ ] 

, где нетерминальный s следуют псевдо-терминала $ (то есть, с истекшим -входный маркер), так что их образы - все $.

+0

_ ".. Это означает, что сокращение C до может происходить в состоянии преемника, контекст которого равен s -> a · A, или, другими словами, когда обрамлением является A. ». Не могли бы вы уточнить. Я не понял – saplingPro

+0

@saplingPro: Идея разбора LR заключается в том, что когда вы находитесь в состоянии с элементом с точкой в ​​конце (например, 'a -> C ·'), у вас есть левая рука ('C') в верхней части синтаксического стека, поэтому вы можете уменьшить его до правой части (' a'). Это сокращение. Взгляд используется для определения того, является ли сокращение законным. Таким образом, элемент '[a -> C ·, A]' означает, что вы можете уменьшить 'C' до' a', если lookahead равен 'A'. '[a -> · C, A]' будет переходить к '[a-> C ·, A]' после смещения 'C'. Наблюдение сохраняется, поэтому оно будет применяться, когда мы перейдем к состоянию восстановления. – rici

+0

_ «.. у вас есть левая сторона (C) в верхней части синтаксического стека, поэтому вы можете уменьшить ее до правой стороны (a)». _ В процессе создания 'a-> C. ',' C' находится справа, а 'a' - с левой стороны.Почему вы говорите обратное? – saplingPro

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

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