토큰(Tokens)

토큰(Tokens)

Go 언어의 어휘를 이루는 가장 작은 단위가 토큰이에요. 소스 코드를 읽는 컴파일러 입장에서, 입력을 어떤 단위로 쪼개서 이해하는지 살펴볼게요.

출처: Go Specification

본문

Tokens form the vocabulary of the Go language.

토큰은 Go 언어의 어휘(vocabulary)를 이룬다고 해요. 그리고 토큰은 네 가지 부류(class)로 나뉘는데요, 바로 identifiers(식별자), keywords(키워드), operators and punctuation(연산자와 구두점), **literals(리터럴)**이에요. 지금은 각각이 뭔지 다 알 필요는 없고, '토큰은 네 종류로 나뉜다'는 큰 그림만 잡아 두면 돼요.

White space, formed from spaces (U+0020), horizontal tabs (U+0009), carriage returns (U+000D), and newlines (U+000A), is ignored except as it separates tokens that would otherwise combine into a single token.

이 네 부류와 함께 사실 토큰은 아니지만 토큰을 나누는 데 중요한 게 **white space(공백 문자)**예요. 공백 문자는 스페이스(U+0020), 가로 탭(U+0009), 캐리지 리턴(U+000D), 개행(U+000A)으로 구성되는데, 기본적으로는 무시돼요. 단, 한 가지 예외가 있어요. 서로 붙으면 하나의 토큰으로 합쳐져 버릴 토큰들을 구분해 주는 역할을 할 때만 의미를 가지죠. 예를 들어 ab 사이에 공백이 없으면 ab라는 하나의 토큰으로 읽혀 버리니까, 그런 경우에만 토큰을 나누는 기준이 되는 거예요.

Also, a newline or end of file may trigger the insertion of a semicolon.

그리고 개행(newline)이나 파일의 끝(end of file)은 때때로 세미콜론이 자동으로 삽입되게 만들 수도 있어요. Go는 줄 끝에 세미콜론을 명시적으로 안 찍어도 되는 언어인데, 그걸 가능하게 해 주는 규칙이 바로 이 부분에서 나와요. 자세한 내용은 Semicolons 절에서 다룬답니다.

While breaking the input into tokens, the next token is the longest sequence of characters that form a valid token.

마지막으로, 입력을 토큰으로 쪼갤 때 적용되는 규칙이 하나 더 있어요. 바로 다음 토큰은 유효한 토큰을 이루는 가장 긴 문자 시퀀스라는 거예요. 즉 가능한 한 최대한 길게 붙여서 토큰을 잘라낸다는 뜻이고, 그래야 x++ 같은 경우에 x, +, +로 쪼개지는 게 아니라 x++로 올바르게 나눌 수 있어요. 이 규칙 덕분에 토큰 분리가 항상 똑같은 결과를 내는 거예요.

더 알아보기