컴파일러

- 프로그래밍 언어를 컴퓨터에서 실행될 수 있는 형태로 번역하는 소프트웨어
- 넓은 의미로는 텍스트 번역기
➡️ 세상의 모든 프로그램은 보는 관점에 따라 컴파일러가 될 수 있음
- 컴파일러의 중요한 역할은 번역 과정에서 탐지되는 원시 프로그램의 에러를 보고하는 것
분석-통합 모델
분석
- 원시 프로그램을 구성 요소로 분리하고, 원시 프로그램의 중간 표현을 생성
- 원시 프로그램의 문법상 오류를 탐지한다면 유익한 메세지를 제공해 사용자가 정확한 조치를 취하게 함
- 원시 프로그램의 정보를 심볼 테이블에 저장
- 원시 프로그램이 암시하는 연산이 결정되고, 트리라고 불리는 계층적 구조로 기록됨
분석 수행 예시
- Structure editors : 소스 프로그램을 작성하기 위한 일련의 명령을 입력으로 받고, 이 프로그램 텍스트를 분석하여 적절한 계층적 구조를 적용함. 프로그램 작성에 유용한 추가 작업을 수행.
- 입력이 올바르게 형성되었는지 확인
- 키워드를 자동으로 제공하고(예: 사용자가 'while'을 입력할 때 'do'를 제공)
- Pretty printers : 프로그램을 분석하여 프로그램의 구조가 명확히 드러나도록 인쇄함
- 주석은 특별한 글꼴로 표시
- 문장은 계층 구조의 깊이에 따라 들여쓰기로 표현
- Static checkers : 프로그램을 분석하여 실행하지 않고도 잠재적인 오류를 찾으려고 시도함. 이 분석 과정은 최적화 컴파일러에서와 유사함
- 특정 변수가 정의되기 전에 사용될 수 있음을 감지
- 포인터로 실제 변수를 사용하려는 시도와 같은 논리적 오류를 감지
- Interpreters : 번역된 대상 프로그램을 생성하는 대신, 소스 프로그램이 암시하는 작업을 수행함
통합
- 중간 표현과 심볼 테이블을 기반으로 타겟 프로그램을 구성함
컴파일러 활용
- 컴파일러는 전통적으로 프로그래밍 언어(ex. 포트란)를 컴퓨터가 이해할 수 있는 기계어로 바꾸는 프로그램
- 그러나, 컴파일러 기술은 다양한 분야에서 자주 사용됨
컴파일러 기술 활용 예시
1. Text formatters : 입력된 텍스트를를 예쁘게 만드는 도구
2. Silicon compilers : 기존의 프로그래밍 언어와 유사하거나 동일한 소스 언어를 사용함. 그러나 변수는 메모리 위치가 아닌 논리적 신호로 해석됨.
3. Query interpreters : 관계형 및 불 연산자를 포함한 명제를 데이터베이스에서 해당 조건에 맞는 레코드를 검색하는 명령으로 변환함