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

(2018-10-13)

Lexer, Lexical Analyzer, 어휘 분석기, 어휘 해석기, Parser, Syntax Analyzer, 구문 분석기, 구문 해석기, 파서

1. 분석 과정 요약

  ※ 소스 프로그램 => Lexical Analyzer (어휘 분석 : 토큰 분리) 
                   => Syntactic Analyzer (구문 분석 : 구문 트리 생성)
                   => Type Checker (의미 분석 : 형 검사) 
                   => Code Optimizer => Code Generator => 기계 코드


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

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

  ㅇ 例) 
     - 명칭 검증 : 변수명 앞에 숫자가 올 수 없음 등의 변수명 검증 처리
     - 분리 순서(토큰화) 例) : 문단 -> 문장 -> 단어 -> 형태소


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

 
        최근수정     요약목록(시험중)     참고문헌