프로그래밍 언어 처리
프로그래밍 언어 처리
개요
작성한 코드가 어떤 과정을 거쳐서 실행되는지에 대해 살펴보자
어셈블리 언어
- 모든 비트 조합을 외우지 않아도 니모닉을 통해 명령어를 쓸 수 있다.
- 주소에 레이블(이름)을 붙일 수 있다.
- 코드에 주석을 달 수 있다.
- 어셈블리 언어를 기계어 코드로 생성해주는 프로그램을 어셈블러라고 한다.
- 어셈블러는 변환 과정에서 레이블이나 심볼의 값을 결정해 채워준다.
- 어셈블러로 더 나은 어셈블러를, 다시 그 어셈블러로 더 나은 어셈블러를 = 부트스트랩
고수준 언어
- 어셈블리어보다 더 높은 추상화 단계에서 작동하는 언어다.
- 컴파일러에 의해 소스 코드가 기계어로 번역(컴파일)되어 실행된다.
- 흔히 반복문 돌릴 때 사용하는 i, j, k, l, m, n은 포트란의 잔재다.(신기)
구조적 프로그래밍
- 포트란, 베이직 같은 언어는 비구조적 언어다.
- C, C++, JAVA, PHP, Phython, JS 등이 구조적 언어다.
- 구조적 프로그래밍은 제어 흐름대로 실행되기 때문에 더 이해하기 쉽다.
어휘 분석
- 코드를 기호에서 토큰으로 변환하는 과정이다. (문자 → 단어)
상태 기계
- 상태로 이뤄진 집합과 한 상태에서 다른 상태로 전이되는 원인의 목록으로 이뤄진다.
- 즉, 특정 조건이나 이벤트 발생 시 한 상태에서 다른 상태로 변화하는 시스템의 전환에 대한 모델링이다.
정규식
- 언어를 지정하기 위한 언어로 패턴 매칭에서 중요하다.
- 정규화를 사용해 어휘 분석을 자동화하는 LEX가 있다.
단어에서 문장으로
- 이제 단어를 문법에 맞는 문장으로 만들어야 한다.
파스 트리
- 고수준 언어는 컴파일러 외에도 인터프리터로 컴파일할 수도 있다.
- 기계에 사용헐 기계어를 만드는 것이 아닌 가상 머신에서 실행된다.
- 일부 인터프리터 언어는 인터프리터에 의해 직접 실행되기도 한다.
- 나중에 해석될 수 있게 중간 언어로 컴파일 되기도 한다.(파이썬, 자바, JS)
- 컴파일러 방식보다 느리다.
- 파스 트리는 언어 문법으로 만들어낸 유향 비순환 그래프 데이터 구조다.
인터프리터
- 인터프리터가 파스 트리를 실행한다.
- 파스 트리를 즉시 실행할 수도 있고, 파일에 저장 후 나중에 읽어서 실행할 수도 있다.
- 어휘 분석 → 문법 파싱 → 파스 트리 → 전용 기계 실행(가상 머신)
컴파일러
- 어휘 분석 → 문법 파싱 → 파스 트리 → 코드 생성 → 어셈블리어 → 어셈블러 → 기계어
- 간단하게 말하면 C언어를 어셈블리어로, 어셈블리어를 기계어로 변환해서 실행한다는 것이다.
최적화
- 대부분의 언어에서 파스 트리와 코드 생성기 사이 과정에서 옵티마이저 단계가 존재한다.
- 파스 트리를 분석해 더 효율적인 코드를 생성하게 파스 트리를 변환한다.
하드웨어를 다룰 때 주의하라
- 전원을 켜고 끄기 위해 값만 바꾸는 코드를 최적화 하는 경우 옵티마이저는 값을 쓰기만 하고 읽지 않아 해당 코드를 제거하는 최적화 과정을 진행할 수도 있다.
- 그래서 C언어 같은 경우에는
volatile
키워드를 사용해 최적화를 제외할 수도 있다.
This post is licensed under CC BY 4.0 by the author.