컴파일러(Compiler)

: 프로그래밍 언어로 작성된 소스 코드를 컴퓨터가 이해할 수 있는 기계어(또는 바이트코드)로 번역하는 프로그램.

컴파일러는 전체 소스 코드를 한 번에 번역하여 실행 가능한 파일을 생성한다.

 

https://bin-kkwon.tistory.com/entry/컴파일러vs인터프리터

컴파일러의 주요 역할은 네 가지로 구분된다.

1. 소스 코드 분석: 소스코드의 문법이 올바른지 확인한다. 문법이 틀리면 에러메시지를 출력한다.

2. 코드 최적화: 실행 속도를 높이거나 메모리 사용량을 줄이기 위해 코드를 최적화한다.

3. 코드 변환: 고급 언어로 작성된 소스 코드를 저수준 언어(기계어 또는 바이트 코드)로 변환한다.

4. 목적 파일 생성: 실행 가능한 프로그램으로 변환되는 파일(.class, .exe 또는 .o)을 생성한다.

 

컴파일러의 작동 과정은 여섯가지 정도로 구분된다.

1. 어휘 분석(Lexical Analysis)

    ● 소스코드를 토큰(프로그램의 최소 단위)로 분해한다.

    ● 예: int a =5; → int, a, =, 5, ;

2. 구문 분석(Syntax Analysis)

    ● 문법 구조를 검사한다.

    ● 예: int a = 5; → 정상 / int = a 5 ; → 에러: 문법 오류

3. 의미 분석(Semantic Analysis)

    ● 코드의 의미를 검사한다. 타입 일관성, 변수 선언 여부 등을 확인한다.

    ● 예: int a = "Hello"; → 에러: 타입 불일치

4. 중간 코드 생성 (Intermediate Code Generation)

    ● CPU에 독립적인 중간 코드 형태로 변환한다.

    ● 예: 고수준 언어에서 로우 레벨 코드로 변환

5. 코드 최적화 (Code Optimization)

    ● 불필요한 코드 제거 및 최적화로 프로그램의 성능을 향상시킨다.

    ● 예: 불필요한 계산 제거, 루프 최적화 등

6. 목적 코드 생성 (Code Generation)

    ● 최종적으로 실행 가능한 기계어 또는 바이트 코드(.class 등)를 생성한다.

 

https://en.wikipedia.org/wiki/Compiler

 

 

인터프리터(Interpreter)

: 소스 코드를 한 줄씩 읽어서 즉시 실행하는 프로그램. 즉, 프로그램 전체를 기계어로 변환한 후 실행하는 컴파일러와 달리, 인터프리터는 코드 한 줄을 해석하고 바로 실행한다. 이런 방식은 프로그램을 바로 실행할 수 있어, 빠른 테스트와 디버깅에 유리하다.

 

인터프리터의 주요 역할은 다음 세 가지로 구분된다.

1. 문법 확인 및 해석: 코드의 문법을 확인하며 한 줄씩 해석한다.

2. 실행: 해석한 내용을 즉시 실행한다.

3. 실행 중 오류 처리: 코드 실행 중 오류가 발생하면 즉시 중지하고 오류 메시지를 출력한다.

 

인터프리터의 작동 과정은 세가지 정도로 구분된다.

1. 어휘 분석(Lexical Analysis)

    ● 소스코드를 토큰(프로그램의 최소 단위)로 분해한다.

    ● 예: print("Hello, World!") → print, "Hello, World!"

2. 구문 분석(Syntax)

    ● 코드의 문법이 올바른지 확인한다.

    ● 예: print("Hello") → 정상 / print("Hello → 에러(문자열 미완성)

3. 해석 및 실행

    ● 코드를 해석하여 즉시 실행한다.

    ● 예: print("Hello") → 출력: Hello

 

컴파일러와 인터프리터의 차이

항목 컴파일러 인터프리터
번역 방식 전체 소스 코드를 한 번에 번역 한 줄씩 번역하며 실행
출력 파일 실행 파일(.class, .exe 등) 생성 별도의 실행 파일 없음
실행 속도 빠름(한 번 번역 후 실행) 느림 (실행 시마다 해석)
디버깅 디버깅이 상대적으로 복잡함 코드 수정 후 바로 실행 가능
대표 언어 C, C++, Java Python, JavaScript, PHP

 

 

하이브리드 !?

: 일부 언어는 컴파일러와 인터프리터의 장점을 결합한다.

● Java

    - javac로 바이트코드(.class)로 컴파일 한 후, JVM(Java Virtual Machine)이 해당 바이트코드를 인터프리터 방식으로 실행한다. JVM 알아보기 →

● Python

    - Python은 .py 파일을 바이트코드로 변환한 후, 내부적으로 PVM(Python Virtual Machine)이 바이트코드를 해석하며 실행한다.

 

 

 

 

 

+ Recent posts