Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 토큰이란 무엇일까요? 개념부터 종류까지 쉽게 이해하기

C++ 토큰(Token)이란?

토큰은 C++ 프로그램을 구성하는 가장 작은 기본 단위로, 컴파일러가 의미 있게 해석할 수 있는 최소 요소를 말합니다. 쉽게 비유하면, 문장을 단어로 자르듯이 소스 코드를 컴파일러가 읽을 수 있는 조각으로 나눈 것이라고 할 수 있습니다.

C++ 파서(parser)는 다음과 같은 종류의 토큰을 인식합니다.

  • 식별자(Identifier): 변수, 함수, 클래스 등의 이름
  • 키워드(Keyword): int, if, return처럼 언어가 미리 정의한 예약어
  • 리터럴(Literal): 42, 3.14, 'a'처럼 값 자체를 나타내는 상수
  • 연산자(Operator): +, -, *, ==처럼 연산을 수행하는 기호
  • 구두점 및 분리자(Punctuator): ; , { } ( ) 같은 문법적 기호

이렇게 생성된 토큰들이 모여 하나의 번역 단위(translation unit)를 구성하며, 일반적으로 토큰과 토큰 사이는 공백(white space)으로 구분됩니다.

전처리 토큰(Preprocessing Token)

#include, #define, #ifdef와 같은 전처리 지시문에 사용되는 전처리 토큰은 본격적인 컴파일에 앞서 진행되는 전처리(preprocessing) 단계에서 처리됩니다. 전처리기는 소스 코드를 토큰 스트림으로 변환한 후, 이 결과물을 컴파일러에 전달하는 역할을 담당합니다.

전처리 토큰의 주요 범주는 다음과 같습니다.

  • 헤더 이름(header name)
  • 식별자(identifier)
  • 전처리 숫자(preprocessing number)
  • 문자 리터럴(character literal)
  • 문자열 리터럴(string literal)
  • 그 외 어느 범주에도 속하지 않는 문자들

특히 문자 리터럴과 문자열 리터럴은 C++11부터 도입된 사용자 정의 리터럴(user-defined literal) 형태로 확장될 수 있습니다. 또한 전처리 토큰 역시 공백뿐만 아니라 주석으로도 구분할 수 있습니다.

토큰 분리 규칙: 최장 일치 원칙

파서는 입력 스트림을 왼쪽에서 오른쪽으로 훑어가며, 주어진 문자들로 만들 수 있는 가장 긴 토큰을 우선적으로 생성하는 방식으로 토큰을 분리합니다. 이 규칙은 흔히 '최장 일치(maximal munch)' 원칙이라고 불립니다.

예를 들어 a+++b라는 식이 있다면, 파서는 이를 a, ++, +, b로 해석합니다. a, +, ++, b가 아니라 더 긴 토큰인 ++를 먼저 인식하기 때문입니다. 이러한 특성 때문에 연산자를 연달아 사용할 때는 의도하지 않은 해석이 발생하지 않도록 괄호나 공백으로 명확하게 구분해 주는 것이 좋습니다.