lua script의 기본 문법


Lua Script의 기본 문법 중 변수 생성 규칙은 아래와 같다.

1. 숫자로 시작하지 않는 영문자, 숫자, 밑줄의 조합으로 생성할 수 있으나 Lua Script에서 사용하는 예약어 (and, break, do, else, elseif, end, false, for, function, if, in, local, nil, not, or, repeat, return, then, true, until, while 등) 는 피해야 한다 

2. Lua Script는 대소문자를 구분하며, and는 예약어 이지만 And, AND 등은 서로 다른 식별자이다. 

Lua Script의 주석 처리는 한 줄 주석은 "--"으로 시작하여 EOL에서 끝나며, 블록 주석은 "--[[" 으로 시작하여 “]]”에서 끝난다.

Lua Script의 변수는 적용 영역에 따라 지역변수와 전역변수를 가지며, 지역변수는 local로 변수 앞에 선언해 주거나 제어문 안에서 사용된 변수에 해당하고, 전역변수는 어디에서는 호출 가능한 변수이다. 아래 표는 Lua Script에서 사용되는 자료형을 정리한 것이다.


Lua Script 자료형

자료형

설명

예시

nil

()의 값을 갖는 자료형이다.

논리연산에서의 nil은 거짓이고, 전역변수 및 테이블 키에서의 nil은 전역변수 및 테이블에서의 키는 버려진다.

a=nil

if a then --거짓이므로

        str = "I have many friends."

else

        str = "I have few friends." --실행.

end

boolean

true false값 만을 갖는다. 0, 1 과 같이 수치로 변환되지 않는다.

a = true or false

number

double형 수치이다. 정수나 실수를 구분하지 않는다

a = 4

b = 23.0

c = 2.3e-1

d = 2.3E5

string

"또는 ' 으로 감싼다. 긴 문자열은 [[...]]을 사용하다. string은 편집이 되지 않으며 오로지 새로운 문자열을 생성한다.  string은 보조 라이브러리를 가지고 있다.

str = "white"

varName = "Rect1"

value = 20

str = string.format("%s = %d", varName,value)

str = string.lower(varName)

coroutine

동시에 어떤 일을 수행시킬 때 사용한다. (thread)

co = coroutine.create

                     (function ()

           for i=1,10 do

             print("co", i)

             coroutine.yield()

           end

         end)

coroutine.resume(co)

coroutine.status(co)

userdata

Lua에서 배열을 표시하는 방법으로 Lua에서 정의되지 않은 raw 메모리를 생성한다.

void *lua_newuserdata (lua_State *L, size_t size)를 사용한다.

static int newarray (lua_State *L)

              {

      int n = luaL_checkint(L, 1);

      size_t nbytes = sizeof(NumArray) + (n - 1)*sizeof(double);

      NumArray *a = (NumArray *)lua_newuserdata(L, nbytes);

      a->size = n;

      return 1;  /* new userdatum is already on the stack */

    }

table

Lua의 테이블은 복합 자료형이면서도 중요한 역활을 한다. key-value가 아닌 배열이나 객체 프로그래밍을 할 때 필요하기 때문이다. 전체적으로 {}로 감싸며 key []로 감싼 형태이다. 배열도 테이블이다. key-value형식이 아닌 우리가 흔히 하는 요소가 한 줄로 배치된 모습이다. 배열의 처음 시작 인덱스는 1부터 시작하며 0인덱스를 사용하려면 사용자가 직접 만들어 주어야 한다.

COLOR = {Red = "rgb(255,0,0)",Green = "rgb(0,255,0)",Yellow = "rgb(0,0,255)"}

T = {x = 10, y=20 ,z=30, func = function () return a end}

T2={10,20,30}

COLOR.Red --> rgb(255,0,0)

COLOR["Red"]  --> rgb(255,0,0)

T["x"] -->10

T2[1]  -->10

