1. 용어

1.1. 문법적 메타언어(Syntactic Metalanguage)

메타언어란 다른 언어의 문법(Syntax)을 정의하기 위한 표기법 이다. 이때 몇가지의 생성 규칙(Production rules) 을 사용하여 문법을 정의하게된다. 명령어, 데이터의 포맷, 논문의 레퍼런스 부터 프로그래밍 언어의 문법까지 정의할 수 있다.

대표적인 메타언어로 확장된 배커스 정규형 (Extended Backus–Naur form, EBNF) 가 있다.

1.2. 생성 규칙(Production rules)

생성 규칙은 심볼(Symbol)을 재귀적으로 치환하여 새로운 심볼의 결과를 만드는 재작성 규칙(rewrite rule) 이다.

생성 규칙은 비단말 심볼(non-terminal symbol)과 이 변환 가능한 형태(forms)로 구성된다.

1.3. 문맥 자유 문법(Context-free grammar)

문맥 자유 문법은 모든 가능한 문자열을 표시하기 위한 생성 규칙(Production rules) 의 집합이다. 또한 형식적 문법(Formal Grammar)의 한 종류이다.

1.4. 배커스 정규형(Backus normal form)

배커스 정규형은 문맥 자유 문법을 위한 표기법 이다. 배커스 정규형은 주로 프로그래밍 언어의 문법을 묘사하며, 메타언어 으로서 구절의 허용 가능한 구조와 문장의 구성과 문장을 묘사한다.

BNF는 파생규칙의 집합이며 다음과 같이 작성한다.:

<symbol> ::= __expression__

<symbol>은 비단말이고 __expression__은 1개 이상의 심볼로 구성된다. 2개 이상의 시퀀스는 수직바로 구분하여 표시하면 되고 시퀀스중 하나를 선택하여 치환 가능함을 뜻한다. 왼쪽에는 단말이 올 수 없고 왼쪽편의 심볼은 언제나 < > 로 감싸야 한다.

::= 은 왼쪽의 심볼이 오른쪽의 표현식으로 치환 될 수 있다는 의미를 갖는다.

1.5. 확장된 배커스 정규형 (Extended Backus–Naur form, EBNF)

EBNF는 BNF을 확장한 국제표준 메타언어이다. 이곳 에서 EBNF 표준을 확인할 수 있다.

1.6. 문법, 구문론(Syntax)

어떤 문장 구조가 타당한지 나타내는 규칙이다.

1.7. 프로그래밍 언어(Programming language)

프로그램을 작성하기 위한 명령어의 집합을 갖고 있는 형식언어(Formal language)이다.

1.8. 형식 언어(Formal language)

형식 언어는 심볼과 문자열 그리고 이것에 대한 규칙의 집합이다.

1.9. 메타언어(Metalanguage)

여러가지 규칙을 사용하여 언어의 문법을 정의하는 표기법이다.

1.10. 형식적 문법 정의(Formal syntax definition)

언어의 문법에 대한 정의를 뜻한다. 형식적 문법 정의는 크게 3가지 사용법을 갖고 있다.

  • 언어의 비 단말 심볼(non-terminal symbols)에 이름을 붙힐때
  • 연속된 심볼(symbols)이 타당한 문장인지 확인할 때
  • 문장에 대한 문법적 구조를 보일때

1.11. 매개변수, 인자값

함수에서 인자로 참조되는 변수를 매개변수(Parameter)라고 부르며 메서드를 호출할때 함수로 전달하는 값을 인자(Arguments)라고 한다.

1.12. 시퀀스(Sequence)

시퀀스란 0개 이상의 항목을 포함하는 순서가 있는 리스트이다. 서브 시퀀스(Subsequence)는 시퀀스 안에 있는 시퀀스를 뜻한다.

1.13. 펑터(Functor)

여러가지 자료구조를 캡슐화하고, 일관된 API를 제공하는 자료구조이다.

코드로 다음과 같이 표현됨:

import java.util.function.Function;

interface Functor<T> {
    <R> Functor<R> map(Function<T,R> f);
}

1.14. 모나드(Monad)

특정한 타입의 값을 저장하거나 특정 연산으로 부터 새로운 타입을 만들어내는 것을 뜻한다.