컴파일이란 어떤 언어의 코드 전체를 다른 언어로 바꿔주는 과정이다. 그리고 이것을 자동으로 수행해주는 소프트웨어를 컴파일러라고 한다.
코드가 실행되기 전 컴파일러를 거쳐서 기계어로 모두 변환되어 실행되는 프로그래밍 언어를 컴파일 언어라고 한다. 출처:나무위키
1.어휘 분석(Lexical Analysis): 소스 코드를 토큰(token)이라는 기본 단위로 분해합니다. 각 토큰은 키워드, 식별자, 연산자 등 프로그램의 기본 구성 요소를 나타냅니다.
2.구문 분석(Syntax Analysis): 어휘 분석을 통해 얻은 토큰들이 언어의 문법에 맞게 배열되어 있는지 확인하고, 구문 트리(Syntax Tree)를 생성합니다.
3.의미 분석(Semantic Analysis): 프로그램의 의미적 오류를 체크하고, 데이터 타입의 일관성 등을 검사합니다.
4.중간 코드 생성(Intermediate Code Generation): 플랫폼에 독립적인 중간 코드를 생성합니다.
5.최적화(Optimization): 생성된 중간 코드를 분석하여 실행 속도를 높이거나 메모리 사용량을 줄이는 등의 최적화를 수행합니다.
6.기계어 코드 생성(Code Generation): 최종적으로 컴퓨터가 직접 실행할 수 있는 기계어 코드로 변환합니다.
7.링크(Linking): 여러 개의 소스 파일이 있는 경우, 이들을 결합하여 최종 실행 파일을 만듭니다.
컴파일러의 대표적인언어:C,C++,Java,C#등의 언어
인터프리터(Interpreter)는 소스 코드를 한 줄씩 읽고, 그 줄을 바로 실행하는 프로그램입니다. 컴파일러가 소스 코드를 한 번에 기계어로 변환해 실행 파일을 만드는 것과 달리, 인터프리터는 코드의 각 명령을 즉시 해석하고 실행합니다.
1.즉시 실행: 소스 코드를 작성한 후 별도의 컴파일 과정 없이 바로 실행할 수 있습니다. 코드의 실행 결과를 즉시 확인할 수 있어, 개발 및 디버깅이 용이합니다.
2.코드 이식성: 인터프리터는 특정 기계어로 번역하지 않기 때문에, 실행 환경만 갖추면 동일한 소스 코드가 다양한 플랫폼에서 실행될 수 있습니다.
3.느린 실행 속도: 인터프리터는 소스 코드를 한 줄씩 읽고 해석하기 때문에, 컴파일된 코드에 비해 실행 속도가 느린 편입니다. 매번 실행 시마다 해석이 필요하기 때문에 반복적인 작업에서는 비효율적일 수 있습니다.
4.유연성: 코드가 실행 중일 때도 수정이 가능하고, 동적 타이핑(dynamic typing)과 같은 유연한 프로그래밍이 가능하여 스크립트 언어에 주로 사용됩니다.
인터프리터의 대표적인언어:Python,JavaScript,Ruby,PHP 등의 언어
인터프리터는 빠른 개발 주기와 코드 수정이 필요한 환경에서 유용하게 사용되며, 특히 스크립트 언어에서 많이 활용됩니다.