코드의 일생 01

한줄이의첫 출근

1 + 2는 어디로 갈까?

누군가 코드를 한 줄 적었어.

그런데 이 코드는 컴퓨터 안에서 어떤 일을 겪게 될까?

한줄이의 첫 출근을 따라가 보자.

오늘의 이상한 질문1 + 2는 몇 조각이 될까?

톡톡이는 이 코드를 작은 조각으로 나눠 다음 친구에게 건네려고 해.

과연 몇 개가 될까?

그렇게 생각했구나.

톡톡이가 실제로 어떻게 나누는지 보자.

만화

장면 1 첫 출근

한줄이어? 나 방금 태어났는데.벌써 출근이라고?

장면 2 톡톡이의 등장

톡톡잠깐. 그냥 들어가면 안 돼.

한줄이왜? 나 그냥 한 줄인데?

톡톡한 줄이어도 안에 뭐가 들었는지는 봐야지.

장면 3 빈칸의 정체

톡톡숫자 하나, 빈칸, 더하기, 빈칸, 숫자 하나.

한줄이빈칸도 같이 데려갈 거야?

톡톡글쎄. 어떤 조각이 남는지 잘 봐.

장면 4 세 조각이 된 한줄이

한줄이어? 글자는 다섯 칸인데 조각은 셋이네?

톡톡그렇지. 글자 수랑 조각 수는 꼭 같지 않거든.

한줄이나 생각보다 복잡한 애였구나.

장면 5 다음 문 앞에서

가지조각은 잘 받았어.그런데 이걸 어떻게 묶어야 하지?

한줄이아직도 할 일이 남았어?

톡톡내 일은 여기까지. 다음은 가지 차례야.

한줄이의 첫 출근은 아직 끝나지 않았다.

작은 실험

톡톡의 가위

빈칸이 달라도 똑같이 나뉠까?

이번에는 네가 식을 골라 봐.

톡톡이가 어떤 조각을 만들어 내는지 살펴보자.

고를 식

토파즈 컴파일러 5.21.1이 나눈 그대로

글자

  1. 1
  2. 빈칸
  3. +
  4. 빈칸
  5. 2

조각

  1. 1숫자
  2. +더하기 기호
  3. 2숫자

글자 5칸, 조각 3개

토파즈 컴파일러 5.21.1이 나눈 그대로

글자

  1. 1
  2. +
  3. 2

조각

  1. 1숫자
  2. +더하기 기호
  3. 2숫자

글자 3칸, 조각 3개

토파즈 컴파일러 5.21.1이 나눈 그대로

글자

  1. 1
  2. 빈칸
  3. 빈칸
  4. 빈칸
  5. +
  6. 빈칸
  7. 빈칸
  8. 빈칸
  9. 2

조각

  1. 1숫자
  2. +더하기 기호
  3. 2숫자

글자 9칸, 조각 3개

토파즈 컴파일러 5.21.1이 나눈 그대로

글자

  1. 1
  2. 2
  3. 빈칸
  4. +
  5. 빈칸
  6. 3

조각

  1. 12숫자
  2. +더하기 기호
  3. 3숫자

글자 6칸, 조각 3개

토파즈 컴파일러 5.21.1이 나눈 그대로

글자

  1. 1
  2. 빈칸
  3. +
  4. 빈칸
  5. 2
  6. 빈칸
  7. +
  8. 빈칸
  9. 3

조각

  1. 1숫자
  2. +더하기 기호
  3. 2숫자
  4. +더하기 기호
  5. 3숫자

글자 9칸, 조각 5개

첫 번째 발견

1 + 2와 1+2를 비교해 봐.

확인하기

토파즈 컴파일러 5.21.1이 나눈 그대로

1 + 2글자 5칸, 조각 3개

  1. 1
  2. 빈칸
  3. +
  4. 빈칸
  5. 2
  1. 1숫자
  2. +더하기 기호
  3. 2숫자

1+2글자 3칸, 조각 3개

  1. 1
  2. +
  3. 2
  1. 1숫자
  2. +더하기 기호
  3. 2숫자

1 + 2글자 9칸, 조각 3개

  1. 1
  2. 빈칸
  3. 빈칸
  4. 빈칸
  5. +
  6. 빈칸
  7. 빈칸
  8. 빈칸
  9. 2
  1. 1숫자
  2. +더하기 기호
  3. 2숫자

빈칸의 개수는 다르지만, 이 식에서 다음 단계로 넘길 숫자와 더하기 기호 조각은 같아.

두 번째 발견

이번에는 12 + 3을 골라 봐.

확인하기

12가 1과 2로 나뉘지 않았지?

숫자 두 글자가 하나의 조각이 될 수도 있어.

진짜 속사정

방금 본 조각의 이름

톡톡이가 만든 1, +, 2 같은 조각을 토큰이라고 해.

컴파일러가 코드의 글자를 훑고 이런 조각을 알아보는 일을 어휘 분석이라고 불러.

토큰에는 어떤 종류인지, 원래 어떤 글자였는지, 소스의 어느 자리에 있었는지 같은 정보가 담길 수 있어.

실제로는 이렇게 기록돼

토파즈 컴파일러 5.21.1이 나눈 그대로

1 + 2
조각종류소스에서의 위치
1integer숫자1번째 칸
+plus더하기 기호3번째 칸
2integer숫자5번째 칸

컴파일러는 조각마다 몇 번째 칸에 있었는지도 적어 둬. 그래서 문제가 생기면 정확한 자리를 가리킬 수 있어.

빈칸은 정말 쓸모없을까?

그렇지는 않아.

방금 본 덧셈에서는 빈칸을 늘리거나 줄여도 숫자와 더하기 기호는 같은 조각으로 나뉘었어.

그런데 어떤 코드에서는 줄바꿈 하나가 뜻을 바꾸기도 해.

그 이야기는 한줄이의 여행에서 다시 만나게 될 거야.

그리고 아직 1 + 2를 계산하지도 않았어.

조각을 어떻게 묶을지는 가지가 맡은 다음 일이야.

한 줄 정리

오늘 알게 된 것

컴파일러는 코드의 글자를 훑어 토큰이라는 조각을 만든다.

그럼 이건 몇 조각일까?

10 + 20
답 보기

세 조각이야.

10+20

10과 20은 각각 두 글자로 되어 있지만, 숫자 토큰은 하나씩이거든.

이제 톡톡이가 하는 일을 조금 알겠지?

속사정 도감낱말 다시 보기컴파일러토큰

다음 이야기

제2화가지의 조립 시간

톡톡이는 조각을 잘 나눴어.

그런데 가지가 이상한 코드를 발견했어.

1 + * 2

가지잠깐. 이건 어떻게 묶으라는 거지?

기호 둘이 나란히 붙은 이 한 줄을 가지는 무사히 묶을 수 있을까?