40
LR Parsing 8 LR 제제 제제 컴컴컴컴 컴컴 컴컴컴컴 컴컴

제 8 장 LR 구문 분석

  • Upload
    ciel

  • View
    167

  • Download
    17

Embed Size (px)

DESCRIPTION

컴파일러 입문. 제 8 장 LR 구문 분석. 8.1 LR 파서 8.2 LR(0) 아이템의 집합 8.3 SLR 파싱 테이블 구성 방법 8.4 CLR 파싱 테이블 구성 방법 8.5 LALR 파싱 테이블 구성 방법 8.6 모호한 문법 8.7 LR 파싱 테이블의 구현 8.8 구문 분석기의 작성. 8.1 LR 파서. LR 구문분석 정의 결정적인 bottom-up 방법으로 LR 는 입력 스트링을 왼쪽에서 - PowerPoint PPT Presentation

Citation preview

Page 1: 제   8   장 LR   구문  분석

LR Parsing

제 8 장LR 구문 분석

컴파일러 입문컴파일러 입문

Page 2: 제   8   장 LR   구문  분석

LR Parsing2

8.1 LR 파서8.2 LR(0) 아이템의 집합8.3 SLR 파싱 테이블 구성 방법8.4 CLR 파싱 테이블 구성 방법8.5 LALR 파싱 테이블 구성 방법8.6 모호한 문법8.7 LR 파싱 테이블의 구현8.8 구문 분석기의 작성

Page 3: 제   8   장 LR   구문  분석

LR Parsing3

8.1 LR 8.1 LR 파서파서 LR 구문분석 정의

결정적인 bottom-up 방법으로 LR 는 입력 스트링을 왼쪽에서 오른쪽으로 읽어가며 (Left to right scanner) 출력으로 우파스 (Right parse) 를 생성하기 때문에 붙여진 이름이다 .

Page 4: 제   8   장 LR   구문  분석

LR Parsing4

LR 파서의 특징 ① LR 은 모호하지 않은 CFG 문법으로 쓰여진 대부분의 프로그래밍 언어 인식 ② LL 파서보다 일반적인 사용 ③ 에러가 발생하면 즉시 에러를 찾을 수 있음

Page 5: 제   8   장 LR   구문  분석

LR Parsing5

LR 파서의 구성 LR 방법으로 주어진 스트링을 구문 분석하는 구문

분석기를 말한다 .

Sn

...구문분석기 파싱테이블

a1 a2 … an$

출력

입력

스택스택 : S0X1S1 … XmSm (Si: 상태 , XiV : 문법기호 )

버퍼 : a1a2…an$

Page 6: 제   8   장 LR   구문  분석

LR Parsing6

Parser

형상 (S0X1S1XmSm, aiai+1…an$)

shift ACTION[Sm,ai] = shift S ( 다음상태 )

(S0X1S1…XmSmaiS, ai+1…an$)

입력심벌을 스택에 넣고 다음 상태를 S 로 만들기 위해 S 도 역시 스택

에 push 한다는 의미 reduce

ACTION[Sm, ai] = reduce A | | = r 2*r 만큼 pop off(S0X1…Sm-rAS, ai+1…an$) 새로운 S GoTo(Sn-r,A) = S

Page 7: 제   8   장 LR   구문  분석

LR Parsing7

Accept

ACTION[Sm, ai] = acceptSm상태에서 입력 심벌 ai 를 본 행동이 accept 라면 주어진

스트링이 올바른 스트링이라는 의미이며 파싱을 끝낸다 .

Error

ACTION[Sm, ai] = errorSm상태에서 입력 심벌 ai 를 본 행동이 error 라면 입력 스트링이 틀린 스트링이라는 의미이며 그 에 따른 작업을 하게 된다 . 일반적으로 오류복구 루틴을 불러 오류를 처리한다 .

Page 8: 제   8   장 LR   구문  분석

LR Parsing8

예제1. LISTLIST, ELEMENT2. LISTELEMENT3. ELEMENTa

파싱테이블 :

파싱 과정 :

(0 , a, a$)(0 a 3 , , a$)(0 ELEMENT 2 , , a$)(0 LIST 1 , , a$)(0 LIST 1, 4 , a$)(0 LIST 1, 4 a 3 , $)(0 LIST 1, 4 ELEMENT 5 , $)(0 LIST 1 , $)

심벌상태

