현재접속자(2) : 최근게시물
 
 소개
 세상살이
 공부하세
 떠들어 보세
 추천 사이트

  리눅스 좋아
 
작성일 : 10-04-21 11:32
간단한 인터프리터 만들기
 글쓴이 : 이민우
조회 : 269  
한 십여년전쯤 연구 프로젝트에 필요해서 lex와 yacc를 이용하여 어휘 및 구문 분석을 하고 생성된 토큰들을 P-code 로 정렬한 다음 P-code 인터프리터를 이용하여 실행 시간 연산을 할 수 있는 코드를 만들었던 적이 있다.
그 때 약 한 달 걸려서 정말 머리 쥐어 짜내며 만들었던 기억이 남아있는데, 이번에 비슷한 일을 할 일이 생겨 자료를 찾아보았더니, 다시 할 엄두가 나지 않는다.

어쨌든 해야만 하는 일이니, 처음 시작하는 자세로 다시 해보려고 몇 가지 조사를 해 보았다.
리눅스에서 쓰는 lex 도구가 flex이고 yacc 도구가 bison이란다.
들어는 봤는데 이게 이런데 쓰이는 도구인지는 리눅스 쓴지 십년이 넘어서야 알았으니, 나도 참 한심하단 생각이 든다.

flex와 bison 사용법을 간단히 설명해 놓은 누리집이 있다.
  http://teamblog.joinc.co.kr/yundream/345

간단하게 요약하자면 다음과 같다.
1. flex를 이용할 수 있도록 flex 문법과 정규표현식을 이용하여 example.l 파일을 생성한다.
  %{
  #include <stdio.h>
  %}

  %%
  stop printf("Stop command receive\n");
  start printf("Start command receive\n");
  %%

2. 만들어진 파일을 flex를 이용하여 c또는 c++ 소스를 생성한 후, c 또는 c++ 컴파일러를 이용하여 실행파일을 만든다.
  $ flex example.l or flex++ example.l
  $ gcc lex.yy.c -o example -lfl

3. 만들어진 파일을 실행해 본다.
  $ ./example1
  start program
  Start command receive
    program
  stopped
  Stop command receive
  ped
  ^D


flex와 bison을 cpp에서 사용하기 위한 다음과 같은 문서들도 있다.
 
  http://idlebox.net/2007/flex-bison-cpp-example/

  http://www.progtools.org/compilers/tutorials/cxx_and_bison/cxx_and_bison.html

  http://www.kohsuke.org/flex++bison++/

  http://www.thewaffleshop.net/2010/03/06/flex-bison-cpp-example/

 
   
 

Copyright ⓒ 2003 http://www.misari.codns.com. All rights reserved.