-> 어떠한 string 에 대해서 FIRST를 구할 수 있다.
recursive-descent parser인데 backtracking을 필요로 하지 않는 Predictive parser는 LL(1)이라고 불리는 grammar들의 class로 만들어질 수 있다.
LL(1) : scanning input from left to right, leftmost, 뒤의 1개의 input symbol로 판별.
A grammar is LL(1) if and only if whenever are two distinct productions of , the following conditions hold:
Predictive parser는 LL(1) grammar에 대해 만들어질 수 있는데, 그 이유는 아래와 같다.
하나의 symbol만 체크해서 다음 production이 무엇인지를 선택해야 하는데, 위의 예시의 경우 if / whlie / { 인지에 따라 바로 결정이 되는 LL(1)에 해당하기 때문에 굉장히 편리하다.
FIRST와 FOLLOW로부터 2차원 배열인 predictive parsing table M\[A,a\]를 만들 수 있다. (A : nonterminal, a : terminal이거나 symbol )
알고리즘의 아이디어 :
만약 다음 input symbol a가 FIRST()의 원소라면 가 선택된다.
만약 이라면, 현재 input symbol이 FOLLOW(A)에 있거나 에 도달했고 FOLLOW(A)에 있다면 를 선택한다.
Algorighm 4.31 : Construction of a predictive parsing table
LL(1) grammar의 경우, 각 parsing-table entry에는 unique한 production 혹은 error만 존재한다.
다른 grammar의 경우, 한 entry에 여러 production이 존재할 수도 있다.