Post

프로그래밍 언어 처리

프로그래밍 언어 처리

개요

작성한 코드가 어떤 과정을 거쳐서 실행되는지에 대해 살펴보자

어셈블리 언어

  • 모든 비트 조합을 외우지 않아도 니모닉을 통해 명령어를 쓸 수 있다.
  • 주소에 레이블(이름)을 붙일 수 있다.
  • 코드에 주석을 달 수 있다.
  • 어셈블리 언어를 기계어 코드로 생성해주는 프로그램을 어셈블러라고 한다.
  • 어셈블러는 변환 과정에서 레이블이나 심볼의 값을 결정해 채워준다.
  • 어셈블러로 더 나은 어셈블러를, 다시 그 어셈블러로 더 나은 어셈블러를 = 부트스트랩

고수준 언어

  • 어셈블리어보다 더 높은 추상화 단계에서 작동하는 언어다.
  • 컴파일러에 의해 소스 코드가 기계어로 번역(컴파일)되어 실행된다.
  • 흔히 반복문 돌릴 때 사용하는 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.

Trending Tags