8. 1 PURCHASES 2 DATE 3 DAY 3 MONTH 3 YEAR 2 TRANSACTION 3 ITEM 3 QUANTITY 3 PRICE 3 TAX 3 SHIPPER 4 NAME 4 ADDRESS 1 SALES 2 DATE 3 MONTH 3 DAY 3 YEAR 2 TRANSACTION 3 ITEM 3 QUANTITY 3 PRICE 3 TAX 3 BUYER 4 NAME 4 ADDRESS NAME OF SHIPPER OF TRANSACTION OF PURCHASES NAME OF SHIPPER SHIPPER 는 오직 한부분에만 나오기 때문
9. COBOL 상세규칙 수준번호 level number 한 그룹의 항목은 같은 수준번호를 가짐 그 번호는 부모 그룹의 수준번호보다 작음 A0 OF A1 OF … OF An, n>=0 , 0<j<n 이런 조건을 만족하는 A0 은 오직 하나만 존재 한정 같은 이름 A0 가 여러장소에 나타난다면 한정을 통해서 지칭하는 방법이 있어야함
10. COBOL 상세규칙 MOVE CORRESPONDING A TO B 자료영역 A 에서 자료영역 B 로 대응되는 이름을 가진 모든 항목들을 옮긴다 MOVE CORRESPONDING DATE OF SALES TO DATE OF PURCHASES SALES 의 MONTH,DAY,YEAR 값을 PURCHASES 의 MONTH,DAY,YEAR 로 이동한다
11. COBOL 컴파일러 알고리즘 설계 연산1) 수준번호와 이름을 처리해서 연산2와 연산3에서 사용할수 있도록 컴파일러 내부의 표에 집어넣는다 연산2) 주어진 한정된 참조가 유효한지 판정하고, 유효하다면 해당자료 항목의 위치를 찾는다 연산3) 주어진 CORRESPONDING 문장이 지시하는 모든 대응 항목 쌍들을 찾는다
12. COBOL 컴파일러 알고리즘 설계 연산1) 수준번호와 이름을 처리해서 연산2와 연산3에서 사용할수 있도록 컴파일러 내부의 표에 집어넣는다 표에는 어떤 정보가 들어가야 할까? 연산2와 연산3에서 어떤 정보가 필요한지 먼저 체크되어야 결정가능!
17. COBOL 컴파일러 알고리즘 설계 1 SALES 2 DATE 2 TRANSACTION 3 MONTH 3 DAY 3 YEAR 3 MONTH Symbol Table PREV : 같은 이름을 가진 이전요소로의 링크 PARENT : 속해있는 상위 그룹으로 링크 NAME : 항목에 대한 기호표 요소로의 링크 CHILD : 첫째 하위 항목으로 링크 SIB : 같은 그룹의 다음 항목으로 링크
18. Algorithm A (자료표구축) A1. [초기화] 스택을 비우고 (0,Λ) 삽입 A2. [다음항목] 입력에서 다음 자료 항목 (L,P) 를 가져온다 if( 더이상없음 ) then END! Q ← AVAIL A3. [이름 링크들을 설정] PREV(Q) ← LINK(P) LINK(P) ← Q NAME(Q) ← P A4. [수준들을 비교] 스택의 최상위 요소를 (L1,P1) 에 복사한다 if( L1<L ) then CHILD(P1) ← Q if( P1 == Λ) then FIRST ← Q GOTO A6 A5. [최상위 수준을 제거] if( L1>L ) then 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 GOTO A5 if( L1<L ) then 오류를 보고 else SIB(P1) ← Q 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 A6. [가족 링크들을 설정] PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ A7. [스택에 추가] (L,Q) 를 스택에 PUSH GOTO A2 아…어떻게 설명을 해야할까요ㅜㅜ
19. 어떻게 하면 알고리즘을 알기쉽게 잘 설명 할 수 있을까? 세부적으로 모든 구문을 설명 대략적인 과정을 설명 한줄 또는그림하나로 설명
21. Algorithm A (자료표구축) A1. [초기화] 스택을 비우고 (0,Λ) 삽입 A2. [다음항목] 입력에서 다음 자료 항목 (L,P) 를 가져온다 if( 더이상없음 ) then END! Q ← AVAIL A3. [이름 링크들을 설정] PREV(Q) ← LINK(P) LINK(P) ← Q NAME(Q) ← P A4. [수준들을 비교] 스택의 최상위 요소를 (L1,P1) 에 복사한다 if( L1<L ) then CHILD(P1) ← Q if( P1 == Λ) then FIRST ← Q GOTO A6 A5. [최상위 수준을 제거] if( L1>L ) then 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 GOTO A5 if( L1<L ) then 오류를 보고 else SIB(P1) ← Q 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 A6. [가족 링크들을 설정] PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ A7. [스택에 추가] (L,Q) 를 스택에 PUSH GOTO A2 (0,Λ) 1 A 3 B 7 C 7 D 3 E
22. Algorithm A (자료표구축) A1. [초기화] 스택을 비우고 (0,Λ) 삽입 A2. [다음항목] 입력에서 다음 자료 항목 (L,P) 를 가져온다 if( 더이상없음 ) then END! Q ← AVAIL A3. [이름 링크들을 설정] PREV(Q) ← LINK(P) LINK(P) ← Q NAME(Q) ← P A4. [수준들을 비교] 스택의 최상위 요소를 (L1,P1) 에 복사한다 if( L1<L ) then CHILD(P1) ← Q if( P1 == Λ) then FIRST ← Q GOTO A6 A5. [최상위 수준을 제거] if( L1>L ) then 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 GOTO A5 if( L1<L ) then 오류를 보고 else SIB(P1) ← Q 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 A6. [가족 링크들을 설정] PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ A7. [스택에 추가] (L,Q) 를 스택에 PUSH GOTO A2 Symbol Table (0,Λ) Q (L,P) (1,A) 1 A 3 B 7 C 7 D 3 E
23. Algorithm A (자료표구축) A1. [초기화] 스택을 비우고 (0,Λ) 삽입 A2. [다음항목] 입력에서 다음 자료 항목 (L,P) 를 가져온다 if( 더이상없음 ) then END! Q ← AVAIL A3. [이름 링크들을 설정] PREV(Q) ← LINK(P) LINK(P) ← Q NAME(Q) ← P A4. [수준들을 비교] 스택의 최상위 요소를 (L1,P1) 에 복사한다 if( L1<L ) then CHILD(P1) ← Q if( P1 == Λ) then FIRST ← Q GOTO A6 A5. [최상위 수준을 제거] if( L1>L ) then 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 GOTO A5 if( L1<L ) then 오류를 보고 else SIB(P1) ← Q 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 A6. [가족 링크들을 설정] PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ A7. [스택에 추가] (L,Q) 를 스택에 PUSH GOTO A2 Symbol Table (0,Λ) Q (L,P) (1,A) 1 A 3 B 7 C 7 D 3 E
24. Algorithm A (자료표구축) A1. [초기화] 스택을 비우고 (0,Λ) 삽입 A2. [다음항목] 입력에서 다음 자료 항목 (L,P) 를 가져온다 if( 더이상없음 ) then END! Q ← AVAIL A3. [이름 링크들을 설정] PREV(Q) ← LINK(P) LINK(P) ← Q NAME(Q) ← P A4. [수준들을 비교] 스택의 최상위 요소를 (L1,P1) 에 복사한다 if( L1<L ) then CHILD(P1) ← Q if( P1 == Λ) then FIRST ← Q GOTO A6 A5. [최상위 수준을 제거] if( L1>L ) then 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 GOTO A5 if( L1<L ) then 오류를 보고 else SIB(P1) ← Q 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 A6. [가족 링크들을 설정] PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ A7. [스택에 추가] (L,Q) 를 스택에 PUSH GOTO A2 Symbol Table (0,Λ) Q FIRST (L1,P1) (L,P) (1,A) (0, Λ ) 1 A 3 B 7 C 7 D 3 E
25. Algorithm A (자료표구축) A1. [초기화] 스택을 비우고 (0,Λ) 삽입 A2. [다음항목] 입력에서 다음 자료 항목 (L,P) 를 가져온다 if( 더이상없음 ) then END! Q ← AVAIL A3. [이름 링크들을 설정] PREV(Q) ← LINK(P) LINK(P) ← Q NAME(Q) ← P A4. [수준들을 비교] 스택의 최상위 요소를 (L1,P1) 에 복사한다 if( L1<L ) then CHILD(P1) ← Q if( P1 == Λ) then FIRST ← Q GOTO A6 A5. [최상위 수준을 제거] if( L1>L ) then 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 GOTO A5 if( L1<L ) then 오류를 보고 else SIB(P1) ← Q 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 A6. [가족 링크들을 설정] PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ A7. [스택에 추가] (L,Q) 를 스택에 PUSH GOTO A2 Symbol Table (0,Λ) Q FIRST (L1,P1) (L,P) (1,A) (0, Λ ) 1 A 3 B 7 C 7 D 3 E
26. Algorithm A (자료표구축) A1. [초기화] 스택을 비우고 (0,Λ) 삽입 A2. [다음항목] 입력에서 다음 자료 항목 (L,P) 를 가져온다 if( 더이상없음 ) then END! Q ← AVAIL A3. [이름 링크들을 설정] PREV(Q) ← LINK(P) LINK(P) ← Q NAME(Q) ← P A4. [수준들을 비교] 스택의 최상위 요소를 (L1,P1) 에 복사한다 if( L1<L ) then CHILD(P1) ← Q if( P1 == Λ) then FIRST ← Q GOTO A6 A5. [최상위 수준을 제거] if( L1>L ) then 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 GOTO A5 if( L1<L ) then 오류를 보고 else SIB(P1) ← Q 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 A6. [가족 링크들을 설정] PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ A7. [스택에 추가] (L,Q) 를 스택에 PUSH GOTO A2 Symbol Table (1,A) (0,Λ) Q FIRST (L1,P1) (L,P) (1,A) (0, Λ ) 1 A 3 B 7 C 7 D 3 E
27. Algorithm A (자료표구축) A1. [초기화] 스택을 비우고 (0,Λ) 삽입 A2. [다음항목] 입력에서 다음 자료 항목 (L,P) 를 가져온다 if( 더이상없음 ) then END! Q ← AVAIL A3. [이름 링크들을 설정] PREV(Q) ← LINK(P) LINK(P) ← Q NAME(Q) ← P A4. [수준들을 비교] 스택의 최상위 요소를 (L1,P1) 에 복사한다 if( L1<L ) then CHILD(P1) ← Q if( P1 == Λ) then FIRST ← Q GOTO A6 A5. [최상위 수준을 제거] if( L1>L ) then 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 GOTO A5 if( L1<L ) then 오류를 보고 else SIB(P1) ← Q 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 A6. [가족 링크들을 설정] PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ A7. [스택에 추가] (L,Q) 를 스택에 PUSH GOTO A2 Symbol Table (1,A) (0,Λ) FIRST A1 Q (L1,P1) (L,P) (3,B) (0, Λ ) 1 A 3 B 7 C 7 D 3 E
28. Algorithm A (자료표구축) A1. [초기화] 스택을 비우고 (0,Λ) 삽입 A2. [다음항목] 입력에서 다음 자료 항목 (L,P) 를 가져온다 if( 더이상없음 ) then END! Q ← AVAIL A3. [이름 링크들을 설정] PREV(Q) ← LINK(P) LINK(P) ← Q NAME(Q) ← P A4. [수준들을 비교] 스택의 최상위 요소를 (L1,P1) 에 복사한다 if( L1<L ) then CHILD(P1) ← Q if( P1 == Λ) then FIRST ← Q GOTO A6 A5. [최상위 수준을 제거] if( L1>L ) then 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 GOTO A5 if( L1<L ) then 오류를 보고 else SIB(P1) ← Q 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 A6. [가족 링크들을 설정] PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ A7. [스택에 추가] (L,Q) 를 스택에 PUSH GOTO A2 Symbol Table (1,A) (0,Λ) FIRST A1 Q (L1,P1) (L,P) (3,B) (0, Λ ) 1 A 3 B 7 C 7 D 3 E
29. Algorithm A (자료표구축) A1. [초기화] 스택을 비우고 (0,Λ) 삽입 A2. [다음항목] 입력에서 다음 자료 항목 (L,P) 를 가져온다 if( 더이상없음 ) then END! Q ← AVAIL A3. [이름 링크들을 설정] PREV(Q) ← LINK(P) LINK(P) ← Q NAME(Q) ← P A4. [수준들을 비교] 스택의 최상위 요소를 (L1,P1) 에 복사한다 if( L1<L ) then CHILD(P1) ← Q if( P1 == Λ) then FIRST ← Q GOTO A6 A5. [최상위 수준을 제거] if( L1>L ) then 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 GOTO A5 if( L1<L ) then 오류를 보고 else SIB(P1) ← Q 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 A6. [가족 링크들을 설정] PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ A7. [스택에 추가] (L,Q) 를 스택에 PUSH GOTO A2 Symbol Table (1,A) (0,Λ) FIRST A1 Q (L1,P1) (L,P) (3,B) (1,A) 1 A 3 B 7 C 7 D 3 E
30. Algorithm A (자료표구축) A1. [초기화] 스택을 비우고 (0,Λ) 삽입 A2. [다음항목] 입력에서 다음 자료 항목 (L,P) 를 가져온다 if( 더이상없음 ) then END! Q ← AVAIL A3. [이름 링크들을 설정] PREV(Q) ← LINK(P) LINK(P) ← Q NAME(Q) ← P A4. [수준들을 비교] 스택의 최상위 요소를 (L1,P1) 에 복사한다 if( L1<L ) then CHILD(P1) ← Q if( P1 == Λ) then FIRST ← Q GOTO A6 A5. [최상위 수준을 제거] if( L1>L ) then 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 GOTO A5 if( L1<L ) then 오류를 보고 else SIB(P1) ← Q 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 A6. [가족 링크들을 설정] PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ A7. [스택에 추가] (L,Q) 를 스택에 PUSH GOTO A2 Symbol Table (1,A) (0,Λ) FIRST A1 Q (L1,P1) (L,P) (3,B) (1,A) 1 A 3 B 7 C 7 D 3 E
31. Algorithm A (자료표구축) A1. [초기화] 스택을 비우고 (0,Λ) 삽입 A2. [다음항목] 입력에서 다음 자료 항목 (L,P) 를 가져온다 if( 더이상없음 ) then END! Q ← AVAIL A3. [이름 링크들을 설정] PREV(Q) ← LINK(P) LINK(P) ← Q NAME(Q) ← P A4. [수준들을 비교] 스택의 최상위 요소를 (L1,P1) 에 복사한다 if( L1<L ) then CHILD(P1) ← Q if( P1 == Λ) then FIRST ← Q GOTO A6 A5. [최상위 수준을 제거] if( L1>L ) then 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 GOTO A5 if( L1<L ) then 오류를 보고 else SIB(P1) ← Q 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 A6. [가족 링크들을 설정] PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ A7. [스택에 추가] (L,Q) 를 스택에 PUSH GOTO A2 Symbol Table (3,B) (1,A) (0,Λ) FIRST A1 Q (L1,P1) (L,P) (3,B) (1,A) 1 A 3 B 7 C 7 D 3 E
32. Algorithm A (자료표구축) A1. [초기화] 스택을 비우고 (0,Λ) 삽입 A2. [다음항목] 입력에서 다음 자료 항목 (L,P) 를 가져온다 if( 더이상없음 ) then END! Q ← AVAIL A3. [이름 링크들을 설정] PREV(Q) ← LINK(P) LINK(P) ← Q NAME(Q) ← P A4. [수준들을 비교] 스택의 최상위 요소를 (L1,P1) 에 복사한다 if( L1<L ) then CHILD(P1) ← Q if( P1 == Λ) then FIRST ← Q GOTO A6 A5. [최상위 수준을 제거] if( L1>L ) then 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 GOTO A5 if( L1<L ) then 오류를 보고 else SIB(P1) ← Q 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 A6. [가족 링크들을 설정] PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ A7. [스택에 추가] (L,Q) 를 스택에 PUSH GOTO A2 Symbol Table (7,D) (7,C) (3,B) (1,A) (0,Λ) FIRST A1 B3 C7 1 A 3 B 7 C 7 D 3 E (L1,P1) (L,P) (7,C) (7,D)
33. Algorithm A (자료표구축) A1. [초기화] 스택을 비우고 (0,Λ) 삽입 A2. [다음항목] 입력에서 다음 자료 항목 (L,P) 를 가져온다 if( 더이상없음 ) then END! Q ← AVAIL A3. [이름 링크들을 설정] PREV(Q) ← LINK(P) LINK(P) ← Q NAME(Q) ← P A4. [수준들을 비교] 스택의 최상위 요소를 (L1,P1) 에 복사한다 if( L1<L ) then CHILD(P1) ← Q if( P1 == Λ) then FIRST ← Q GOTO A6 A5. [최상위 수준을 제거] if( L1>L ) then 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 GOTO A5 if( L1<L ) then 오류를 보고 else SIB(P1) ← Q 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 A6. [가족 링크들을 설정] PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ A7. [스택에 추가] (L,Q) 를 스택에 PUSH GOTO A2 Symbol Table (7,D) (7,C) (3,B) (1,A) (0,Λ) FIRST A1 B3 C7 D7 1 A 3 B 7 C 7 D 3 E (L1,P1) (L,P) (7,C) (7,C)
34. Algorithm A (자료표구축) A1. [초기화] 스택을 비우고 (0,Λ) 삽입 A2. [다음항목] 입력에서 다음 자료 항목 (L,P) 를 가져온다 if( 더이상없음 ) then END! Q ← AVAIL A3. [이름 링크들을 설정] PREV(Q) ← LINK(P) LINK(P) ← Q NAME(Q) ← P A4. [수준들을 비교] 스택의 최상위 요소를 (L1,P1) 에 복사한다 if( L1<L ) then CHILD(P1) ← Q if( P1 == Λ) then FIRST ← Q GOTO A6 A5. [최상위 수준을 제거] if( L1>L ) then 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 GOTO A5 if( L1<L ) then 오류를 보고 else SIB(P1) ← Q 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 A6. [가족 링크들을 설정] PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ A7. [스택에 추가] (L,Q) 를 스택에 PUSH GOTO A2 Symbol Table (7,D) (7,C) (3,B) (1,A) (0,Λ) FIRST A1 B3 C7 D7 Q 1 A 3 B 7 C 7 D 3 E (L1,P1) (L,P) (3,E) (7,C)
35. Algorithm A (자료표구축) A1. [초기화] 스택을 비우고 (0,Λ) 삽입 A2. [다음항목] 입력에서 다음 자료 항목 (L,P) 를 가져온다 if( 더이상없음 ) then END! Q ← AVAIL A3. [이름 링크들을 설정] PREV(Q) ← LINK(P) LINK(P) ← Q NAME(Q) ← P A4. [수준들을 비교] 스택의 최상위 요소를 (L1,P1) 에 복사한다 if( L1<L ) then CHILD(P1) ← Q if( P1 == Λ) then FIRST ← Q GOTO A6 A5. [최상위 수준을 제거] if( L1>L ) then 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 GOTO A5 if( L1<L ) then 오류를 보고 else SIB(P1) ← Q 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 A6. [가족 링크들을 설정] PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ A7. [스택에 추가] (L,Q) 를 스택에 PUSH GOTO A2 Symbol Table (7,D) (7,C) (3,B) (1,A) (0,Λ) FIRST A1 B3 C7 D7 Q 1 A 3 B 7 C 7 D 3 E (L1,P1) (L,P) (3,E) (7,C)
36. Algorithm A (자료표구축) A1. [초기화] 스택을 비우고 (0,Λ) 삽입 A2. [다음항목] 입력에서 다음 자료 항목 (L,P) 를 가져온다 if( 더이상없음 ) then END! Q ← AVAIL A3. [이름 링크들을 설정] PREV(Q) ← LINK(P) LINK(P) ← Q NAME(Q) ← P A4. [수준들을 비교] 스택의 최상위 요소를 (L1,P1) 에 복사한다 if( L1<L ) then CHILD(P1) ← Q if( P1 == Λ) then FIRST ← Q GOTO A6 A5. [최상위 수준을 제거] if( L1>L ) then 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 GOTO A5 if( L1<L ) then 오류를 보고 else SIB(P1) ← Q 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 A6. [가족 링크들을 설정] PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ A7. [스택에 추가] (L,Q) 를 스택에 PUSH GOTO A2 Symbol Table (7,D) (7,C) (3,B) (1,A) (0,Λ) FIRST A1 B3 C7 D7 Q 1 A 3 B 7 C 7 D 3 E (L1,P1) (L,P) (3,E) (7,D)
37. Algorithm A (자료표구축) A1. [초기화] 스택을 비우고 (0,Λ) 삽입 A2. [다음항목] 입력에서 다음 자료 항목 (L,P) 를 가져온다 if( 더이상없음 ) then END! Q ← AVAIL A3. [이름 링크들을 설정] PREV(Q) ← LINK(P) LINK(P) ← Q NAME(Q) ← P A4. [수준들을 비교] 스택의 최상위 요소를 (L1,P1) 에 복사한다 if( L1<L ) then CHILD(P1) ← Q if( P1 == Λ) then FIRST ← Q GOTO A6 A5. [최상위 수준을 제거] if( L1>L ) then 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 GOTO A5 if( L1<L ) then 오류를 보고 else SIB(P1) ← Q 스택최상위 요소를 제거 스택의 최상위 요소를 (L1,P1) 에 복사한다 A6. [가족 링크들을 설정] PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ A7. [스택에 추가] (L,Q) 를 스택에 PUSH GOTO A2 (7,D) Symbol Table (7,C) (3,B) (1,A) (0,Λ) FIRST A1 B3 C7 D7 Q 1 A 3 B 7 C 7 D 3 E (L1,P1) (L,P) (3,E) (1,A)
38. Algorithm B (한정된 참조 점검) 이 참조가 유효한지를 점검하고 유효하다면 변수 Q 를 이 참조가 지칭하는 항목에 대한 자료표 요소의 주소로 설정한다 이런 서브루틴이 있다고 가정 서브루틴
39. Algorithm B (한정된 참조 점검) NAME OF SHIPPER OF TRANSACTION OF PURCHASES 이게 유효한가? 1 1 PURCHASES 2 DATE 3 DAY 3 MONTH 3 YEAR 2 TRANSACTION 3 ITEM 3 QUANTITY 3 PRICE 3 TAX 3 SHIPPER 4 NAME 4 ADDRESS 2 Q
54. Algorithm C (Corresponding 쌍들을 찾기) MOVE CORRESPONDING A TO B 자료영역 A 에서 자료영역 B 로 대응되는 이름을 가진 모든 항목들을 옮긴다 MOVE CORRESPONDING A TO H MOVE B OF A TO B OF H MOVE G OF F OF A TO G OF F OF H
57. 이렇게 구축한 자료표에는 중복된 정보가 많다. 일부를 삭제하면 어떨까? PREV 링크 삭제 -검색의 효율이 중요한 COBOL 에서는 필수! PARENT 링크 삭제 -SIB 를 확장해서 스레드 링크를 포함시킨다면 삭제해도 될듯 ( TAG ) NAME 링크 삭제 -적합여부판단하는이름비교시다른방법이 필요함 결론적으로 5개 링크들 모두 필수는 아니다 그러나 알고리즘 속도면으로 보면 확실히 유용하다