1. 파싱 Parsing

주어진 데이터나 텍스트를 성분으로 분해하고, 구조적으로 이해할 수 있도록 하는 것.

컴퓨터 과학에서는.
문자열을 의미있는 토큰으로 분해하고, 이 토큰들로 이루어진 Parse Tree 를 만드는 과정.

구문 분석 (구문해석, 문장해석) 또는 파싱은 문장을 이루고 있는 구성 성분을 분해하고 그들 사이의 위계 관계를 분석해 문장의 구조를 결정하는 것을 말한다.

쉽게 말하면 주어진 데이터나 텍스트를 해석하여 그 문법적인 구조를 이해할 수 있도록 하는 것을 뜻하며, Computer Science에서는 문자열을 의미있는 토큰으로 분해하고, 이 토큰들로 이루어진 파스 트리를 만드는 과정을 일컫는다.


2️. 파서 Parser

프로그램 소스 코드, 마크업 문서, 데이터 형식을 파싱하는 프로그램

컴파일러의 일부로 프로그래밍 언어의 소스 코드, HTML과 같은 마크업 문서, 데이터 형식 등의 데이터를 분석해 그 구조를 해석하고, 그 문장의 구조를 알아내는 프로그램이다.

또한 입력되는 소스코드, 문서 등을 해석하여 구문 분석 트리를 만들 수 있으며, 혹은 파서를 만든 의도에 따라 트리가 아니라 입력 데이터의 특정 부분만을 추출하기도 한다.


3. 파싱의 주요 단계

(1) 토큰화

파싱은 입력 데이터 혹은 문장을 의미 있는 가장 작은 단위(Token)로 쪼개는 토큰화를 가장 먼저 한다.

예시 문장 : The cat sat on the mat.

1
2
3
4
# Tokenization

-> 단어 : The / cat / sat / on / the / mat
-> 구두점 : .

(2) 구문 분석

토큰 간의 관계를 분석해서 문법적인 구조를 확인하는 단계. 문장 내의 주어, 동사, 목적어 등의 구조를 파악한다.

1
2
3
4
5
# Syntax Analysis

-> 주어 : The cat
-> 동사 : sat
-> 목적어 : on the mat

(3) 의미 분석

문장의 의미를 분석하고, 의미적으로 유효한지 확인하는 단계. 주로 단어의 의미와 문맥을 고려한다.

1
2
3
# 의미 분석

-> 

(4) AST (Abstract Syntax Tree) 생성

문장의 구조를 트리 형태로 나타내는 AST를 생성한다.

수식을 예로 들면

2 + 3 * 4

1
2
3
4
5
6
7
8
9
# Tokenization
-> 숫자 : 2, 3, 4
-> 연산자 : +, *

# 구문 분석
-> *의 우선순위가 +보다 높으므로 *를 먼저 수행한다.

# 의미 분석
-> 3과 4의 곱에 2를 더하는 것을 말한다.


4️. 주요 파싱의 종류

(1) HTML 파싱

웹 브라우저가 HTML 문서를 받아서 해석하는 과정에서 파싱은 주요 단계이다. HTML 파서는 HTML 문서를 의미 있는 토큰으로 나누고, 이를 기반으로 문법 규칙을 검사하여 DOM(문서 객체 모델)을 생성한다.

(2) 컴파일러

프로그래밍 언어의 코드를 읽어서 기계어로 변환하는 컴파일러는 파싱 단계에서 소스 코드를 의미 있는 구조로 변환한다. 이후의 단계에서는 이를 바탕으로 기계어 코드를 생성한다.

(3) JSON 파싱

JSON 형식의 문자열을 읽어서 파싱하는 과정에서는 문자열을 토큰으로 나누고, 그 토큰들의 구조를 분석하여 객체나 배열 등을 생성한다.


5️. Reference

위키백과 구문분석 : https://ko.wikipedia.org/wiki/%EA%B5%AC%EB%AC%B8%EB%B6%84%EC%84%9D
위키백과 파스트리 : https://ko.wikipedia.org/wiki/%ED%8C%8C%EC%8A%A4
%ED%8A%B8%EB%A6%AC
파싱 : http://wiki.hash.kr/index.php/%ED%8C%8C%EC%8B%B1