이 영역을 누르면 첫 페이지로 이동
Coding Groot 블로그의 첫 페이지로 이동

Coding Groot

페이지 맨 위로 올라가기

Coding Groot

코딩 블로그

[Compiler] 1. Lexical Analyzer :: 동작하는 방식

  • 2020.04.09 03:23
  • Programming/Compiler
글 작성자: Coding Groot

* 2019/07/30 - [Programming/Compiler] - [Compiler] 1. Lexical Analyzer :: 소개와 용어 정리에서 이어지는 내용입니다.

지난번 글에서 말했던 개념을 빠르게 복습해봅시다

더보기

Token: (Token Name, 어떤 문자들을 대표하는 Symbol)와 (Token Value, 토큰의 구체적인 속성)의 쌍
(ex) "산술연산자(+, -, *, /, %)", "반복문(for, while)"

Lexeme: 토큰들의 구체적인 예
(ex) "+" -> 산술연산자라는 토큰의 구체적인 예

Lexical Analyzer(Scanner)의 동작 방식에 대해 알아보자

Lexical Analyzer는 input으로 준 문자열을 읽어서 각각의 단어들이 무엇을 의미하는 단어인지 분류를 합니다. 동작하는 것이 문자열을 스캔하는 것 같아서 스캐너라고도 부릅니다. 

동작하는 순서

1. Input(전체 문자열)를 읽습니다.

스캔할 문자들을 가져옵니다. 예를 들어서, 아래에 문자들을 입력받았다고 해봅시다.

printf("hello, world\n");

 

2. 의미 있는 단위로 쪼개고 어떤 단어인지 분류합니다. = 문자열을 Lexeme으로 쪼개고 토큰으로 분류합니다.

* Token을 Token_Value가 생략 가능하면 "Token_Name" 아니라면 "Token_Name(Token_Value들)" 형식으로 표현하겠습니다.

Lexical Analyzer가 "함수(출력, 입력)", "문자열", "세미콜론", "괄호(왼쪽,오른쪽)"라는 토큰을 알고 있다고 합시다.
그러면 Lexical Analyzer는 받은 문자열을 아래와 같이 의미 있는 단위로 분류해줍니다.

// "Token: Lexeme"으로 표현함
함수(출력): printf
괄호(왼쪽): (
문자열: "hello, world"
괄호(오른쪽): )
세미콜론: ; 

 

3. 이렇게 Token으로 분류한 것들을 일정한 형식에 맞춰서 저장합니다. 이렇게 일정한 형식으로 저장한 것을 "Symobol Table"이라고 부릅니다.

저는 Symbol Table을 <Token, Lexeme> 형식으로 만들어보겠습니다.

// SymbolTable.txt
<함수(출력),printf>
<괄호(왼쪽),(>
<문자열,"hello, world">
<괄호(오른쪽),)>
<세미콜론,;>

 

4. 완성한 Symbol Table을 Syntax Analyzer한테 전달합니다.

예를 들어서, 저것을 전역 변수로 저장해 놓는다던가 아래처럼 Syntax Analyzer함수를 호출해서 알려줄 수도 있겠습니다. 

Syntax_Analyzer(SymbolTable.txt);

 

Lexical Analyzer 동작 끝


  • Icons made by Freepik from www.flaticon.com
반응형

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Compiler] 연산자의 Associativity와 Recursion의 연관성

    [Compiler] 연산자의 Associativity와 Recursion의 연관성

    2020.05.10
  • [Compiler] 1. Lexical Analyzer :: 구현하기

    [Compiler] 1. Lexical Analyzer :: 구현하기

    2020.04.09
  • [Compiler] 1. Lexical Analyzer :: 소개와 용어 정리

    [Compiler] 1. Lexical Analyzer :: 소개와 용어 정리

    2019.07.30
  • [Compiler] 0. 컴파일러란 무엇인가?

    [Compiler] 0. 컴파일러란 무엇인가?

    2019.07.21
다른 글 더 둘러보기

정보

Coding Groot 블로그의 첫 페이지로 이동

Coding Groot

  • Coding Groot의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록
  • 소개
  • 블로그 저작권

카테고리

  • 분류 전체보기 (186)
    • Git (23)
      • Git Tutorial (9)
      • Git Note (7)
      • Git Lecture (7)
    • Programming Language (1)
      • C (2)
      • C Sharp (5)
      • Java (4)
      • JavaScript (7)
      • Julia (5)
      • Python (4)
    • Programming (8)
      • Algorithm (2)
      • Compiler (5)
      • Data Structure (0)
      • Web (12)
      • NestJS (2)
    • DevOps, Infra (36)
      • Apple (6)
      • Cloud (15)
      • Database (1)
      • Network (4)
      • Linux (8)
    • Game Programming (11)
      • Unity Tutorial (5)
      • Unity Note (6)
    • Hardware Design (1)
      • Digital Circuit (1)
    • Note (20)
      • Coffee (2)
      • Retrospect (15)
      • Reading List (14)
    • Mathematics (1)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • aws
  • 서평
  • git
  • 회고
  • 한빛미디어
  • tutorial
  • javascript
  • Github
  • 전체 보기…

정보

Coding Groot의 Coding Groot

Coding Groot

Coding Groot

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기

나의 외부 링크

  • GitHub
  • SlideShare
  • 유니티 2020 수업
  • TIL Blog
  • 모도코

방문자

  • 전체 방문자
  • 오늘
  • 어제
Powered by Tistory / Kakao. Copyright © Coding Groot.

티스토리툴바