Lua Script에서는 다른 Script 언어와 같이 치환, 산술, 관계, 논리 연산자 등과 같은 연산자를 제공하며, 아래 표는 Lua Script에서 사용되는 연산자에 대해 설명한 것이다.


Lua Script 연산자

연산자

연산 기호

예시

치환 연산자

=

A = 10

산술 연산자

+, -, *, /, %, ^(자승)

A = 10

B = A*10

관계 연산자

>, >=, == , <=, <, ~=(같지않음)

if(A>B)

논리 연산자

and, or, not

if(A>B and B<5)

기타 연산자

..(문자열 연결),#(문자열 혹은 테이블 등의 크기 반환)

str1 = "ab "

str2 = "efgh"

str3 = str1..str2

str3         -->  "ab efgc"

COLOR = {Red = "rgb(255,0,0)",Green = "rgb(0,255,0)",Yellow = "rgb(0,0,255)"}

A = #COLOR

A                    -->  3


아래 표는 Lua Script 연산자의 우선 순위를 나타낸 것이다.

Lua Script 연산자 우선순위

연산자

비고

^

오른쪽 우선 연산자

-, not, #

- 단항연산자(부호) 의미

*, /, %

- 이항연산자(빼기 연산) 의미

+, -

 

..

오른쪽 우선 연산자

>, <, >=, <=, ==, ~=

 

and

 

or

 


Lua Script에서는 다른 Script 언어와 같이 if, for, while 등과 같은 제어문을 제공하며, 아래 표는 Lua Script에서 사용되는 제어문을 정리한 것이다.


Lua Script 제어문

제어문

설명

예시

if

조건부 실행을 위한 if문은 기본구조는 "if 조건 then 실행문 end"의 구조이다.

- if 조건 then

  statement

elseif 조건 then

  statement

else

  statement

end

switch

Lua Script에는 switch 문이 없으므로 switch문 대신에 연속 비교문

if 조건1 then

실행문

elseif 조건2 then 

실행문

elseif 조건3 then 

실행문

elseif 조건4 then 

실행문

.elseif 조건n then 

실행문

else

실행문

end

While

조건이 참이면 무한 반복을 하는 while 문은 C C++ 처럼 먼저 조건을 검사하고 조건이 참이면 do 에서 end까지의 실행 문을 실행한다. 조건이 거짓이 되거나 break 문에 의 탈출할 수 있다.

while 조건 do

   statement

 end

repeat, until

조건이 참이 될 때까지 반복해서 실행하는 repeat 문은 repeat에서 until까지 조건이 거짓이면 무한 반복 실행한다. while 이나 for문과는 다르게 repeat에서 until까지 무조건 한번은 실행한다. C C++ 에서 "do 실행문 while(조건)"과 유사하다. 조건이 참이 되거나 break 문에 의해 탈 출할 수 있다.

repeat

   statement

 until 조건

for

for문은 수치 for 문과 일반 for 문의 두 가지 사용방법으로 사용하며 수치 for 문은 시작조건에서 종료조건이 될 때까지 step 만큼씩 더하면서 do 에서 end까지 실행한다. 제어변수는 반복문 안에서만 사용가능하며 반복문을 벗어나면 인식되지 않는다. break에 의해 탈출 할 수 있다. 일반 for 문은 반복자함수에서 반환된 모든 값을 실행한다. 배열의 값을 모두 실행하기 위해서 반복자 함수 ipairs 가 제공되고 반복될 때 마다 색인과 값을 얻는다. "for i, v in ipairs(a) do 실행문 end"에서 a는 배열이름 이고 i는 색인, v는 값이다.

for 시작조건, 종료조건, step do

   statement

 end

 

for 반복자 do

   statement

 end

break

while, for, repeat 문을 탈출하는데 사용한다.

for 시작조건, 종료조건, step do

   statement

   break

 end

return

값을 되돌리거나 함수를 종료할 때 사용한다.

for 시작조건, 종료조건, step do

   statement

   return

 end


http://www.lua.org/



+ Recent posts