컴파일러 - 어휘 분석
어휘 분석(lexical analysis) 1. 개요 어휘 분석(lexical analysis)은 컴파일러의 첫 번째 단계로, 원시 소스 코드(문자열)의 연속을 의미 있는 단위인 토큰(token) 으로 분리하고 각 토큰의 종류를 식별하는 과정이다. 이 단계에서는 공백, 주석 등을 제거하여 후속 단계인 구문 분석(parser)이 다루기 쉬운 형태로 변환...
어휘 분석(lexical analysis) 1. 개요 어휘 분석(lexical analysis)은 컴파일러의 첫 번째 단계로, 원시 소스 코드(문자열)의 연속을 의미 있는 단위인 토큰(token) 으로 분리하고 각 토큰의 종류를 식별하는 과정이다. 이 단계에서는 공백, 주석 등을 제거하여 후속 단계인 구문 분석(parser)이 다루기 쉬운 형태로 변환...
실행파일 구조 1. 개요 우리가 프로그램을 사용할 때 많은 파일들을 접하고 윈도우의 경우 더블클릭으로 리눅스의 경우 명령어로 간단히 실행하지만 실제로 실행하는 가능한 파일의 형태는 한정되어있다. 2. PE FILE FORMAT (윈도우) 윈도우에서 실행 가능한 파일은 모두 PE 파일 포맷을 따르며 해당 파일의 확장자는 아래와 같다. 실행 파일...
C++ 람다표현식 1. 개요 C++ 람다 표현식(Lambda Expression)은 익명 함수(anonymous function)를 간편하게 정의하고 사용할 수 있게 해 주는 문법이다. 주로 일회성 콜백이나 함수 객체로 사용할 때 유용하다. 2. 기본 사용법 [Capture Clause] (parameters) -> return_type { ...
C++ 쓰레드 1. 개요 C++에서 쓰레드(thread)란 하나의 프로세스 내에서 독립적으로 실행되는 흐름을 말한다. 쓰레드를 이용하면 CPU 자원을 효율적으로 활용하여 동시에 여러 작업을 수행할 수 있다. C++11부터는 헤더를 통해 표준 라이브러리 차원에서 쓰레드를 지원하며, 운영체제별 네이티브 쓰레드를 추상화하여 제공한다. 1) 장점 병...
C++ 상속 1. 개요 상속이란 객체 지향 프로그래밍에서 부모 클래스(슈퍼 클래스)에서 자식 클래스(서브 클래스)로 클래스의 속성과 메서드를 물려주는 것을 말한다. 부모 클래스에서 정의된 속성과 메서드는 자식 클래스에서 사용가능하며, 부모 클래스에서 받은 메서드를 다시 정의할 수도 있다. 위 구조를 잘 사용하면 성능과 유지보수에 좋으며 아래와 같은...
C++ 예외처리 1. 개요 C++의 예외 처리(Exception Handling)는 프로그램 실행 중 발생할 수 있는 오류(예외 상황)를 분리하고, 이를 포괄적이고 안전하게 다루기 위한 메커니즘이다. 전통적인 오류 코드는 반환값이나 전역 변수로 처리하지만, 예외 처리를 이용하면 오류 발생 지점을 호출 지점으로 강제 전파하고, 집중된 위치에서 일괄 처...
C++ 템플릿 1. 개요 코드는 같은데 자료형만 다른 것을 컴파일러가 만들어주는 것이다. 딱히, 성능에는 이득이 없고 개발자만 편한 기능이지만 이 기능은 매우 많이 사용되고 있다. 2. 템플릿 함수 템플릿 함수는 함수의 매개 변수 또는 구현에 사용되는 자료형을 결정하여 생성한다. 일반적으로는 {반환형} {함수 이름} ( {매개변수} ) { {함수...
C++ 자주 쓰는 STL 1. STL 개요 STL(Standard Template Library)는 프로그래밍 언어를 위해 처음 설계한 소프트웨어 라이브러리이다. 원래라면 C++에만 있는건 아니라는 뜻이다. 하지만 C++ 표준 라이브러리에 많은 영향을 끼쳤으며 이는 컨테이너, 알고리즘, 반복자, 기능으로 구분된다. 1) 컨테이너(Container...
C++ 클래스 1. 개요 기본적으로는 특정 객체를 생성하기 위한 틀과 같다. 클래스를 정의하고 해당 클래스로 객체를 만들어야 비로소 사용할 수 있다. 기본적으로 객체 지향 프로그램에서 빠질 수 없는 기본중의 기본으로 C++에서도 당연히 클래스를 지원한다. C++ 에서 클래스는 두가지 관점으로 나눠서 생각할 수 있는데, 값처럼 사용하는 것이 첫번...
C++ 파일 입출력 파일 입출력을 할 때 C 형식으로 받아오고 쓰는 경우가 많아서 C++ 형식으로는 어떻게 하는게 좋은지 정리를 하려고 한다. 1. 도입 우리가 어떤 제품으로써 프로그램을 짜게되면 필연적으로 파일을 다루게 된다. 여기서 말하는 파일이란 txt와 같은 텍스트 파일을 말할 수도 있고, 특정 포맷으로 이루어진 바이너리 파일일 수도 있다....