Lexical Analysis, Syntax Analysis, Parsing, Semantic Analysis   어휘 분석, 구문 분석, 의미 분석, 파싱

(2022-01-16)

Lexer, Lexical Analyzer, 어휘 분석기, 어휘 해석기, Parser, Syntax Analyzer, 구문 분석기, 구문 해석기, 파서, Parse Tree, 파스 트리, Syntax Tree, 구문 트리


1. 언어 분석 과정 요약

  ㅇ  ①  소스 프로그램
  ㅇ  ②  Lexical Analyzer (어휘 분석 : 토큰 분리) 
  ㅇ  ③  Syntactic Analyzer (구문 분석 : 구문 트리 생성)
  ㅇ  ④  Type Checker (의미 분석 : 타입 검사) 
  ㅇ  ⑤  Code Optimizer (코드 최적화)
  ㅇ  ⑥  Code Generator (코드 생성)
  ㅇ  ⑦  기계 코드


2. 어휘 분석(Lexical Analysis), 어휘분석기(Lexical Analyzer,Lexer)

  ㅇ 원시 프로그램을 읽어들여, 토큰이라는 의미있는 문법 단위로 분리하는 것
     - 즉, 토큰들을 생성하는 것 (Tokenizing)

  ㅇ 例) 
     - 명칭 검증 : 변수명 앞에 숫자가 올 수 없음 등의 변수명 검증 처리 (☞ 명명규칙 참조)
     - 식별자,예약어 판단, 대소문자 구분, 줄바꿈 등
     - 분리 순서(토큰화) 例) : 문단 -> 문장 -> 단어 -> 형태소


3. 구문 분석/파싱(Syntax Analysis/Parsing), 구문분석기/파서(Syntactic Analyzer/Parser)구문 문법을 적용하여 분석을 수행하는 것 
     - ① 구문적으로 올바르다는 것을 보증하고,
     - ② 정형화된 형식(구문 트리)으로 변환 함

  ㅇ 점검 : 문법 준수 여부
     - 주로, 구문 구조문법 규칙에 맞는지 여부를 따짐

  ㅇ 출력 : 구문 트리 생성
     - 어휘 분석으로 생성된 토큰을 입력으로 하여,
     - 구조화된 구문 트리를 생성하는 후처리

     * 구문 트리(Syntax Tree) 또는 파스 트리(Parse Tree)
        . 소스 코드(문장)의 문법 구조를 그대로 트리 형식으로 옮겨놓은 구조

  ※ 통상, 구문 분석이 끝나면 (즉, 추상 구문 트리를 생성하면), 
     - 컴파일러에서는 그 내부에서 만 사용하는 중간 코드(Intermediate Code)를 생성하게 됨
     - 굳이, 중간 코드를 생성하는 이유는, 여러 종류의 프로그래밍 언어에 대응하기 위함


4. 의미 분석 (Semantic Analysis)구문 분석 단계에서 얻은 구문 트리를 중심으로 의미를 부여하여, 코드 생성이 가능하게 함
     - 구문 분석의 결과로 생성된 구문 트리를 사용하여, 실행 가능한 중간 코드를 생성하는 것

  ㅇ 의미 분석 例)
     - 변수지역변수인지 전역변수인지를 구별
     - 변수 선언과 참조를 연결하기
     - 타입 검사(Type Checking) 등


5. 통상적인 번역기 과정 例)  (통상, 단계별 분석 : 어휘 분석 → 구문 분석 → 의미 분석)어휘 분석 단계에서, 어휘 분석기(Lexer)는,
     - 일련의 문자들을 토큰으로 구분 함
        . 주로, 이름,수치 리터럴과 같은 작은 단위들을 처리 함
     - 즉, 주어진 입력 문자열로부터 어휘항목들을 추출하고, 
        . 이에 상응하는 분류 토큰(내부 코드)들을 생성하게 됨

  ㅇ 구문 분석 단계에서, 구분 분석기(Parser)는,
     - 토큰들을 입력으로 처리하여 구문 구조를 결정하게 됨
        . 주로, 표현식,문장 등 큰 단위들을 처리 함

  ㅇ 의미 분석 단계에서, 타입 검사기(Type Checker)는,
     - 각 연산자가 부합되는 피연산자를 갖는지 검사를 함
        . 이 단계에서는 주로, 타입 검사(type checking)가 중요한 역할 임

컴파일러
   1. 컴파일   2. 전처리   3. 어휘 분석, 구문 분석, 의미 분석   4. 링커 및 로더   5. 형식 언어   6. 유한상태 머신   7. BNF,EBNF  


Copyrightⓒ written by 차재복 (Cha Jae Bok)               기술용어해설 후원
"본 웹사이트 내 모든 저작물은 원출처를 밝히는 한 자유롭게 사용(상업화포함) 가능합니다"