[웹]브라우저 파싱과 변환

김형주·2021년 8월 24일
0

Backend Study

목록 보기
3/19

파싱과 변환

파싱

파싱은 렌더링 엔진에서 매-우 중요한 과정이다. 파싱은 중요하기 때문에 자세하게 들어가보자. 우선 문서 파싱(parsing)은 브라우저가 코드를 이해하고 사용할 수 있는 구조로 변환하는 것을 의미한다. 파싱 결과는 보통 문서 구조를 나타내는 노드트리인데, 파싱 트리(Parse Tree) 또는 문법 트리(syntex tree)라고 부른다. 기본적으로 파싱이라는 것은 어떤 문서를 브라우저가 읽을 수 있게끔 구조를 분해하는 과정이라고 이해할 수 있다.

2 + 3 - 1 이라는 표현식이 있을때, 파싱 트리로 만들면

다음과 같은 구조를 가지게 된다.

문법

파싱은 문서에 작성된 언어 또는 형식의 규칙에 따르는데 파싱할 수 있는 모든 형식은 정해진 용어와 구문 규칙에 따라야한다. 이를 문맥 자유 문법이라는데 정확한 내용은 나중에 참고해야겠다.

파서-어휘 분석기 조합

파싱은 어휘 분석, 그리고 구문 분석이라는 두 가지로 구분할 수 있다. 어휘 분석은 자료를 토큰으로 분해하는 과정이다. 토큰은 유효하게 구성된 단위의 집합체로 용어집이라고 볼 수 있다. 보통 사전에 등장하는 모든 단어라고 생각하면 쉽다.

파서는 보통 두 가지의 일을 하는데 자료를 유효한 토큰으로 분해하는 어휘 분석(토큰 변환)이 있고, 언어 구문 규칙에 따라 문서를 분석함으로써 파싱 트리를 생성하는 파서가 있다. (일단 데이터가 오면, 단어별로 나누고, 정해진 규칙에 따라 이전에 만들어진 것 같은 파싱 트리를 구성한다.) 어휘 분석기는 공백과 줄 바꿈같은 의미 없는 문자를 제거하기도 한다.

파싱은 계속 반복된다. 전체가 모두 파싱트리가 될 때까지... 파서는 보통 어휘 분석기로부터 새 토큰을 받아서 구문 규칙과 일치하는지 확인한다. 규칙에 맞으면 토큰에 해당하는 노드가 파싱 트리에 추가되고 파서는 또 다른 토큰을 요청한다.

나는 밥을 먹는다.라는 문장이 있을때, 어휘 분석기 혹은 토큰 분석기는 각각을 , , , , , 는다. 식으로 의미가 있는 단어(토큰)으로 분해하고, 나는 + 밥을 + 먹는다. 식으로 의미가 이어질 수 있는 구문 규칙에 따라 언어 구문 규칙에 따라 조합한다는 식으로 이해하면 좋을 것 같다.

규칙에 맞지 않으면 파서는 토큰을 내부적으로 저장하고 토큰과 일치하는 규칙이 발견될 때까지 요청한다. 맞는 규칙이 없는 경우 예외로 처리하는데 이것은 문서가 유효하지 않고 구문 오류를 포함하고 있다는 의미다.

변환 (컴파일)

파서트리는 최종 결과물이 아니다. 중간단계에서 문서를 쪼개서 이해할 수 있는 단위로 묶어주는 역할이라고 볼 수 있다. 파싱은 보통 문서를 다른 양식으로 변환하는데 컴파일의 한 예에 가깝다. 소스 코드를 기계 코드로 만드는 컴파일러는 파싱 트리가 생성된 후에 이걸 기계 코드 문서로 다시 바꾼다.

소스코드를 받아서, 파서가 문서를 토큰이라는 단위로 쪼개어 문법에 맞게끔 파싱트리를 구성하는 단계까지 진행하고, 컴파일러는 이렇게 생서된 파싱트리를 가지고 기계어로 변환하는 컴파일 과정을 거친다.

이 부분에 대해서는 나중에 보충하도록 하자.(2021.8.24)

profile
만물에 관심이 많은 잡학지식사전이자, 새로운 도전을 꿈꾸는 주니어 개발자 / 잡학지식에서 벗어나서 전문성을 가진 엔지니어로 거듭나자!

0개의 댓글