-
Tokenizer, Lexer, ParserCS/기타 2023. 7. 13. 03:20
컴파일은 소스코드를 기계어로 바꾸는 과정이고,
해당 컴파일 과정엔 "구문 분석"이란 파트가 존재한다.
구문분석은 소스코드를 AST 트리로 만드는 과정이며,
해당 과정은
코드 -(토크나이저)-> 토큰 -(렉서) -> 노드 -(파서) -> AST 트리
의 과정을 거친다
1.토크나이저
- 대상을 토큰으로 쪼갠다
주로 ;나 함수의 {}를 기준으로 쪼개 하나의 명령어/함수를 하나의 토큰으로 바꾼다.
2.렉서
- 토큰에 의미를 부여한다.
"let a = 10;"이란 토큰은 let이란 커맨드, a란 변수명, 10이란 변수 값의 지니고있다.
이를 { command : let, name : a, value : 10 }과 같은 형태의 객체로 만든다.
3.파서
while b != 0: if a > b: a = a − b else: b = b − a return a
앞에서 구한 노드들을 순서에 맞게 트리의 형태로 만든다.
트리의 형태로 만드는 이유는,
하나의 트리는 한가지 코드만을 나타낼 수 있기 때문인 것 같다.
같은 노드의 배치를 보고 서로 다른 해석이 나오면 안되기에...
48÷2(9+3)= 288
288이라고 288이라고 288이라고 288이라고~!!!!!!!!!!!!!!
kin.naver.com
여담으로, 해당 파서의 프로토콜에 따라 다른 결과물이 나올 수 있다.
구문 분석에서 오류 체크는 토크나이저나 렉서가 아닌 파서 단계에서 주로 한다고 한다.
앞 단계에서 오류를 거르고 진행하는게 더 효율적이지 않나 했는데,
구문분석은 오류가 있는 코드를 무조건 제거하지 않고
주변 코드를 통해 자의적으로 해석하거나 모범 답안을 제공하곤 한다.
이 때문에 마지막 파서 단계에서 오류 체크를 하는게 아닐까.
https://supunsetunga.medium.com/writing-a-parser-syntax-error-handling-b71b67a8ac66
Writing a Parser — Part III: Syntax Error Handling
An approach for handling and recovering from syntax errors in a parser for resilient parsing.
supunsetunga.medium.com
그 외 참조한 글
[컴파일러] 토크나이저, 렉서, 파서 (Tokenizer, Lexer, Parser)
컴파일러 [컴파일러] 컴파일러란? 컴파일러 컴파일러는 명령어 번역 프로그램이다. 컴파일러는 소스 코드 혹은 원시 코드를 목적 코드로 옮겨주는 역할을 한다. 쉽게 설명하면 여기서 소스 코드
gobae.tistory.com
컴파일러 이론에서 토크나이저(Tokenizer), 렉서(Lexer), 파서(Parse) 의 역할
토크나이저, 렉서, 파서의 역할
velog.io
'CS > 기타' 카테고리의 다른 글
HTTP의 특징 5가지 (0) 2023.08.07 GIT - 분산, Merkle tree, 인덱스 (0) 2023.08.07 함수형 프로그래밍 (0) 2023.08.03 객체 지향 프로그래밍 (0) 2023.07.31 소스트리 사용법 (0) 2023.07.18