CNUCOM / compilers_CNU_2022

12 stars 1 forks source link

[질문] LR(0) 아이템 goto #64

Closed ghwns closed 2 years ago

ghwns commented 2 years ago

goto(I,X) = closure({[A -> ax.b] | [A-> a.Xb] in I}) 라는 규칙에서 볼 수 있듯이 [A -> a.Xb] 의 아이템에는 X와 그 앞의 '.'이 있기 때문에 [A -> aX.b] 의 클로져로 정의하고 있습니다.

그런데 만약 [A -> .aXb]와 같은 아이템처럼 X의 바로 직전에 '.'이 있는 것이 아니라 이전에 혹은 이후에 존재하는 것이라면 어떻게 프로세싱되나요?

ex) I = {[E -> E.+T], [E -> .T+F]}라는 아이템 집합이 있을 때 goto(I,+)는 첫번째 아이템에만 적용되는지 궁금합니다.

CNUCOM commented 2 years ago

I = {[E -> E.+T], [E -> .T+F]} 일 때, goto(I,+)는 {[E -> E+.T]} 입니다. 두번째 아이템은 . 다음에 T이므로 무시됩니다. (즉, '.' 다음이 아닌, 다른 곳에 있는 '+'는 의미가 전혀 없습니다.)