javascript2012. 2. 24. 15:10

SLG (Simple LL Grammar) 는 재귀하강 파서로서

형태는 BNF 문법을 따르지만 약간 엄격하게 제한함으로서

간단한 파서를 빠르게 생성할수 있도록 한다.

다만 제약을 건드리지 않고 문법을 잘짜야 한다.  left factoring  이런것들을 활용해서..


대문자 : 터미널
소문자 : 논터미널
 ->   : 몸통의 시작
|      : (유니온) 몸통이 여러개인 경우 분리하는 마커
.      : (입실론) 몸통이 비어있는 경우를 표현
;      : (엔드마커) 하나의 문법 규칙이 끝남을 표현

밑은 예제이다. make code 버튼을 누르면 코드가 자동으로 작성된다.

문법을 고쳐서 적용해도 된다.

아직 javascript 밖에 안해놨지만 다른 언어로도 작성할수 있게 만들것이다.









실제로 코드로 반영될때는 문법 하나가 함수 하나랑 대응된다.

재귀하강파싱이기 때문에 구현이 문법과 거의 동일해 굉장히 이해하기 쉽다.

비슷한 형태를 매번 작성해야하는게 고통스러운 작업이므로

이를 자동화하는것이 이 파서 제네레이터의 목적이다.

Union 분기로 몸통이 여러개로 나누어졌으면 당연히 if-else 문으로 작성된다.

몸통의 맨 끝에 자기 자신이 또 등장하면 (tail recursion)

이때 Depth 를 제한하기 위해 반복문으로 대체된다. while 문이 생성된다.

epsilon 가 있으면 어떤 몸통에도 해당되지 않으면 유연하게 넘어갈수 있다.

하지만 epsilon 이 없을 경우 else 부분이 추가가 되면서

예외 처리를 적을수 있도록 자동으로 주석처리가 된다. 
Posted by 멍충한아싸

댓글을 달아 주세요