SPL Parser
- 최초 등록일
- 2010.11.24
- 최종 저작일
- 2009.08
- 22페이지/
한컴오피스
- 가격 2,000원
![할인쿠폰받기](/images/v4/document/ico_det_coupon.gif)
소개글
컴파일러 - 오세만 교수님 수업시간에 과제로 출제된 SPL Parser
프로그램 소스 및 보고서 입니다.
목차
1.과제에 대한 설명
Execute Result
프로그램의 실행에 대한 평가
Program Source
본문내용
1.과제에 대한 설명
SPL로 구현된 최대, 최소값을 구하는 프로그램을 parser로 분석하여 좌파스 결과를 출력한다.(C++로 구현)
컴파일러 입문시간에 구현했던 Mini C scanner을 응용하여 scanner를 제작하였다.(Scanner에 대한 프로그래밍 설명은 생략). 제작한 Scanner의 getNextSymbol()함수를 호출하게 되면, MinMax.spl 파일에서 한 개의 토큰을 가져와 토큰에 해당하는 토큰 번호를 리턴하게 된다. 리턴 받은 토큰 넘버를 가지고 SPL Recursive-descent Parser는 SPL Grammar로 구현된 parser 함수들을 거치면서 좌파스 데이터를 출력하게 된다.
Grammar 번호 5번에서 [ <id> : ] <statement> 가 [] 때문에 결정적인 구문이 되질 못한다. <statement>에서 <id>가 나올 수도 있고, []안의 <id>가 올 수도 있기 때문이다. 따라서 다음에 오는 ‘:’를 보기 위해서 getNextSymbol() 함수를 한 번 더 호출하게 되는데 scanner에는 전단계의 tokenNumber를 보는 함수가 존재하지 않는다. 따라서, parser는 scanner에서 전해오는 tokenNumber를 Grammar 번호 5번에 올 경우에, vector로 구현된 buffer에 저장하고 <statement>인지 <id> : 인지 판단한 후 <id> : 아닐 경우에 버퍼에 있는 데이터로 복원시켜서 <statement> Function으로 입력되게 된다.
그 외에는 parser내부에 구현된 함수들을 돌면서 파싱하게 된다.
대부분의 Grammer는 해당 문법의 First와 같다. 그러나 6, 14번 문법은 여러 개의 문법으로 쪼개져서 함수를 구현할 수 있다. 6,7번 문법은 쪼개어질 수 있는 문법순서대로 {} 분류하였다. 하지만, 프로그램에서 Function을 각각이 따로 구현하지 않고 한 Function에 구현하였다
참고 자료
없음