-
파싱, 파서란?Web-Publishing/About Web 2021. 6. 16. 02:37
파싱, 파서란 단어도
얼핏 들으면서 문맥상, 무언갈 가져오는것 어떤 처리를 하는것 까지만 두루뭉실 하게 알고 있었습니다.
그래서 이번에 개념 정리를 한번 해보려고 합니다.
Parsing(파싱)
데이터의 언어를 어휘분석 + 구문 분석 을 통해, 일련의 문자열을 의미있는 토큰 으로 분해하고,
원하는 형태로 조립하여 Parse Tree로 만드는 과정.
'아래는 지금 설명하는 글과는 전혀다른 컴파일의 과정의 예시입니다.'
컴파일 과정의 예시 보통 프로그래밍 고급언어(C언어,자바스크립트 등)이 컴퓨터에서 동작 하기 위해 최종적으로 2진수로 이루어진 기계어로 컴파일 된다는걸 대충은 알고 있으실 겁니다.
이때, 컴파일이 되기전
기존의 데이터를 분해해서 각각의 토큰(의미 있는 데이터)로 만든뒤 컴파일을 진행 되는걸 위에 그림에서 보실 수 있습니다.
이처럼 파싱은,
어휘 분석
토큰(의미있는 문자) 단위로 분해 하는 과정입니다.
구문 분석
언어의 구문 규칙을 적용하는 과정, 어휘 분석기로 부터 새 토큰을 받아 구문 규칙과 일치 하는지 확인합니다.
일치 한다면, 토큰에 해당하는 노드가 파싱트리에 추가가되며 또 다른 토큰을 호출합니다.
결론적으로,
소스코드 -> 파싱 -> 파싱트리 -> DOM트리 구성
그럼 파싱은 어디서 누가 할까요?
파싱은 파서가 작업을 하게 되는데 파서는 다시 파서 생성기에 의해서 만들어 집니다.
파서 생성기
각 프로그래밍 언어를 파싱하기 위해서, 이에 알맞은 파서를 만들어내기 위한 도구.
대표적으로 유닉스 표준 유틸리티인 Lex와 Yacc이 있습니다.
*유닉스는 서버용 컴퓨터에서 사용되는 운영체제.
어위 분석을 할 파서를 생성하기 위한 Lex,
구문 분석을 할 파서를 생성하기 위한 Yacc 에게
각각 어떤 C코드에 대한 BNF(베커스 나우르 표기법)이라는 문법을 주면, 그것에 맞는 파서를 만들어 줍니다.
그러면, Lex에서 나온 파서(어휘 분석기)는 해당 C코드를 토큰으로 분해하고, Yacc에서 생성된 파서(구문 분석기)가
이 토큰을 하나씩 호출하며 구문 분석을 합니다.
크롬, 사파리 엔진인 Webkit에서는 Flex(어휘 파서 생성기)와 Bison(문법 파서 생성기)을 이용합니다.
Flex와 Bison은 앞에서 소개한 Lex와 Yacc을 기반으로 구현된 또 다른 파서 생성기 입니다.
웹킷에서는 이 두 개의 생성기에서 나온 파서를 이용하여, css, javascript를 파싱 할 수 있게 됩니다.
HTML은 '문맥 자유 문법'이기 때문에 별도의 파서가 필요합니다.
각각의 브라우저가 렌더링 엔진을 만들때 HTML 파서도 같이 만듭니다.
그래서 만들어진 파서로 HTML의 문서를 파싱하여 '파싱트리'를 만들게 됩니다.
출저:
https://helloinyong.tistory.com/286
'Web-Publishing > About Web' 카테고리의 다른 글
DOM이란?(feat.CSSOM) (0) 2021.06.16 렌더트리의 의미와 과정 (0) 2021.06.16 렌더링 엔진의 의미와 과정(feat.스크립트 로드) (0) 2021.06.16 브라우저의 동작 원리 (0) 2021.06.16 웹의 기본 동작 원리 . (0) 2021.06.16