본문 바로가기

코딩 이야기/컴파일러

컴파일러 공부하고 개발하기 #03 - 파서 제너레이터, 스캐너 제너레이터, 컴파일러 컴파일러

반응형

서론

 

공부를 계속 이어가려했는데, 이사하면서 인터넷 신청을 늦게해서 시간이 꽤 걸렸다. 오늘은 파서 제너레이터에 대해 다뤄볼 것이다.

 

 

파서 제너레이터

 

파서(parser)를 만들기 위해서는 동일한 코드가 반복이 되고, 이는 상당히 번거롭고 귀찮은 일이다. 이를 위해 파서를 생성하는 프로그램이 파서 제너레이터이다. 파서 제너레이터와 스캐너 제너레이터, 컴파일러 컴파일러는 모두 동일한 말이고 동일한 프로그램이다.

 

파서 제너레이터에도 종류가 있다.

 

  • LR 파서 제너레이터
  • LALR 파서 제너레이터
  • LL 파서 제너레이터

파서 제너레이터는 다룰 수 있는 문법의 범위에 따라 나누게 된다.

 

LR 파서 제너레이터

 

  • 문법의 취급 범위: 넓다
  • 속도: 평균적

 

LALR 파서 제너레이터

 

  • 문법의 취급 범위: 비교적 넓다
  • 속도: 평균적

 

LL 파서 제너레이터

 

  • 문법의 취급 범위: 좁다
  • 속도: 약간 빠르다

 

 

필자의 경우 c++로 컴파일러를 만들 것이므로, Lemon이나 yacc를 선택할 것이다. 허나 책에서는 자바로 다루고 있어서 책에서는 Javacc가 사용되었다.

 

파서 제너레이터 목록

 

ANTLR Java, C, C++ 등 다수 LL
JavaCC Java LL
jay Java LALR
yacc C LALR
bison C LALR
kmyacc C, Java, JavaScript, Perl LALR
Lemon C LALR
Racc Ruby LALR
Parsec Haskell LL
happy Haskell LALR

 

물론 파서 제너레이터를 사용하지 않고 직접 파서를 만들어도 무방하다. 

반응형