[Compiler] 2. Lexical Analyzer Overview
Lexical Analyzer가 하는 일
- 소스 프로그램의 입력 캐릭터를 읽는다.
- lexeme라고 불리는, 의미있는 문자열로 입력 문자를 그룹화한다.
- 토큰의 시퀀스를 생성한다.
- symbol table에 토큰의 정보를 저장한다.
- 토큰들을 syntax analyzer로 전송한다.
Token
- Token은 말하자면, 문법적인 카테고리이다.
e.g. 자연어: 동사, 형용사, 명사 / 프로그래밍언어: 식별자, 숫자, 연산자 등
- Token은 그 이름과 (선택적으로) 그 값을 나타낸 쌍으로 구성된다.
- 종류
- Keyword: IF(if), ELSE(else), FLOAT(float) 등
- Operator: ADD(+), COMPARISON(>,<,==,&& 등) 등
- Identifier: ID(모든 종류의 식별자)
- Constant: NUMBER(모든 종류의 숫자 상수), INTEGER, REAL, LITERAL
- Punctuation symbol: LPAREN( ( ), Comma(,)
- Whitespace: 공백, 줄바꿈, 탭 등의 공집합이 아닌 문자열 (보통 무시함)
Lexeme
- Token의 패턴(즉 토큰이 정의하는 규칙의 집합)에 일치하는 문자열이다.
e.g. Token: IDENTIFIER / Lexeme: pi, score, i, j, var1 등