C++ Interpreter 만들기 (1)
최근에 저지르려고 준비중인 일이 Python을 이용해서 C++ 소스를 실행하는 것이다.

그래서 파싱쪽을 알아보고 있는데, 
널리 알려진 대로 C++ 문법은 LALR(1)에 속하지 않는다.
좀 더 쉽게 말하면 yacc을 이용해서 C++을 파싱할 수 없다.

그래서 찾아본 바로는 GLR 등을 이용하면 파싱이 가능한다고 한다.
GLR의 기본적인 아이디어는, LR 파싱을 하다가 파싱트리의 모호성이 발견될 때 가능한 방법 모두를 다 해보고 그중에서 되는걸 고른다! 이다.
위키피디아를 참고하면 O(n^3)의 시간에 처리가 가능하다고 한다.

파이썬 위의 구현체를 좀 찾아보다가 포기하고 bison (yacc의 GNU 구현)이 GLR을 지원한다길래 좀 조사를 해봤는데, 매뉴얼에 다음과 같은 문장이 있었다.
In general, a GLR parser can take quadratic or cubic worst-case time, and the current Bison parser even takes exponential time and space for some grammars.
오예!

나는 지금 GLR parser generator를 작성할 것인가 라는 기로에 놓여있다.
by 입큰하마 | 2008/04/04 01:17 | 미분류 | 트랙백 | 덧글(8)
트랙백 주소 : http://ipkn.egloos.com/tb/3688419
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by rein at 2008/04/04 13:04
그냥 bison으로 일단 짜고 -> 안되면 Plan B어때?

안되면 파서 제네레이터를 짠다거나.
Commented by xenosoz at 2008/04/04 19:08
오예!
Commented by 슈레인 at 2008/04/04 19:34
크고 훌륭한 파서가 나올듯
Commented by ipkn at 2008/04/05 00:07
rein, xenosoz, 슈레인 / 저에겐 LR 파서를 짜보고 싶은 작은 소망이 있어요.
Commented by JM at 2008/04/05 01:19
저는 소심하게 주말에 리습 인터프리터나 만들어볼까 하고 있었습니다만.. 역시 님은 간지가 다르다능..
Commented by 피앙 at 2008/04/05 12:39
근데 O(n^3)이면 엄청 느린 거 아닌가요? LALR이 O(n) 으로 알고 있는데 ...
Commented by ipkn at 2008/04/06 22:55
JM / 굽신굽신 제가 어찌 간지JM님을 이길까요
피앙 / 최악에 n^3이고 대부분의 그래머에선 O(n)이라더군요
Commented by 디지츠 at 2009/11/16 11:50
과연 지금까지 진행은 어떻게 되어있는가 !

:         :

:

비공개 덧글



< 이전페이지 다음페이지 >