Lexer
입력 문자열로 토큰을 만들어낸다
Parser
입력 데이터를 받아 자료구조를 만들어 내는 소프트웨어 컴포넌트 형태는 파스 트리, 추상구문트리일 수 있고 그렇지 않으면 다른 게층 구죙ㄹ수도 자료구조를 만들면서 구조화된 표현을 더하기도 하며, 구문이 올바른지 검사하기도 함
보통 앞에 어휘 분석기(lexical analyzer)를 따로 두기도 한다
json parser와의 차이
json 파서는 텍스트를 입력 받아 이를 표현하는 자료구조로 만듬. 언어 파서가 하는 일과 동일. 다른 점이라면 json 파서는 눈으로 보는 것만 자료구조를 알 수 있음
하향식 / 상향식 파서
하향식 파서는 AST의 루트 노드를 생성하는 것으로 시작해 아래쪽으로 파싱
Pratt Parsing
- 하향식 연산자 우선순위 파싱(Top Down Operator Precedence Parsing) 혹은 프랫 파싱이라 불린다.
- 문맥 무관 문법(CFG, context-free grammars)와 배커스 나우어 형식(BNF: Backus-Naur-Form)에 기반한 파서를 대체할 목적으로 갭라되었다.
문법 규칙과 함수를 연관시키는 대신에 프랫은 토큰 타입과 파싱 함수를 연관시킨다.
- 토큰을 함수와 연관시킬 때, 중위인지 전위인지에 따라 서로 다른 파싱 함수로 연관시키는 것이 핵심이다.
프렛 파서 구현의 핵심 아이디어는 파싱 함수를 토큰 타입과 연관 짓는 것 파서가 토큰 타입을 만날 때마다 파싱 함수가 적절한 표현식을 파싱하고, 그 표현식을 나타내는 AST 노드를 하나 반환