Wireless Location and SOC Lab. Ch.1 Compiler Jong-Wha Chong Wireless Location and SOC Lab. Hanyang University
SoC & Wireless Location Lab. Compiler의 정의 Compiler “고급프로그래밍 언어로 쓰여진 Program을 기계언어 (Machine oriented lagnguage)로 번역하기 위한 Program” Compiler Source program Object program SoC & Wireless Location Lab.
SoC & Wireless Location Lab. Compiler의 역사 1956 ~ 1958 : IBM의 704의 Fortran용 개발에 25人·年 목표 Object 프로그램 실행 시 능률 중시 - Compile 하는 것은 1회이나 Object Program은 여러 번 실행 Compile 중시 - Debugging 사이에는 몇 회라도 Compile해야 함. 즉, 수정의 필요성이 증가) →TSS(Time Sharing System) 1960 : ALGOL 60 Backus normal form SoC & Wireless Location Lab.
SoC & Wireless Location Lab. Compiler의 예(1) Compiler의 예 ( ABC := E * 3.14 + ABC / E ; ) Address Instruction or Data Description 100 LOAD 201 ( 201 ) → ACC 101 MULT 150 ( ACC ) * ( 150 ) → ACC 102 STORE 160 ( ACC ) → 160 103 LOAD 200 ( 200 ) → ACC 104 DIV 201 ( ACC ) / ( 201 ) → ACC 105 ADD 160 ( ACC ) + ( 160 ) → ACC 106 STORE 200 ( ACC ) → 200 : 150 3.14 ABC=E*3.14+ABC/E. 160 작업용 Address 200 ABC의 값 201 E의 값 (n) : n번지의 내용 ACC : Accumulator → n : n번지에 store → ACC : ACC에 넣음 SoC & Wireless Location Lab.
SoC & Wireless Location Lab. Compiler의 예(2) (a) 변수명 표 ABC 1 Stack (1, 0) : = 1 (1, 0) // (변수명표, 변수명표의 번지) (b) 변수명 표 ABC 1 E Stack (1, 0) : = 1 2 3 (1, 1) * 이미 stack에 넣어져 있는 “:=” 연산보다 “*”의 연산을 먼저 해야하므로 “*”을 “:=” 위에 쌓았다. SoC & Wireless Location Lab.
SoC & Wireless Location Lab. Compiler의 예(3) (c) 정수 표 3.14 Stack (1, 0) : = 1 2 3 4 (1, 1) * (2, 0) (2, 0) // (정수표, 정수표 중의 0번지) ABC := E*3.14 + ABC/E; 다음 단계로 “+”를 stack에 넣으려 할 때 stack 중 가장 최근에 써 넣은 연산자중 “+”보다도 *의 쪽이 연산순위가 높으므로 E*3.14 즉 (1, 1)*(2, 0)의 연산을 해야하므로 SoC & Wireless Location Lab.
SoC & Wireless Location Lab. Compiler의 예(4) 명령 번지 100 101 MULT (2, 0) LOAD (1, 1) (d) 연산의 결과는 Acc에 있음 Stack의 내용 (1, 1)*(2, 0) -> (3, 0)치환 Accumulator의 switch 2 Stack (1, 0) : = 1 2 (3, 0) Acc에 값이 들어있음을 알림 (3, 0) ↑ ACC Stack (1, 0) : = 1 2 3 (3, 0) + Stack의 내용이 (3, 0)으로 변한 시점에서 stack 중의 연산자를 비교, “:=” 는 “+”보다도 나중에 행하여야 하므로 “+” 를 stack에 쌓음 SoC & Wireless Location Lab.
SoC & Wireless Location Lab. Compiler의 예(5) (e) Stack (1, 0) : = 1 2 3 4 5 (3, 0) + ABC:= E*3.14+ABC/E; 다음 “ABC”, “/” ↑이미 변수명표에 (1, 0) 들어있으므로 다시 stack에 넣음 stack 중의 연산자 “+”는 “/”보다 후에 실행해야하므 stack에 넣음 최후로 “E;”를 보고 stack에 (1, 1)을 넣음 ↑ statement의 끝 “;”보다 “/”의 쪽이 우선이므로 (1, 0)/(1, 1)을 연산하는 명령을 생성해야 함 그러나 Acc의 switch를 보면 전 명령의 실행 data를 갖고 있음 SoC & Wireless Location Lab.
SoC & Wireless Location Lab. Compiler의 예(6) (f) 102 STORE (4, 0) (4, 0) ←작업용 번지 위 0번 작업용 번지의 counter 1 Stack 2번지 내용을 (4, 0)으로 교체 ↑Acc SW를 보면 알 수 있음 103 104 D I V (1, 1) LOAD (1, 0) Stack (1, 0) : = 1 2 (4, 0) + (3, 0) Accumulator의 switch 4 (3, 0) ↑Acc의 표시 다시 “+”와 “:=”비교 SoC & Wireless Location Lab.
SoC & Wireless Location Lab. Compiler의 예(7) 105 ADD (4, 0) Stack (1, 0) : = 1 2 (3, 0) 106 STORE (1, 0) 100 101 102 104 105 106 LOAD (1, 1) MULT (2, 0) STORE (4, 0) LOAD (1, 0) DIV (1, 1) ADD (4, 0) STORE (1, 0) SoC & Wireless Location Lab.
SoC & Wireless Location Lab. Compiler의 예(8) (g) 정수표의 선두번지 : 150 작업용의 선두번지 : 160 변수표 ABC : 200 변수표 E : 201 (h) 한 명령을 각각 조사하여 각 명령의 번지부가 ( 1, n )이면, 변수명표의 n번의 우측에 있는 수 ( 2, n )이면, 정수표의 번지 + n ( 4, n )이면, 작업용표의 선두번지 + n 을 각각 그 번지부에 써 넣으면 된다. 1 ABC 200 E 201 SoC & Wireless Location Lab.
SoC & Wireless Location Lab. Compiler의 구성요소 Step1) Source program의 읽어들임 Step2) Source program을 기본적 요소로 나눈다. ex) ABC := E * 3.14 + ABC / E ; Step3) 표의 조작 변수명 표, 정수명 표 Step4) 구문의 해석 (Parsing) 단어로부터 문(statement)이 어떻게 구성되어 있는가를 조사 SoC & Wireless Location Lab.
SoC & Wireless Location Lab. Compiler의 구성요소 ;= Step5) 명령어를 만들어 냄 Step6) 번지 할당 명령어, 각 변수, 정수 , 작업용 번지 Step7) Object Protram의 생성 + ABC * / E 3.14 ABC E SoC & Wireless Location Lab.
Backus Normal Form (Backus 방식) <숫 자> := 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 <문 자> := A | B | C | D | … | Z <이 름> := <문자> | <이름> <문자> | <이름> <숫자> ex) A, AA, A9, B39D <문(文)> := <주부> <동사> <주 부> := <명사> <조사> <명 사> := 사과 | 청주 | 학생 | 꽃 <조 사> := 이 | 은 | 가 | 도 <동 사> := 놀다 | 타다 | 읽다 Backus 기법으로 나타낸 것은 문장을 어떻게 구성하는가 하는 구문 측(syntactic)을 나타냄 SoC & Wireless Location Lab.
SoC & Wireless Location Lab. 단어분류 <정 수> := <숫 자> | <정 수> <숫 자> <구별기호> := + | - | * | / | ( | ) | = < 구 > := <구별기호> | <변수명><구별기호> | <정수><구별기호> < 변수명 > := <영자> | <변수명> <영자> | <변수명> <숫 자> SoC & Wireless Location Lab.
SoC & Wireless Location Lab. 단어분류 SoC & Wireless Location Lab.