a , $ LIST ELEMENT

0 s3 1 21 s4 acc2 r2 r23 r3 r34 s3 55 r1 r1

r3 GOTO2

r2 GOTO1

s4

r3 GOTO5

s3

r1 GOTO1

s3

accept

Page 9: 제   8   장 LR   구문  분석

LR Parsing9

PParser 제작 시스템제작 시스템Grammar

<BNF Notations>PGS Parsing Table

ParsingTableInput Output

DriverRoutine

Page 10: 제   8   장 LR   구문  분석

LR Parsing10

LR 파싱테이블 생성 방법 Simple LR(SLR) - LR(0) items, FOLLOW Canonical LR(CLR) - LR(1) items Lookahead LR(LALR) - LR(1) items LR(0), Lookahead

CLRLALR

SLR

Page 11: 제   8   장 LR   구문  분석

LR Parsing11

8.2 LR(0) 8.2 LR(0) 아이템의 집합아이템의 집합 정의

LR(0) 아이템은 생성 규칙의 오른쪽에 점 심벌을 가진 생성 규칙이다 .

예제 생성 규칙의 형태가 AXYZ 일 때 , [A.XYZ], [AX.YZ], [AXY.Z], 그리고 [AXYZ.] 등은 모두 LR(0) 아이템이다 .

Page 12: 제   8   장 LR   구문  분석

LR Parsing12

문법 G=(VN,VT,P,S) 일 때 , G 의 추가된 문법 G’=(VN∪ {S’},VT,P∪ {S’→S},S’) 이다 .

여기서 S’ 이 새로운 시작 심벌이며 새로운 생성 규칙 S’→S 를 추가된 생성 규칙 (augmented

production) 이라 부른다 .

LR(0) 아이템에서 점 심벌 다음에 심벌이 있으면 이 심벌을 마크 심벌 (mark symbol) 이라 부른다 . 예 ) LR(0) 아이템 [A→ X.YZ] 에서 마크 심벌은 Y 이고 [A→ XYZ.] 은 마크 심벌을 갖고 있지 않다 .

Page 13: 제   8   장 LR   구문  분석

LR Parsing13

LR(0) 아이템 [A→α.β ] 에서 , α≠ε 이면 kernel 아이템이라 하고 [A→.α] 인 경우처럼 점 심벌이 처음에 있는 아이템을 closure 아이템이라 한다 . 그러나 S’ 이 새로운 시작 심벌일 때 , 아이템 [S’ →.S] 는 kernel 아이템이 된다 . 또한 [A → α.] 와 같이 생성 규칙 끝에 점 심벌이 있는 아이템을 reduce 아이템이라 말한다 .

Page 14: 제   8   장 LR   구문  분석

LR Parsing14

LR(0) 아이템 [A→α.β ] 의 의미

① 이제까지 α 로부터 유도 될 수 있는 입력 스트링을 봄 ② 앞으로 β 로 부터 유도될 수 있는 스트링을 본다면 생성규칙 A→αβ 로 reduce 할 수 있다 .

Page 15: 제   8   장 LR   구문  분석

LR Parsing15

Viable prefix 는 S ⇒ αAω ⇒ αβ1β2ω 의 유도과정이 있을 때 αβ1이 된다 .

만일 S ⇒ αAω ⇒ αβ1β2ω 의 유도과정이 존재하고 ω∈ VT이면 , viable, prefix αβ1에 관해 LR(0) 아이템 [A→β1β2] 를 vaild 하다고 말한다 .

I 를 정의된 문법의 아이템 집합이라 하면 , I 의 CLOSURE 는 다음과 같이 정의된다 .

CLOSURE(I)=I∪{[B→. ]|[A →α.Bβ] ∈CLOSURE(I),B → ∈P}

*

*

*

.

Page 16: 제   8   장 LR   구문  분석

LR Parsing16

예 ) 다음과 같은 문법이 주어졌을 때 , CLOSURE 를 구해보자 .

S’→ G G → E=E | f E → E+T | T T → T*f | f

CLOSURE({[S’→.G ]}) = {[S’→.G], [G→.E=E], [G→.f], [E→.E+T], [E→.T],[T→.T*f],[T→.f]} CLOSURE({[E→E.+T]})={[E→E.+T]}.

Page 17: 제   8   장 LR   구문  분석

LR Parsing17

