tokenize 모듈을 이용해 소스 코드를 여러 개의 토큰으로 쪼갠 다음 토큰을 출력하였습니다. 토큰을 출력해 보면 타입(type)과 실제 문자열(string), 시작 위치(start)와 끝(end) 등의 정보를 알 수 있습니다.
실행결과 TokenInfo(type=59 (ENCODING), string='utf-8', start=(0, 0), end=(0, 0), line='')
TokenInfo(type=1 (NAME), string='def', start=(1, 0), end=(1, 3), line='def func(a, b):\n')
TokenInfo(type=1 (NAME), string='func', start=(1, 4), end=(1, 8), line='def func(a, b):\n')
(중략)
이렇게 얻어진 토큰으로 분석 트리를 만든 다음 추상 구문 트리로 변형합니다.
잠깐만요
파이썬에는 얼마나 많은 토큰 종류가 있을까요?
token 모듈을 사용하면 다음과 같이 파이썬이 사용하는 토큰 종류를 알 수 있습니다.
>>> import token
>>> token.tok_name
{0: 'ENDMARKER', 1: 'NAME', 2: 'NUMBER', 3: 'STRING', 4: 'NEWLINE', 5: 'INDENT', 6: 'DEDENT', 7: 'LPAR', 8: 'RPAR', 9: 'LSQB', 10: 'RSQB', 11: 'COLON', 12: 'COMMA', 13: 'SEMI', 14: 'PLUS', 15: 'MINUS', 16: 'STAR', 17: 'SLASH', 18: 'VBAR', 19: 'AMPER', 20: 'LESS', 21: 'GREATER', 22: 'EQUAL', 23: 'DOT', 24: 'PERCENT', 25: 'LBRACE', 26: 'RBRACE', 27: 'EQEQUAL', 28: 'NOTEQUAL', 29: 'LESSEQUAL', 30: 'GREATEREQUAL', 31: 'TILDE', 32: 'CIRCUMFLEX', 33: 'LEFTSHIFT', 34: 'RIGHTSHIFT', 35: 'DOUBLESTAR', 36: 'PLUSEQUAL', 37: 'MINEQUAL', 38: 'STAREQUAL', 39: 'SLASHEQUAL', 40: 'PERCENTEQUAL', 41: 'AMPEREQUAL', 42: 'VBAREQUAL', 43: 'CIRCUMFLEXEQUAL', 44: 'LEFTSHIFTEQUAL', 45: 'RIGHTSHIFTEQUAL', 46: 'DOUBLESTAREQUAL', 47: 'DOUBLESLASH', 48: 'DOUBLESLASHEQUAL', 49: 'AT', 50: 'ATEQUAL', 51: 'RARROW', 52: 'ELLIPSIS', 53: 'OP', 54: 'AWAIT', 55: 'ASYNC', 56: 'ERRORTOKEN', 57: 'COMMENT', 256: 'NT_OFFSET', 58: 'NL', 59: 'ENCODING'}