편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 | 당신의 편집 | ||
14번째 줄: | 14번째 줄: | ||
=== 파서 === | === 파서 === | ||
스캐너로 얻은 토큰을 이용해서 파스 트리를 생성하는 부분이다. 이를 통해서 프로그램의 소스 코드가 문법(syntax)에 일치하는지 파악할 수 있기 때문에 신택스 애널라이저(Syntax Analyzer)라고도 부른다. 이렇게 만든 파스 트리는 코드를 왼쪽에서 오른쪽/오른쪽에서 왼쪽으로 해석하는지, 토큰의 string 유도가 왼쪽에서 오른쪽/오른쪽에서 왼쪽으로 일어나는지, look-ahead(현재 토큰의 다음에 올 토큰)을 최대 몇 개나 고려하여 설계되는지, 어떻게 실행되는지 등의 기준에 따라서 몇 가지로 분류 가능하다. | 스캐너로 얻은 토큰을 이용해서 파스 트리를 생성하는 부분이다. 이를 통해서 프로그램의 소스 코드가 문법(syntax)에 일치하는지 파악할 수 있기 때문에 신택스 애널라이저(Syntax Analyzer)라고도 부른다. 이렇게 만든 파스 트리는 코드를 왼쪽에서 오른쪽/오른쪽에서 왼쪽으로 해석하는지, 토큰의 string 유도가 왼쪽에서 오른쪽/오른쪽에서 왼쪽으로 일어나는지, look-ahead(현재 토큰의 다음에 올 토큰)을 최대 몇 개나 고려하여 설계되는지, 어떻게 실행되는지 등의 기준에 따라서 몇 가지로 분류 가능하다. | ||
* 재귀 하강 파서(Recursive-descendant Parser) | * 재귀 하강 파서(Recursive-descendant Parser) | ||
이름대로 파스트리를 Top-down 방식으로 재귀적 호출을 해가며 순회하는 파서. 손으로도 쉽게 코딩할 수 있을만큼 간단하지만 Error chaining(실제 오류는 n번 일어났지만 상위 단계의 문법에서도 오류가 있다고 처리되어 한 오류에 대하여 여러 번의 오류 알림이 일어나는 현상.) 현상을 처리하기 힘들다는 단점이 존재한다. | 이름대로 파스트리를 Top-down 방식으로 재귀적 호출을 해가며 순회하는 파서. 손으로도 쉽게 코딩할 수 있을만큼 간단하지만 Error chaining(실제 오류는 n번 일어났지만 상위 단계의 문법에서도 오류가 있다고 처리되어 한 오류에 대하여 여러 번의 오류 알림이 일어나는 현상.) 현상을 처리하기 힘들다는 단점이 존재한다. | ||
* LL(1) 파서 | * LL(1) 파서 | ||
Left-right, Leftmost derivation, Maximum look-ahead 1개를 의미하며 재귀호출을 이용하지 않고 명시적인 stack을 이용한다. | Left-right, Leftmost derivation, Maximum look-ahead 1개를 의미하며 재귀호출을 이용하지 않고 명시적인 stack을 이용한다. | ||
* LR(1) 파서 | * LR(1) 파서 | ||