마크 심벌을 파싱하여 이동한 다음 상태를 구하는 GOTO 함수의 정의는 다음과 같다 . 여기서 , I 는

아이템의 집합이고 X∈V 이다 . GOTO(I,X) = CLOSURE({[A →αX.β]| [A →α.Xβ] ∈I})

Page 18: 제   8   장 LR   구문  분석

LR Parsing18

예 ) 앞의 예에서 주어진 문법에 대하여 GOTO 함수를 취하면 다음과 같다 .

(1) I = {[G→E.=E],[E→ E.+T]} 일 때 , GOTO(I,+) = CLOSURE({[E→E+.T]}) = {[E→E+.T],[T→.T*F],[T→.f]}

(2) I = {[E→.T],[T→.T*f],[T→.f]} 일 때 , GOTO(I,T) = CLOSURE({[E→T.],[T→T.*f]}) = {[E→T.],[T→T.*f]}

Page 19: 제   8   장 LR   구문  분석

LR Parsing19

추가된 생성규칙 (S’→S) 에서 차례로 CLOSURE 함수와 GOTO 함수를 적용하여 LR(0) 아이템 집합을

구할 수 있고 이 원소로 갖는 집합을 canonical collection 이라 부르고 C0 으로 표기

C0={CLOSURE({[S’→.S]})} ∪ {GOTO(I, X) |

I∈C0, X∈V}

Page 20: 제   8   장 LR   구문  분석

LR Parsing20

8.3 SLR8.3 SLR 파싱 테이블 구성 방법파싱 테이블 구성 방법

SLR 이란 Simple LR C0와 FOLLOW 정보를 이용하여 파싱 테이블을 구성하는 방법

C0 = { I0, I1, , In }

Page 21: 제   8   장 LR   구문  분석

LR Parsing21

SLR 파싱 테이블을 작성하는 방법

만일 LR(0) 아이템 [A.a] 가 상태 i 에 있고 a 가 terminal 심벌 이면 shift 행동이므로 , i 상태에서 마크 심벌 a 를 보고 j 상태로

가는 GOTO 함수가 존재한다면 , ACTION 테이블의 상태 i 와 심벌 a가

만나는 곳에 상태 번호 j 를 적는다 . if [A.a]Ii and GOTO(Ii, a) = Ij then

M[i, a]:= shift j

아이템 [Aα.] 가 상태 i 에 있다면 , reduce 행동이므로 nonterminal A 의 FOLLOW 를 구하여 ACTION 테이블의 상태 i 와 FOLLOW 심벌이 만나는 곳에 reduce 생성 규칙 번호를 적는다 .

if[A.]Ii thenfor each aFOLLOW(A) do M[i,a]:=reduce A.

Page 22: 제   8   장 LR   구문  분석

LR Parsing22

상태 i 에 LR(0) 아이템 [S’S.] 가 있다면 accept 행동이므로 ACTION 테이블의 상태 i 와 $ 심벌이 만나는 곳에 accept 를

적는다 . if [S’S.]Ii then M[i, $] := accept

만일 LR(0) 아이템 [A.B] 가 상태 I 에 있고 B 가 nonterminal 심벌일 때 , 상태 I 에서 마크 심벌 B 를 보고 상태 j 로 가는 GOT

O 함수가 존재한다면 GOTO 테이블의 상태 I 와 nonterminal 심벌 B

가 만나는 곳에 상태 번호 j 를 적는다 .

if[A.B]Ii and GOTO(Ii, B) = Ij then

M[i, B] := j.

Page 23: 제   8   장 LR   구문  분석

LR Parsing23

이렇게 해서 정의되지 않은 파싱 테이블의 엔트리는 모두 error 가 되며 첨가된 생성 규칙의 LR(0) 아이템 [S’S] 를 포함하는 상태 가 초기 상태가 된다 .

예제1. E E + T 2. E T3. T T * F 4. T F5. F (E) 6. F id

(1) 첨가된 생성 규칙 : 0. S’ E 1. E E + T 2. E T 3. T T * F 4. T F 5. F (E)

6. F id

Page 24: 제   8   장 LR   구문  분석

LR Parsing24

