rokdocs
v0.1

0.8. 표기법

이 절은 본 사양 전반에서 사용하는 메타 표기 규약을 정리합니다. 1장부터 9장까지 모두 이 규약을 따르므로, 이후 본문을 읽기 전에 이곳을 먼저 참고하면 좋습니다.

0.8.1. 코드 / 식별자 표기

다음 표는 자주 쓰이는 세 가지 형태와 그 의미, 그리고 실제 사용 예를 보여 줍니다.

표기의미예
` (backtick)키워드, 식별자, 토큰, 타입 이름, 코드 조각`let`, `i32`
펜스 (```)다중 줄 코드 블록 - 언어 명 명시```rok 또는 ```ebnf
인라인 코드짧은 코드 조각`x + y`

문장 안에서 키워드를 가리킬 때는 항상 backtick으로 감쌉니다. 이렇게 하면 본문 흐름과 시각적으로 자연스럽게 구분됩니다.

0.8.2. 강조

강조 표기는 단순한 시각적 장식이 아니라 각각 정해진 용도가 있으므로, 아래 표에 정리한 의미와 사용처를 따릅니다.

표기의미사용처
*텍스트*이탤릭 - 개념 강조새 용어 도입, 의미 강조
**텍스트**볼드 - 경고, 핵심 결정사항"이는 컴파일 에러", "완전 거부"
> [!NOTE]GitHub 스타일 정보 박스부수 사항, 비공식 가이드
> [!WARNING]GitHub 스타일 경고 박스함정, 흔한 오해
> [!IMPORTANT]GitHub 스타일 중요 박스핵심 invariant, 반드시 지켜야 할 규칙

0.8.3. 문법 정의 - BNF 변형

이어서 문법을 어떻게 표기하는지 설명합니다. 본 사양에서 문법은 EBNF 변형으로 표기합니다. 사용하는 메타 문자는 다음과 같습니다.

메타의미예
name ::= rhs정의path ::= ident ("::" ident)*
|대안 (alternative)bool ::= "true" | "false"
?0회 또는 1회 (옵션)param ::= ident (":" type)?
*0회 이상args ::= expr ("," expr)*
+1회 이상digits ::= digit+
( ... )그룹화(a | b) c
"..."문자 그대로kw_let ::= "let"
비단말 (italic)다른 정의 참조expr ::= literal | call

문법 블록은 ```ebnf 또는 평문 펜스로 표기합니다. 예를 들어 함수 선언 문법은 다음과 같이 적을 수 있습니다.

fn_decl     ::= "fn" ident "(" params? ")" ret_ty? block
params      ::= param ("," param)* ","?
param       ::= ident (":" type_expr)? default_value?
ret_ty      ::= "->" type_expr
default_value ::= "=" expr

여기서 한 가지 중요한 점을 짚어 둡니다. 문법은 어디까지나 참고용 형태 정의입니다. 의미 (semantics) 는 본문 산문에서 정의되며, 따라서 문법만으로 프로그램의 의미를 결정할 수는 없습니다.

0.8.4. Cross-reference

문서 내 다른 섹션을 참조하는 방식도 일관되게 유지하고자 합니다. 다른 섹션을 참조할 때는 안정 섹션 번호 와 상대 경로 링크 를 함께 표기합니다.

[3.2 우선순위와 결합성](../003-expressions/302-precedence-and-associativity.md)

다만 본문 안에서 가볍게 언급하는 약식 참조는 섹션 번호만 사용해도 무방합니다.

spec 2.7.4 의 niche 규칙 참조.

이 형태를 따르면 파일이 rename 되어도 의미가 보존됩니다. 파일 경로는 자동화 도구가 갱신해 주므로 걱정하지 않아도 됩니다.

0.8.5. 코드 예시 컨벤션

코드 예시 또한 일정한 컨벤션에 맞추어 작성합니다. 아래는 가장 기본이 되는 형태입니다.

// 짧은 한 줄 주석
fn example() -> i32 {
    let x = 42;        // x 는 implicit generic - 단순화한 예제
    return x;
}

코드 예시를 작성할 때 지켜야 할 규칙을 정리합니다. 첫째, 모든 코드 예시는 컴파일 가능한 rok 프로그램의 일부여야 합니다. 둘째, 단편 (snippet) 은 // ... 로 표시하고 본문에서 컨텍스트를 명시합니다. 셋째, 의도적으로 잘못된 예시를 보일 때에는 본문에서 분명히 밝히고, // ERROR: ... 주석이나 산문 안내를 함께 덧붙입니다. 마지막으로, 실행 결과나 출력은 //→ 주석으로 표시하면 됩니다.

다음은 마지막 규칙을 적용한 예시입니다.

let r = 1 + 2;        //→ 3
let s = "hello";      //→ str

0.8.6. 안정 섹션 번호

각 섹션은 영구적인 <chapter>.<section>(.<sub>)* 번호를 가집니다. 파일이 rename 되거나 이동하더라도 이 번호는 변경되지 않으므로, 참조의 안정적인 기준점 역할을 합니다. 번호 체계는 다음 표와 같습니다.

형태예의미
C.S2.7C 장의 S 번째 섹션
C.S.s2.7.4C.S 의 s 번째 하위 절
C.S.s.x2.7.4.1더 깊은 하위 절 (드물게)

cross-reference 는 항상 이 번호로 합니다. 파일 경로 (002-types/207-...md) 는 IDE 나 GitHub 의 편의를 위해 추가로 표기하는 것일 뿐, 참조의 본체는 어디까지나 섹션 번호입니다.

0.8.7. 표기의 한계

마지막으로 본 표기법의 범위와 한계를 분명히 해 두고자 합니다. 본 표기법은 참고용 형태만 정의합니다. 컴파일러가 입력을 정확히 어떻게 파싱하고 의미를 부여하는지는 본문 산문, 코드 예시, 그리고 컴파일러 구현에 의존합니다. 즉 BNF 만으로 모든 의미가 결정되지 않는다 는 점을 기억해야 합니다. 의미에 대한 권위는 언제나 산문에 있습니다.

GitHub에서 이 페이지 고치기