문서 편집 권한이 없습니다. 다음 이유를 확인해주세요: 요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다: 사용자. 문서의 원본을 보거나 복사할 수 있습니다. [[분류: 프로그래밍 언어]] == 개요 == '''배커스-나우르 표기법'''(Backus–Naur form), 약칭 '''BNF'''는 [[문맥 자유 문법]]을 나타내기 위해 만들어진 표기법이다. [[존 배커스]]와 [[페테르 나우르]]의 이름을 따서 부른다. BNF는 기본적으로 다음의 문법을 사용한다. <syntaxhighlight lang="bnf"> <기호> ::= <표현식> </syntaxhighlight> * 기호는 [[말단 기호]]가 될 수 없다. * 표현식은 다른 기호의 조합, 또는 여러 가지의 표현식 중 하나를 사용한다는 의미로 |를 사용한다. * 다른 표현식으로 정의되지 않은 기호는 자동적으로 [[말단 기호]]가 된다. * 기호가 아닌 상수에는 따옴표를 붙여서 구별한다. * <code>::=</code>는 왼쪽의 기호가 오른쪽의 기호로 치환됨을 의미한다. == 예시 == 예를 들어, 간단한 Arithmetic expression을 BNF 표기법으로 나타내면 다음과 같다. <syntaxhighlight lang="bnf"> expr :: = "(" expr "+" expr ")" // addition | "(" expr "-" expr ")" // subtraction | num // number num :: = "1" | "2" | ... | "42" ... // number </syntaxhighlight> 여기서 expr이라는 variable은 집합 즉, addtion, subtraction 그리고 number로 구성된 연산자 정의의 집합으로 구성된다. * expr은 다음 세개의 조합으로 구성된다. * 1. expr + expr * 2. expr - expr * 3. expr은 <num> * <num>은 정수중의 하나이다. 이를 [[Scala]]로 변환하면 다음과 같다. <syntaxhighlight lang="scala"> trait Expr case class Num(num: Int) extends Expr case class Add(left: Expr, right: Expr) extends Expr case class Sub(left: Expr, right: Expr) extends Expr </syntaxhighlight> Backus-Naur form 문서로 돌아갑니다.