이번에 하는 알바에서 간단한 인터프리터 좀 만들어 달라고 하네요;; 파일에서 프로그램을 읽어 char배열에 로딩하고
그것을 토큰단위로 끊어내면서 해석하고 관련 처리를 하는 것이 목적입니다.. 사용자 변수, 산술연산, 배정문은 구현했는데요..
if문이 좀 힘드네요;; 중첩 if문이 많은 경우에 대한 처리가 막히고 있습니다. if문에서 처리해야 하는 토큰은 elseif, else, end입니다.
if와 end는 꼭 쌍을 이루어야 하고요.. if와 end사이에는 elseif, else가 포함될 수 있습니다.. if문 안의 조건식은
해석을 해내었습니다. 조건식이 참이면 다음 문장 계속 실행하면 되는데 거짓인 경우 분기해야 하는 곳을 찾는 알고리즘이
구현하기 어렵네요.. 현재 생각으로는 프로그램 로드할 때 스캔을 한번 해서 각 if문의 해당하는 elseif, else, end
정보를 따로 저장해놓고 번역시에 그걸 참조해서 하면 될것 같다고 생각되는데요.. 혹시 관련 프로그래밍 해보신분 있으시면
조언좀 얻을까 합니다;; 제가 모르는 정석(?) 같은 알고리즘이 존재할 수도 있을거 같구요;; 답변 부탁드리겠습니다 꾸벅(__)
( 상수설정 ; 0 = 해결안됨, 1 = 해결됨 )
* if문 -
일단, 스택에 0을 푸시하고 조건식을 계산해서 참이면 팝한후 해결을 뜻하는 1을 푸시합니다.
그리고 그 아래 명령들을 계속 수행해 나갑니다. elseif, else가 나오면 그 아래는 end가 나올때까지 스킵합니다.
만약, 조건식이 거짓이라면 그 아래 문장들은 elseif, else, end 가 나올때까지 스킵합니다.
* elseif -
일단, 가장 최근의 스택값을 get합니다.
if( 스택값 == 0 && 조건식 == 참 ) 이면, if문과 마찬가지로 팝후 1을 푸시, 그 아래 명령들을 수행해 나갑니다.
위 조건에 부합하지 않는다면 if문처럼 아래를 스킵합니다.
* else -
가장 최근의 스택값을 get했을때 0이라면 팝후 1푸시, 계속해서 아래 명령들을 수행해 나갑니다. end가 나올때까지...
* end -
무조건 스택을 한번 팝합니다.
완벽하지는 않지만 비슷한 것을 만들어본적이 있습니다. : http://nkool.net/data/nsg.zip 현재 else문에 버그가 있더군요;; 고쳐야되는데;;