본 강의를 보고 정리한 내용이다.
인터프리터
코드 -> 이해(분석) -> 실행
컴파일러와 달리 목적파일이 없고, 소스코드를 분석하여 바로 실행한다.
컴파일
사람이 이해하기 쉬운 언어를 기계가 이해할 수 있는 언어로 변경해 준다. 즉, 프로그래머가 작성한 코드를 분석하여 이해한 뒤, 이를 기계가 이해할 수 있도록 기계어로 변경한다.
코드 -> 이해(분석) -> 목적파일 생성 -> 실행파일 -> 실행
Java, C 로 작성된 코드를 이해(분석)하는 과정을 거쳐 기계어로 작성된 목적파일을 생성. 이후, 운영체제의 요건에 맞게 또는 여러 라이브러리를 목적파일에 코드를 추가하여 실행파일을 만든다. 목적파일을 실행파일로 만드는 것을 링크라고 한다.
목적파일은 여러 개가 존재할 수 있으며, 이를 하나의 실행파일로 만든다.
컴파일 과정
아래 사진은 소스코드가 어셈블러코드로 변경되는 상세 과정이다.
1. Programmer
프로그래머가 소스코드를 작성하는 것을 의미한다. 위 예시에서는 'A=B+C;' 라는 코드를 작성했다.
2. Scanner
소스코드를 어휘분석하는 과정이다. 연산자외 예약어, 변수이름을 토큰이라고 하는데, 이러한 토큰이 예약어인지(if 문 등) 변수인지를 판단한다.
3. Parser
구문분석을 하는 과정이다. 토큰들로 트리를 만들어 문법이 맞는지, 의미가 맞는지 확인한다.
4. Semantic analyzer
타입을 확인하는 과정이다. int형이면 int형으로 제대로 썼는지 등을 확인한다.
여기까지가 프로그래머가 작성한 소스코드를 분석하고 이해하는 과정이다. 이제 이를 기계어로 변환시켜 주는 과정을 진행한다.
5. Intermediate code generator
Parser를 통해 만들어진 파싱 트리를 보고 중간 언어로 변환한다.
6. Optimizer
중간 언어로 변경하는 과정에서 중복 코드들이 발생할 수 있어, 중복 코드를 제거하는 과정을 거친다.
7. Code generator
중간 언어를 어셈블리어로 변환한다.
8.Preephole optimizer
중간 언어를 어셈블리어로 변환하는 과정에서 중복 코드가 발생할 수 있어, 중복 코드를 제거하는 과정을 거친다.
컴파일러 기술
1. 데이터베이스
데이터베이스에서 SQL 구문을 기계가 이해하기 쉽도록 변경
2. 커멘드
리눅스 등의 운영체제의 커멘드 명령어(ex- `cd`, `mv`, `ls` 등)를 기계가 이해하기 쉽도록 변경
'Language > Java' 카테고리의 다른 글
[JAVA] == 과 equals 비교 (0) | 2022.07.24 |
---|---|
[Java] 주석은 컴파일 단계에서 어떻게 될까? (0) | 2022.04.10 |
[Java] 로그 구하기 (0) | 2022.02.14 |
[Java] 스택 사용하기(Stack Class) (0) | 2022.02.08 |
[Java] int 타입을 이진수로 바꾸는 방법 (0) | 2022.02.06 |