어휘 구조
소스를 단어(토큰)로 나누는 규칙입니다. 이 규칙을 지키지 않으면 문법 검사보다 앞선 단계에서 at line N, column M. 위치가 붙은 오류가 발생합니다.
소스 파일
섹션 제목: “소스 파일”- 확장자는
.uni이고 UTF-8로 저장합니다. - 공백·탭·줄바꿈은 토큰을 구분할 뿐 의미가 없습니다. 들여쓰기는 4칸 공백을 권장하며
unic format이 같은 형태로 정리합니다. - 한글 등 ASCII 밖의 문자는 문자열 리터럴과 주석 안에서만 사용할 수 있습니다. 이름·기호 위치에 쓰면 거절됩니다.
int 값 = 1;// Unexpected non-ASCII byte 0xEA at line 1, column 5.| 형태 | 범위 |
|---|---|
// 설명 |
줄 끝까지 |
/* 설명 */ |
*/가 나올 때까지, 여러 줄 가능 |
블록 주석은 중첩되지 않습니다. /* a /* b */ c */에서는 첫 */에서 주석이 끝나므로 c */가 코드로 남습니다. 닫지 않은 블록 주석은 Unterminated block comment 오류입니다. 문서 주석(/** */)도 일반 블록 주석으로 취급합니다.
식별자
섹션 제목: “식별자”- 첫 글자: 영문자
A–Z,a–z또는_ - 이후 글자: 영문자, 숫자
0–9,_ - 대소문자를 구분합니다.
count와Count는 다른 이름입니다.
이름의 대소문자에는 문법적 의미가 있습니다. 대문자로 시작하는 이름 뒤의 괄호는 생성자 호출(User("Kim"))로, 소문자로 시작하는 이름 뒤의 괄호는 메서드 호출(total(3))로 해석합니다. 클래스·인터페이스·enum 이름은 대문자로, 변수·메서드·필드 이름은 소문자로 시작하세요.
예약어
섹션 제목: “예약어”아래 단어는 이름으로 사용할 수 없습니다.
package import class partial interface extends implementspublic private protected static native const finalvoid var return await try catch throwif else while do for break continuetrue false null required다음 단어는 예약어가 아니지만 정해진 위치에서 특별한 의미를 가집니다. 혼동을 막기 위해 이름으로 쓰지 않는 것을 권장합니다.
| 단어 | 특별한 의미를 갖는 위치 |
|---|---|
enum |
최상위 enum 선언 |
schema |
최상위 schema 선언 |
this, super |
현재 객체·부모 클래스 참조 |
print |
print(식); 출력 문장 |
sql, json, grpc |
바로 뒤에 {가 오는 내장 언어 블록 |
html, css |
바로 뒤에 {가 오면 소스 단계에서 하나의 내장 언어 블록으로 읽음 |
new |
예약어는 아니지만 new 타입(...) 형태는 거절됩니다. |
리터럴
섹션 제목: “리터럴”| 표기 | 타입 | 예 |
|---|---|---|
| 10진수 | int |
0, 42, 2147483647 |
_ 구분 |
int |
1_000_000 |
16진수 0x |
int |
0xFF |
2진수 0b |
int |
0b1010 |
L 또는 l 접미사 |
long |
42L, 0xFFL, 1_000L |
int범위(−2147483648 ~ 2147483647)를 넘는 값에는L을 붙입니다.long리터럴의 범위는 −9223372036854775808 ~ 9223372036854775807입니다. 각 타입의 범위를 넘는 리터럴은 컴파일 오류이며 작은 값으로 잘라 쓰지 않습니다._는 숫자 사이에만 둘 수 있습니다.1__0,10_은 숫자로 인정되지 않습니다.- 음수는 단항 연산자
-를 붙인 식입니다(-5). byte·short·char전용 리터럴은 없습니다. 정수 리터럴은int이므로byte b = 1;은 거절됩니다(숫자 대입 규칙).
| 표기 | 타입 | 예 |
|---|---|---|
| 소수점 | double |
1.5, 0.25, 2.0 |
f 또는 F 접미사 |
float |
1.5f, 3f |
- 소수점 앞에는 숫자를 씁니다.
.5대신0.5를 사용합니다. - 지수 표기
1e5는 미지원입니다.100000.0처럼 씁니다. float변수에는f접미사를 붙입니다.float ratio = 1.5;는double을float에 넣는 축소이므로 거절됩니다.
논리값과 null
섹션 제목: “논리값과 null”true, false는 bool 값입니다. null은 null 허용 타입 T?에만 넣을 수 있습니다.
- 작은따옴표 안에 ASCII 문자 하나 또는 이스케이프 하나를 씁니다:
'a','7','\n','\''. - 타입은
char입니다.'가'처럼 ASCII 밖의 문자는char로 해석되지 않으므로 문자열"가"를 사용하세요.
문자열
섹션 제목: “문자열”- 큰따옴표로 감싸며 한 줄 안에서 닫아야 합니다. 줄바꿈이 필요하면
\n을 씁니다. 닫지 않으면Unterminated string literal오류입니다. - 타입은
string입니다. 문자열 안에는 한글·이모지 등 UTF-8 문자를 그대로 쓸 수 있습니다. - 코드의 식 위치에서 쓸 수 있는 여러 줄 텍스트 블록은 SQL 전용
sql"""…"""만 있습니다(내장 언어)."""text block은 모델링 schema의 문자열 값과@Description·@Notes·@Title인수에만 사용하며 식으로 쓰면 오류입니다(여러 줄 값). - 문자열 보간(
$"{x}",`${x}`)은 미지원입니다.+로 연결합니다.
이스케이프
섹션 제목: “이스케이프”| 표기 | 의미 |
|---|---|
\n |
줄바꿈 |
\r |
캐리지 리턴 |
\t |
탭 |
\" |
큰따옴표 |
\\ |
역슬래시 |
위 다섯 가지만 보장되는 이스케이프입니다. 그 밖의 \x 형태(A, \0 등)는 오류로 거절되지 않지만 검사 경로와 실행 대상에 따라 해석이 다를 수 있으므로 사용하지 마세요. 유니코드 문자는 문자열 안에 그대로 씁니다. enum 값 문자열에서는 위 다섯 가지 이외의 이스케이프가 Unsupported enum string escape; use literal UTF-8 text. 오류입니다.
| 분류 | 기호 |
|---|---|
| 구분자 | { } ( ) [ ] ; , . : |
| 산술 | + - * / % |
| 비교 | == != < <= > >= |
| 논리 | && || ! |
| 비트·시프트 | & | ^ ~ << >> >>> |
| 대입 | = |
| 삼항·null 허용 | ? : (삼항), 타입 뒤 ? (null 허용) |
| 어노테이션 | @ |
->는 함수 타입, =>는 람다에 사용합니다. ++ -- += -= *= /= %= ??는 토큰으로 읽지만 문장·식에서 지원하지 않습니다. 대체 문법은 문법 요약에 있습니다. #, $, `, 문자열 밖의 \는 Unexpected character 오류입니다.