Backus-Naur form

Ahn9807 (토론 | 기여)님의 2023년 2월 25일 (토) 04:56 판
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)


개요

배커스-나우르 표기법(Backus–Naur form), 약칭 BNF문맥 자유 문법을 나타내기 위해 만들어진 표기법이다. 존 배커스페테르 나우르의 이름을 따서 부른다.

BNF는 기본적으로 다음의 문법을 사용한다.

 <기호> ::= <표현식>
  • 기호는 말단 기호가 될 수 없다.
  • 표현식은 다른 기호의 조합, 또는 여러 가지의 표현식 중 하나를 사용한다는 의미로 |를 사용한다.
  • 다른 표현식으로 정의되지 않은 기호는 자동적으로 말단 기호가 된다.
  • 기호가 아닌 상수에는 따옴표를 붙여서 구별한다.
  • ::=는 왼쪽의 기호가 오른쪽의 기호로 치환됨을 의미한다.

예시

예를 들어, 간단한 Arithmetic expression을 BNF 표기법으로 나타내면 다음과 같다.

 expr :: = "(" expr "+" expr ")" // addition
         | "(" expr "-" expr ")" // subtraction
         | num                   // number
 num  :: = "1" | "2" | ... | "42" ... // number

여기서 expr이라는 variable은 집합 즉, addtion, subtraction 그리고 number로 구성된 연산자 정의의 집합으로 구성된다.

  • expr은 다음 세개의 조합으로 구성된다.
  • 1. expr + expr
  • 2. expr - expr
  • 3. expr은 <num>
  • <num>은 정수중의 하나이다.

이를 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