일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 메모리계층
- 페이지교체알고리즘
- Vite 사용 이유
- 구슬탈출
- 2623
- 9996
- 테스트주도개발
- 풀이
- LOLIN D32
- dp
- TDD란?
- 백준
- OpenVidu
- mediastream
- c++
- 3XN 타일링
- WebRTC란
- 자료구조
- 구현
- 적두트리
- ESP32
- stl
- 데이터 링크 계층
- 백준 2133
- RBT
- 13459
- REACT
- tfjs
- 1796
- TDD
- Today
- Total
그냥 블로그
[CS] 파싱/ 컴파일러 이론 본문
Parse란?
파싱이란 컴퓨터 과학 및 프로그래밍에서 특정 형식으로 구성된 데이터를 분석하고 그 의미를 이해하는 과정을 의미한다.
프로그래밍 언어 소스 코드를 이해하거나 문서를 구조화하고 내용을 추출하는데 사용된다.
1. 문자열 파싱
- 문자열에서 특정 데이터를 추출하거나 원하는 형식으로 변환하는 프로세스 ex) csv를 파싱해 표 데이터 추출, JSON 문자열을 객체로 변환하는 것.
2. 언어 파싱
- 프로그래밍 언어 또는 마크업 언어의 소스 코드를 해석하고, 구문 오류 확인, 실행 가능한 코드로 변환하는 프로세스. 컴파일러나 인터프리터
3. HYML/XML 파싱
- 웹 페이지의 HTML 또는 XML 문서를 해석해 웹 브라우저가 문서를 렌더링하거나 웹 스크래핑 도구가 웹 사이트에서 데이터 추출.
4. 구문 분석 (Parsing)
- 자연어 처리에서 텍스트 문서를 분석해 문장 구조, 어휘, 문법, 의미 등 이해하는 과정
5. 데이터 포맷 파싱
- 특정 데이터 형식 (xml, json, yaml)을 분석해 데이터 추출, 처리 프로세스
컴파일러 이론 (Toknizer, Lexer, Parser )
컴파일러 ? 소스코드를 기계어로 바꿔주는 역할
이때 구문 분석 -> 최적화 -> 코드생성 -> 링킹 과정을 진행하는데,
구문 분석에서 소스코드는 Tokenizer, Lexer, Parser를 차례로 지나가며 구문분석을 한다.
Toknizer
어떤 구문을 토큰화 하는 역할을 한다.
토큰이란, 어휘 분석의 단위로 단어, 단어구, 문자열 등 의미있는 단위로 정해진다.
토큰은 요소들을 구조적으로 표현할 수 있도록 도와줌.
Lexer
Tokenizer로 쪼개진 토큰들의 의미를 분석하는 역할이다.
Tokenizer를 거치며 의미있는 단위로 쪼개지고, Lexer를 거치며 그 결과의 의미를 분석하는 과정을 통틀어 lexical Analyze라 한다.
Parser
Parser는 Lexical Analyze된 데이터를 구조적으로 나타낸다.
이 과정에서 데이터가 올바른지 검증하는 역할도 수행하는데, 이를 통틀어 Syntax Analyze라 한다.
Parser에 의해 도출된 결과는 AST 형태로 생성된다.
AST (Abstract Syntax Tree)
AST는 이름 그대로 위 과정을 거치며 분석된 구문을 트리 형태로 나타내는 자료구조다. 분석된 소스를 컴퓨터가 이해할 수 있는 구조로 변경시킨 트리.
=> 요약 :
그러니까, 컴파일러는 토크나이저 과정에서 코드를 읽고 각각 토큰화 하고, (INT 이런거 아닐까)
Lexer에서 토큰화한 내용에 의미를 부여한다.
그러면 그 부여된 의미를 파싱을 통해서 트리 형태로 제작한다.
https://trumanfromkorea.tistory.com/79
https://edykim.com/ko/post/the-super-tiny-compiler/
'CS > 기타' 카테고리의 다른 글
[CS] 함수형 프로그래밍과 불변성(immutable) (0) | 2024.07.24 |
---|---|
정규 표현식 (Regex) (10) | 2024.07.24 |
[CS] sw 테스트 : 단위 테스트 (Jest) (0) | 2024.07.23 |
[객체 지향] 객체 지향 설계 원칙 SOLID (0) | 2024.07.22 |
[GIT] Git에 대해서 (0) | 2024.07.15 |