장면 1 첫 출근
한줄이어? 나 방금 태어났는데.벌써 출근이라고?
코드의 일생 01
1 + 2는 어디로 갈까?
누군가 코드를 한 줄 적었어.
그런데 이 코드는 컴퓨터 안에서 어떤 일을 겪게 될까?
한줄이의 첫 출근을 따라가 보자.
그렇게 생각했구나.
톡톡이가 실제로 어떻게 나누는지 보자.
한줄이어? 나 방금 태어났는데.벌써 출근이라고?
톡톡잠깐. 그냥 들어가면 안 돼.
한줄이왜? 나 그냥 한 줄인데?
톡톡한 줄이어도 안에 뭐가 들었는지는 봐야지.
톡톡숫자 하나, 빈칸, 더하기, 빈칸, 숫자 하나.
한줄이빈칸도 같이 데려갈 거야?
톡톡글쎄. 어떤 조각이 남는지 잘 봐.
한줄이어? 글자는 다섯 칸인데 조각은 셋이네?
톡톡그렇지. 글자 수랑 조각 수는 꼭 같지 않거든.
한줄이나 생각보다 복잡한 애였구나.
가지조각은 잘 받았어.그런데 이걸 어떻게 묶어야 하지?
한줄이아직도 할 일이 남았어?
톡톡내 일은 여기까지. 다음은 가지 차례야.
한줄이의 첫 출근은 아직 끝나지 않았다.
작은 실험
빈칸이 달라도 똑같이 나뉠까?
이번에는 네가 식을 골라 봐.
톡톡이가 어떤 조각을 만들어 내는지 살펴보자.
토파즈 컴파일러 5.21.1이 나눈 그대로
글자
조각
1숫자+더하기 기호2숫자글자 5칸, 조각 3개
토파즈 컴파일러 5.21.1이 나눈 그대로
글자
조각
1숫자+더하기 기호2숫자글자 3칸, 조각 3개
토파즈 컴파일러 5.21.1이 나눈 그대로
글자
조각
1숫자+더하기 기호2숫자글자 9칸, 조각 3개
토파즈 컴파일러 5.21.1이 나눈 그대로
글자
조각
12숫자+더하기 기호3숫자글자 6칸, 조각 3개
토파즈 컴파일러 5.21.1이 나눈 그대로
글자
조각
1숫자+더하기 기호2숫자+더하기 기호3숫자글자 9칸, 조각 5개
첫 번째 발견
1 + 2와 1+2를 비교해 봐.
토파즈 컴파일러 5.21.1이 나눈 그대로
1 + 2글자 5칸, 조각 3개
1숫자+더하기 기호2숫자1+2글자 3칸, 조각 3개
1숫자+더하기 기호2숫자1 + 2글자 9칸, 조각 3개
1숫자+더하기 기호2숫자빈칸의 개수는 다르지만, 이 식에서 다음 단계로 넘길 숫자와 더하기 기호 조각은 같아.
두 번째 발견
이번에는 12 + 3을 골라 봐.
12가 1과 2로 나뉘지 않았지?
숫자 두 글자가 하나의 조각이 될 수도 있어.
톡톡이가 만든 1, +, 2 같은 조각을 토큰이라고 해.
컴파일러가 코드의 글자를 훑고 이런 조각을 알아보는 일을 어휘 분석이라고 불러.
토큰에는 어떤 종류인지, 원래 어떤 글자였는지, 소스의 어느 자리에 있었는지 같은 정보가 담길 수 있어.
토파즈 컴파일러 5.21.1이 나눈 그대로
| 조각 | 종류 | 소스에서의 위치 |
|---|---|---|
1 | integer숫자 | 1번째 칸 |
+ | plus더하기 기호 | 3번째 칸 |
2 | integer숫자 | 5번째 칸 |
컴파일러는 조각마다 몇 번째 칸에 있었는지도 적어 둬. 그래서 문제가 생기면 정확한 자리를 가리킬 수 있어.
그렇지는 않아.
방금 본 덧셈에서는 빈칸을 늘리거나 줄여도 숫자와 더하기 기호는 같은 조각으로 나뉘었어.
그런데 어떤 코드에서는 줄바꿈 하나가 뜻을 바꾸기도 해.
그 이야기는 한줄이의 여행에서 다시 만나게 될 거야.
그리고 아직 1 + 2를 계산하지도 않았어.
조각을 어떻게 묶을지는 가지가 맡은 다음 일이야.
오늘 알게 된 것
컴파일러는 코드의 글자를 훑어 토큰이라는 조각을 만든다.
그럼 이건 몇 조각일까?
10 + 20세 조각이야.
10+2010과 20은 각각 두 글자로 되어 있지만, 숫자 토큰은 하나씩이거든.
이제 톡톡이가 하는 일을 조금 알겠지?
다음 이야기
톡톡이는 조각을 잘 나눴어.
그런데 가지가 이상한 코드를 발견했어.
1 + * 2가지잠깐. 이건 어떻게 묶으라는 거지?
기호 둘이 나란히 붙은 이 한 줄을 가지는 무사히 묶을 수 있을까?