19 - Top Down Parsing (avoid Left-Recursion)

2021. 8. 9. 21:11개발 관련 학습정리/컴파일러 만들기 (이론)

반응형

탑다운 파싱을 하다보면 Left-Recursion이라는 문제가 생길 수 있다.

 

Left-Recirsion이란, A -> Ab와 같은 식에서 점진적으로 진행을 할때,

b가 나올때 까지 계속 포인터가 진행하게 되어 무한 루프에 빠질 수 있는 위험을 말한다.

그래서 탑다운 파싱을 쓰기 위해서는 Left-Recursion을 제거해야만 하는데

이를 피할 수 있는 방식이 Left-Recursion을 Right-Recursion으로 바꾸어 검증 가능하도록 만드는 것이다.

 

 

Left-Recursion 변환


A -> Aa | b 가 있다.

이 식은 최종적으로 ba*를 만들지만 A 가 Aa를 만드므로 A를 검사하지 못해 무한 루프가 돈다.

이를 Right Recursion으로 변환하면

A -> bB
B -> aB

이렇게 된다.

두 단계로 나누어 표현했고, b가 먼저 나오고 B도 aB로 치환되어 바로 포인터가 검사할 수 있게 되었다.

이와 같이 탑다운 파싱에서는 Left-Recursion을 Right-Recursion으로 변경해야하는 과정이 필요하다.

 

반응형

'개발 관련 학습정리 > 컴파일러 만들기 (이론)' 카테고리의 다른 글

21 - Bottom Up Parsing  (0) 2021.08.12
20 - Indirect Left-Recursion  (0) 2021.08.10
18 - Top Down Parsing (1)  (0) 2021.08.05
17 - Syntax Analysis  (0) 2021.08.04
16 - Context-Free Grammar (CFG)  (0) 2021.07.28