Skip to content
heartleth edited this page Oct 8, 2023 · 7 revisions

Welcome to the Lan wiki!

What is lan?

Lan은 읽기 쉬운 메타문법입니다.

쓰는법

lan 문장들.txt --spec lan파일.lan --dict dictionary파일.dic [--multiline] [--strictws]

예제

Examples

Lan 문법

PART main
    # 주석, 구문 중간부터 주석은 안됨.
    # 품사의 인자들은 반드시 양옆에 띄어쓰기를 해야 함.
    # 규칙들의 이름은 중복 가능.
    RULE 규칙이름 $품사 $품사( 인자1 인자2 ... ) $품사

    # 말단품사는 --dict로 지정된 .dic파일에서 정의함.
    RULE 규칙이름 *말단품사 말단기호-이름

    # <-<, -, >-> 은 각각 한 줄의 시작, 공백들(공백, 탭, 개행, 캐리지리턴), 한 줄의 끝을 의미함.
    RULE 규칙이름 <-< - >->

    # @N:M은 N번째 말단품사의 M번째 속성을 가리킴.
    RULE 규칙이름 *말단품사 $품사( @0:0 )

    # 말단품사 뒤에 [:N=...] 혹은 [:N!=...] 을 써서 N번째 속성이 ...인 (이 아닌) 어휘만 지정할 수 있음 기본값은 0임.
    RULE 규칙이름 *말단품사[:0=hello]

    # 앞에 ?를 붙이면 해당 구절은 생략 가능함.
    RULE 규칙이름 $품사1 ?$품사2

    # 위 한 줄은 아래 두 줄과 같다.
    RULE 규칙이름 $품사1 $품사2
    RULE 규칙이름 $품사1

    # 앞에 =>를 붙이면 해당 구절은 0번 이상 반복될 수 있음.
    # 앞에 |>를 붙이면 해당 구절은 1번 이상 반복될 수 있음. |>$P는 $P =>$P 와 같음.
    # |>와 =>가 붙은 구절은 맨 뒤에 있어야 함. 
    RULE 규칙이름 |>$품사
    RULE 규칙이름 $품사1 =>$품사2

    # 여러번 반복되는 부분은 SET으로 줄일 수 있음. ?를 붙여 선택적으로 만들거나 반복하거나 조건을 지정할 수는 없음.
    SET 생략기호이름 *a *b *c *d
    RULE 규칙이름 $품사 %생략기호이름 $품사
END

PART 품사
    # :N 은 N번째 인자를 가리킴. 모든 인자의 기본값은 0임.

    # 인자로 인자를 전달할 수 있음.
    RULE 품사이름 $품사1( :0 )

    # 0번째 인자가 0이라면 안쪽 규칙들이 활성화됨. ELSE문은 없음.
    IF :0 0
        RULE ...
        ...
    END

    # 0번째 인자가 hello가 아니라면 안쪽 규칙들이 활성화됨.
    UNLESS :1 hello
        RULE ...
        ...
    END

    # 구절 앞에 [:N=...] 혹은 [:N!=...]을 붙여 IF또는 UNLESS문을 간략화할 수 있음. ?, |>, =>와 함꼐 사용될 수 없음.
    RULE 품사이름 $품사1 [:0=1]$품사2

    # 위 한 줄은 아래 여섯 줄과 같다.
    IF :0 1
        RULE 품사이름 $품사1 $품사2
    END
    UNLESS :0 1
        RULE 품사이름 $품사1
    END
END

Dict 문법

PART 품사
# 주석, 구문 중간부터 주석은 안됨.

단어1
단어2
단어3
단어4 속성1
단어5 속성1 속성2 ...
Clone this wiki locally