LR 파싱 테이블을 사용해서 직접 S/R 파서 만들기 :: 2007/06/13 16:30


아래 문법에 대한 파싱 테이블을 구조체 배열에 저장한 후, 현재 토큰과 상태에 따라 shift/reduce 과정을 반복하는 파서입니다. 스택은 모두 stl의 벡터를 사용해서 구현되었으며, 구현을 단순화 하기 위해서 파서 과정의 오류 처리는 모두 생략하였습니다.

문법
1. E -> E + T | T
2. T -> T * F | F
3. F -> (E) | id

get_tok함수가 입력받은 문자열을 스캐닝하는 함수이며, do_reduce함수가 reduce를 수행하는 함수입니다. 그리고 main 함수의 가장 큰 while문이 전체 파서 알고리즘을 표현하고 있습니다.



컴파일에 사용된 g++ 버전과 컴파일 과정
사용자 삽입 이미지

id+id+id$을 파싱하는 과정
사용자 삽입 이미지

id*(id+id)$을 파싱하는 과정
사용자 삽입 이미지

네이버에 북마크 다음에 북마크 마가린 바르기 HanRSS에 북마크하기 이올린에 북마크하기 News2.0에 투고하기 del.icio.us에 북마크하기 Digg에 번역해 투고하기 dzone에 번역해 투고하기 붐바
이올린에 북마크하기(0) 이올린에 추천하기(0)
스폰서
글타래

Trackback Address :: http://www.jiniya.net/tt/trackback/517
Name
Password

Homepage
Secret