posted by 게으른 늘보 2006/03/28 22:19
 스크립트 언어에 관심이 있던 중에 사용에 제약(라이센스 측면)이 없는 스크립트 언어를 찾아

냈고, ... 그런 이유로 한동안 가지고 놀아보기로 하였다.

Lua의 경우 Lua혼자서 돌아가는게 아닌 다른 언어에 포함되서 돌아가게 되는 작은 언어다.

라는 이야기 부터 시작해서 ... 매뉴얼에는 알 수 없는 영어문들이 잔뜩 있었지만 ... 전부 무시하고

우선 기본 틀부터 짜보기로 하였다. 코드가 불여일타니 우선 짜고나면 이해가 되지 않을까라는

언제나 같은 사고 방식으로 접근 하여봤다.



우선 프로그램을 짜건 기계를 만지건 간에 처음으로 알아야 할 것은 언제나 그렇듯 전원~!!!

초기화와 종료를 짜보았다.






#include <lua.hpp>

void main () {
   lua_State *L = lua_open();
   lua_close(L);
}






아아 .... 정말 주석 없이도 이해가 될듯한 간단한 코드다 .......

뭘 더 설명하리오. 바로 ... 첫줄이 초기화, 둘째 줄이 종료 .....

lua_State는 대충 짐작해 보기에 Lua에 대한 인스턴스인것이다 !!!

위의 코드야 말로 왜 프로그램은 기초 부터 시작해야하는지를 잘 알려주는 코드라 할 수 있다.

흠흠.....

하지만 위의 코드만으로는 아무것도 일어나지 않는다 .....

결국 스크립트 한줄이라도 실행할 수 있는 코드가 있지 않으면 감이 오지 않고 테스트도 못하는 법






#include <lua.hpp>
#include <string.h>

void main ()
{
   lua_State *L = lua_open();
   luaopen_base(L);

   char line[256];
   while (fgets(line, sizeof(line), stdin))
   {
       luaL_loadbuffer(L, line, strlen(line), "line");
       lua_call(L, 0, 0);
   }

   lua_close(L);
}






키보드로 입력을 받아서 처리 하는 루틴을 추가하여 보았다.


luaopen_base(L)


이 경우에는 lua에서 사용하는 함수들을 읽어들이는 ... 그러니까 *.h파일을 추가하는

것과 같은 함수이다. 비교하자면 stdio.h정도일까... 굳이 추가하지 않아도 어떻게 되는지는 알 수 있지만

문제는 print함수가 저기에 선언되어 있었던 관계로 추가 하여 보았다


luaL_loadbuffer(L, line, strlen(line), "line")


마지막의 "line"만 빼면 어느정도 프로그래밍을 해본 사람이라면 다들 이해할 수 있을 것이다

바로 명령을 버퍼에서 읽어들이는 함수 !! 참고로 마지막에 넣는 문자열은 아직 이해 하지 못했다 ....

다만 넣어야 할 것 같기에 ;;; 통일을 위해 line을 ;;; 나중에 알게 되면 그때 업데이트를 ;;;


lua_call(L, 0, 0)


이것이 핵심중의 핵심 버퍼에서 읽어들인 코드를 실행해 주는 부분이다.

앞뒤로 각각 매개변수의 숫자와 리턴 값의 수가 들어가는 듯했지만, 어쨋든 간단한 코드 짜는데

신경 쓸 필요 없다 라는 것으로 0, 0 !!!!


이와 같이 하여 실행한뒤 아래와 같이 치면






a=3
print(a)






무려 !!






3







이라는 결과가 나온다 .........

나름대로 간단한 코드로 이 정도 효과만 되도 나름대로 매우 유용하지 않을까 라고 생각하며

이번 글은 여기까지 .

다음엔 실제 계산된 값을 C에서 얻어오는 부분을 해봐야 겠다.

위의 lua는 http://www.lua.org에서 자신의 컴파일러에 맞는 버젼을 구할 수 있다 .
TAG

Trackback http://blog.zcube.kr/trackback/180 관련글 쓰기

댓글을 달아 주세요

  1. 이정훈 2006/04/02 00:20  Addr  Edit/Del  Reply

    앞으로 자주 들르마. ㅋㅋ
    좋은 글 많이 올려 ;)