[S’ .E][E.E+T][E.T][T.T*F][T.F][F.(E)[F.id]

[S’E.][EE.+T]

[ET.][TT.*F]

[TF.]

[EE+.T][T.T*F][T.F][F.(E)][F.id]

[EE+T.][TT.*F]

[TT*.F][F.(E)][F.id]

[TT*F.]

[F (.E)[E .E+T][E .T][T .T*F][T .F][F .(E)][F .id]

[Fid.]

[F(E.)][EE.+T] [F(E).

I0

I11I8

I5

I4

I7I3

I2

I9I6I1

I10

E + T

*

+

*

F

((

E)(

(

idid

id

F

T

T

F

(2) C0 및 GOTO 그래프

Page 25: 제   8   장 LR   구문  분석

LR Parsing25

(3) FOLLOW 의 계산 FOLLOW(E) = {$, +, )}

FOLLOW(T) = {*, +, ), $} FOLLOW(F) = {*, +, ), $}

(4) 파싱 테이블ACTION 테이블 GOTO 테이블상

태 id + * ( ) $ E T F0 s5 s4 1 2 31 s6 acc2 r2 s7 r2 r23 r4 r4 r4 r44 s5 s4 8 2 35 r6 r6 r6 r66 s5 s4 9 37 s5 s4 108 s6 s119 r1 s7 r1 r1

10 r3 r3 r3 r311 r5 r5 r5 r5

Page 26: 제   8   장 LR   구문  분석

LR Parsing26

(5) 스트링 a*a+a 를 위한 구문 분석 과정단계 스 택 입력 심벌 구문 분석 내용 출력

0 0 a*a+a$ shift 51 0a5 *a+a$ reduce 6 62 0F *a+a$ GOTO 33 0F3 *a+a$ reduce 4 44 0T *a+a$ GOTO 25 0T2 *a+a$ shift 76 0T2*7 a+a$ shift 57 0T2*7a5 +a$ reduce 6 68 0T2*7F +a$ GOTO 109 0T2*7F10 +a$ reduce 3 3

10 0T +a$ GOTO 211 0T2 +a$ reduce 2 212 0E +a$ GOTO 113 0E1 +a$ shift 614 0E1+6 a$ shift 515 0E1+6a5 $ reduce 6 616 0E1+6F $ GOTO 317 0E1+6F3 $ reduce 4 418 0E1+6T $ GOTO 919 0E1+6T9 $ reduce 1 120 0E $ GOTO 121 0E1 $ accept

Page 27: 제   8   장 LR   구문  분석

LR Parsing27

8.4 CLR 8.4 CLR 파싱 테이블 구성 방법파싱 테이블 구성 방법 정의

LR(0) 아이템에 lookahead 정보를 첨가 한 것이 LR(1) 아이템 이라고 한다 .

LR(1) 아이템은 [A., a] 의 형태를 이루며 여기서 AP 이고 aVT{$} 이다 .

첫번째 부분 A. 를 core 라고 부르며 LR(0) 아이템과 같은 의미 를 갖는다 . 두 번째 부분 a 를 아이템의 lookahead 라 부르며 , reduce 아이템 일 때 그 심벌에 대하여 reduce 행동을 하는 것을 뜻한다 .

Page 28: 제   8   장 LR   구문  분석

LR Parsing28

I 가 LR(1) 아이템의 집합이라면 , CLOSURE(I) = I {[B., b] | [A.B, a]CLOSURE(I),

BP, bFIRST(a)} 이다 .

CLR 파싱 테이블 작성 방법

만일 LR(1) 아이템 [A.a, b] 가 상태 i 에 있고 terminal 이면 shift 행동이므로 , i 상태에서 마크 심벌 a 를 보고 j 상태로 가는 GOTO 함수가 존재한다면 ACTION 테이블의 상태 i 와 심벌 a 가 만나는 곳에 상태 번호 j 를 적는다 .

if [A.a, b]Ii and GOTO(Ii, a) = Ij thenM[i, a] := shift j.

Page 29: 제   8   장 LR   구문  분석

LR Parsing29

만일 LR(1) 아이템 [A., a] 가 상태 i 에 있다면 reduce 행동 이므로 ACTION 테이블의 상태 I 와 lookahead 심벌 a 가 만나는

곳에 reduce 생성 규칙 번호를 적는다 .if [A., a]Ii then M[i, a] := reduce A.

만일 LR(1) 아이템 [S’S.,$] 가 상태 i 에 있다면 accept 행동 이므로 ACTION 테이블의 상태 i 와 $ 심벌이 만나는 곳에 accept

를 적는다 . if [S’S.,$]Ii then M[i, $] := accept.

만일 LR(1) 아이템 [A.B, a] 가 상태 i 에 있고 B 가 nonterminal 일 때 , i 상태에서 마크 심벌 B 를 보고 j 상태로 가는 GOTO 함수가 존재한다면 GOTO 테이블의 상태 i 와 심벌 B 가 만나는 곳에 상태 번호 j 를 적는다 .

if [A.B, a]Ii and GOTO(Ii, B)=Ij then M[i,B] := j.

Page 30: 제   8   장 LR   구문  분석

LR Parsing30

8.5 LALR 8.5 LALR 파싱 테이블 구성 방법파싱 테이블 구성 방법 정의

LookAhead LR 방법으로 아이템의 lookahead 정보를 이용하기 때문에 SLR 방법보고 훨씬 강력하고 파싱 테이블의 크기는 CLR 에서 core 가 같은 아이템들을 한 데 묶음으로써 SLR 와 같은 크기로 구성가능

모호하지 않은 context-free 문법으로 표현된 거의 모든 언어를 인식할 수 있기 때문에 요사이 대부분의 파서 제작 시스템에서 사용된다 .

Page 31: 제   8   장 LR   구문  분석

LR Parsing31

테이블 작성방법

C1 에서 작성하는 방법 같은 core 를 가진 LR(1) 아이템 집합들을 한 개의 LR(0) 아이템 집합 으로 만들고 각 아이템의 lookahead 는 이들 LR(1) 아이템의 lookahead

의 합집합으로 구성하는 방법

예를 들면 C1 의 Ii 와 Ij 와 같은 core 를 갖고 있다면 , Iij 상태로 통합되어 한 개의 상태로 된다 . 이때 , lookahead 는 두 아이템이 갖고 있는 lookahead 의 합집합이 된다 .

[A.,a]…

[A.,b]…

[A.,a/b]…

Ii Ij

Iij

Page 32: 제   8   장 LR   구문  분석

LR Parsing32

C1 에서 같은 core 를 갖는 상태들을 모두 통합하면 , C0 과 같은 상태수를 갖게 된다 . 따라서 LALR 파싱 테이블의 크기는 항상 SLR 와 같게 된다 .

공통 core 를 갖는 상태를 합침으로써 원래의 상태들에서 존재 하지 않았던 shift-reduce충돌은 야기할 수 있다 . 다시 말해서 , CLR 방법에서 shift-reduce충돌이 일어나지 않으면 , LALR 방법 에서도 shift-reduce 충돌이 일어나지 않는다 . 왜냐하면 shift 행동은 core 에 따라 결정되는 것이지 lookahead 에 따라 결정 되는 것이 아니기 때문이다 .

C1 로부터 구하는 것은 이론적으로 쉽게 설명할 수 있으나 실질 적으로 C1 을 작성하는 데는 lookahead 에 따라 상태수가 매우 커지고 시간이 오래 걸려 실제적인 프로그래밍 언어의 파싱 테이블 구성하는 방법으로는 사용하지 않는다 .

Page 33: 제   8   장 LR   구문  분석

LR Parsing33

C0 를 이용하는 방법

SLR 방법과 유사 주어진 문법의 C0 을 구성 파싱 테이블의 shift 와 accept 그리고 GOTO 행동은 SLR 와 같고 reduce 행동은 각 reduce 아이템의 lookahead 에 의해 결정된다 . LALR 방법은 C0 으로부터 reduce 아이템의 lookahead 를 구하는 것이 주된 이론

정의

상태 p 에서 LR(0) 아이템 [A.] 의 lookahead 는 LA(p, [A.]) 로 표기하며 p 상태에서 A 다음에 나올 수 있는 terminal 의 집합이다 .

LA(p, [A.]) = {a | aFIRST(), S’A , accesses p}.

*

Page 34: 제   8   장 LR   구문  분석

LR Parsing34

상태 p 의 전 상태 , PRED(p) 의 의미는 다음과 같다 .p,qC0 이고 XV, 그리고 V* 일 때 , GOTO(q, ) = q 이고

GOTO(q, X) = GOTO(GOTO(q,X), ) 이다 .그리고 PRED(p, a) = {q | pGOTO(q, a)} 이다 .

LR(k) 문법은 고정된 k 에 대하여 두 개의 우측 유도과정이 존재할 때마다 다음을 만족한다 .

S’ 와 S’ y의 유도 과정이 있을 때 FIRSTk() = FIRSTk(y) 이면 = , A = B, 그리고 x = y이다 .

**

Page 35: 제   8   장 LR   구문  분석

LR Parsing35

8.6 8.6 모호한 문법모호한 문법 정의

모든 모호한 문법은 LR 문법이 될 수 없다 . 파싱테이블 작성시 항상 shift-reduce충돌이나 reduce-reduce 충돌을 야기

모호한 문법에서 구문 분석 행동의 순위 shift-reduce 충돌인 경우

reduce 되는 생성 규칙과 입력 심벌의 순위를 비교하여 결정하는데 생성 규칙의 순위가 높으면 reduce 를 , 그렇지 않으면 shift 를 선택하는 것이 일반적이다 .

같은 순위인 경우에는 결합 법칙을 이용하는데 좌측 결합을 만족하면 reduce 를 , 우측 결합을 만족하면 shift 를 선택한다 .

Page 36: 제   8   장 LR   구문  분석

LR Parsing36

Reduce-reduce 충돌인 경우 reduce 되는 생성 규칙들의 순위를 비교하여 어느 생성 규칙을 reduce 할 것인가를 결정하는데 순위가 높은 것을 선택 생성 규칙의 순위는 그 생성 규칙 내에 있는 terminal 심벌로 결정할 수 있으며 , 또는 YACC 에서와 같이 특별히 명시하는 방법이 있다 . PGS 의 입력 명세서에서 먼저 기술되는 생성 규칙이 순위가 높도록 정할 수 있다 .

Page 37: 제   8   장 LR   구문  분석

LR Parsing37

8.7 LR8.7 LR 파싱 테이블의 구현파싱 테이블의 구현

파싱테이블의 구성

ACTION 테이블과 GOTO 테이블로 구성 ACTION 테이블

terminal 심벌에 대해나 구문 분석 행동을 나타낸다 GOTO 테이블

reduce 시에 nonterminal 에 대한 다음 상태를 나타낸다 .

Page 38: 제   8   장 LR   구문  분석

LR Parsing38

파싱테이블 구현 시 문제점

실제 프로그래밍의 경우에 파싱테이블이 상태수와 문법 심벌의 개수에 따라 방대하게 커져 기억 공간을 매우 많이 차지하여 기억 공간의 낭비가 심하고 또한 테이블을 구하는 데도 상당한 시간과 노력이 소요된다

ACTION 테이블의 기억공간 축소

같은 구문 분석 행동을 갖는 상태의 경우 한 상태만 표시하고 나머지 상태에서는 그 구문 분석 행동을 갖는 상태에 포인터만 갖게 함으로써 중복되는 구문 분석 행동으로 인한 기억 공간의 낭비를 줄일 수 있다 .

각 상태에서 terminal 심벌 중 구문 분석 행동이 정의된 것만 표현 하고 나머지는 별도로 한데 묶어 나타내어 기억 공간을 줄이는 방법

Page 39: 제   8   장 LR   구문  분석

LR Parsing39

GOTO 테이블의 기억공간 축소

각 nonterminal 에 대한 짝을 만들어 내는 것

기억 장소를 줄임으로써 테이블을 참조하는 데 걸리는 시간이 증가

파싱테이블을 위한 기억 장소의 배정은 동적 기억 장소를 이용 하는 것이 바람직하다 . 왜냐하면 , 파싱테이블은 단지 구문분석 시에만 필요로 하기 때문에 구문분석이 끝났을 때 시스템에 기 억 장소를 되돌려 줌으로써 주기억 장치를 효율적으로 운영할 수 있다 .

Page 40: 제   8   장 LR   구문  분석

LR Parsing40

8.8 8.8 구문 분석기의 작성구문 분석기의 작성 기본구성

파싱 테이블과 파싱 테이블을 참조하여 구문분석을 수행하는 실행루틴으로 구성

파싱 테이블은 2 차원 배열로 행은 terminal 심벌과 nonterminal 심벌이며 , 열은 상태 번호가 된다 . 구문 분석기의 행동은 행과 열이 만나는 곳에 정의되는데 shift 되는 상태는 양의 정수 값으로 , reduce 되는 생성 규칙 번호는 음의 정수 값으로 나타낸다 . 그리고 accept 는 최대 번호보다 큰 생성 규칙으로 reduce 될 때 이며 , error 는 0 으로 표시된다 .