언어 — 어휘 규약
언어 — 어휘 규약 (The Language — Lexical Conventions)
루아의 소스 코드는 텍스트(텍스트 파일 또는 문자열)로 작성돼요. 루아는 소스 코드를 처리할 때 문자 집합을 가정하지 않고, 문자들을 "바이트"의 연속으로 취급해요. 다만 이름(식별자)을 비롯해 문자들이 구분 기호(delimiter)와 결합하는 방식에 몇 가지 규칙이 있어요.
문자 집합 (Character set)
루아가 처리하는 문자는 바이트(code point)로 해석돼요. 루아는 UTF-8과 같은 특정 인코딩을 강제하지 않지만, 소스의 문자열 리터럴은 문자 그대로 유지돼요. 따라서 소스 파일에 어떤 인코딩의 텍스트를 넣든 그대로 값에 보존돼요.
식별자 (Names/Identifiers)
이름(식별자)은 문자, 숫자, 밑줄(_)의 연속으로 이루어지며, 숫자로 시작할 수 없어요. 즉 식별자는 문자 또는 밑줄로 시작해야 해요. 이름은 대소문자를 구분해요 (case-sensitive).
i
j
i10
_ij
aSomewhatLongName
_23 -- 유효한 식별자 (숫자로 시작하지 않으므로)
다음은 루아의 예약어(reserved words) 로, 식별자로 사용할 수 없어요.
and break do else elseif
end false for function goto
if in local nil not
or repeat return then true
until while
접두사 _로 시작하는 이름(_VERSION 등)은 전역 변수로 예약되지는 않았지만, 일반적으로 특별한 용도를 위해 남겨둬요.
주석 (Comments)
또한 루아의 주석은 --로 시작해요.
- 짧은 주석(short comment):
--다음 줄 끝까지.--[[로 시작하지 않으면 줄 주석이에요. - 긴 주석(long comment):
--[[ ... ]]형태로 여러 줄을 차지할 수 있어요.
-- 줄 주석
--[[
여러 줄에 걸친
긴 주석
]]
리터럴 상수 (Literal constants)
루아에는 여러 종류의 리터럴 상수가 있어요: 숫자(numeric) 리터럴, 문자열(string) 리터럴, 그리고 논리값(boolean) true/false와 nil 이에요.
숫자 리터럴 (Numeric constants)
숫자 상수는 소수점 형태이거나 지수 형태일 수 있어요. 정수 리터럴과 실수 리터럴이 모두 허용돼요. 다음은 몇 가지 예시예요.
3 3.0 3.1416
314.16e-2 0.31416E1 0xff 0x56
0x접두사는 16진수(hexadecimal)를 나타내요.- 16진수 리터럴에 정수 부분과 소수 부분을 나누는
.을 쓸 수 있고,p(또는P)와 지수로 2의 거듭제곱을 나타낼 수 있어요. 예:0x1p-2는 0.25. - 배정밀도 부동소수점으로 표현 불가능한 소수는 가장 가까운 값으로 반올림돼요.
- 산술 오버플로로 너무 큰 실수 리터럴은 오류를 내요.
- 정수 리터럴로 표현 가능한 값은 정수 타입으로, 아니면 실수 타입으로 저장돼요.
문자열 리터럴 (String literals)
문자열 리터럴은 큰따옴표(")로 감싸거나 작은따옴표(')로 감싸요. 둘 사이에는 동작 차이가 없어요.
"a line"
'another line'
문자열 안에는 여러 줄에 걸친 문자열을 위해 긴 괄호(long bracket)를 쓸 수도 있어요. [[ 과 ]] 사이, 또는 [==[ ... ]==] 형태로 여러 줄 문자열을 만들 수 있어요.
[[
첫 줄
둘째 줄
]]
긴 괄호 안에서는 이스케이프 시퀀스가 해석되지 않고 문자 그대로 유지돼요.
이스케이프 시퀀스(Escape sequences): 문자열 안에서 백슬래시(\) 뒤에 오는 문자는 특별한 의미를 가질 수 있어요.
| 이스케이프 | 의미 |
|---|---|
\a |
벨(bell) |
\b |
백스페이스 |
\f |
폼피드 |
\n |
새 줄(줄바꿈) |
\r |
캐리지 리턴 |
\t |
가로 탭 |
\v |
세로 탭 |
\\ |
백슬래시 자체 |
\" |
큰따옴표 |
\' |
작은따옴표 |
\newline |
줄바꿈(연속 줄) — 다음 줄의 앞 공백을 무시하고 한 줄로 연결 |
\ddd |
십진수 ddd에 해당하는 바이트 (최대 3자리) |
\xXX |
16진수 XX에 해당하는 바이트 |
\u{XXX} |
유니코드 코드 포인트 XXX |
문자열은 원하는 만큼 길 수 있고, \ddd(최대 3자리) 이스케이프는 0~255 범위만 표현할 수 있어요. \u{...}는 유니코드 코드 포인트를 UTF-8 인코딩으로 변환하는 데 쓰여요.
본문
프로그래밍 관례
식별자에서 특별한 접두사 이외에는 프로그래머가 자유롭게 이름을 지어요. 다만 밑줄(_)로 시작하는 이름은 루아의 전역 시스템 이름(예: _G, _VERSION)으로 예약하는 게 관례예요.
연속 줄(Line continuation)
백슬래시 바로 다음에 실제 줄바꿈이 오면, 루아는 그 백슬래시와 줄바꿈을 "단일 공백"으로 단순화해요. 이는 긴 문자열 리터럴을 여러 줄로 나누어 쓸 때 유용해요.