더북(TheBook)

2.1.1 스캐닝

첫 번째 단계는 스캐닝(scanning)이다. 렉싱(lexing)이라고도 하는데, 렉시컬 분석(lexical analysis, 어휘 분석)이라고 하면 더 있어 보인다. 의미는 대동소이하다. 나는 마치 수퍼 악당이 뭔가 저지르는 듯한 느낌의 ‘렉싱’을 선호하지만, 이 책에서는 좀 더 일반적인 용어인 ‘스캐닝’을 사용하겠다.

'렉시컬(Lexical)'은 '단어(word)'를 뜻하는 그리스어 '렉스(lex)'에서 유래됐다.

스캐너(scanner 또는 렉서(lexer))는 문자(character)의 선형 스트림(linear stream)을 받아 ‘단어(words)’에 더 가까운 연속적인 청크(chunk, 덩이/뭉치)들로 묶는다. 프로그래밍 언어에서는 이런 단어를 토큰(token)이라고 한다. 어떤 토큰은 (나 ,처럼 단일 문자로 구성된 경우도 있고, 숫자(123), 문자열 리터럴(string literal, "hi!"), 식별자(identifier, min)처럼 여러 문자로 이루어진 토큰도 있다.

소스 파일에는 아무 의미가 없는 문자도 있다. 공백 문자(whitespace)는 대개 중요하지 않다. 주석은 정의에 따라 무시된다. 스캐너는 이런 토큰을 버리고 일련의 의미 있는 토큰들로 정리한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.