[PL] BNF, EBNF

Jimin·2022년 4월 18일
0

1. BNF (Backus-Naur-Form)

ex)

  • ::= 정의하다
  • | 또는
  • <> : nonterminal symbols
  • terminal symbols

2. EBNF

  • BNF에 비해 더 편리해짐
  • no more "powerful"
  • PL의 사실상 표준으로 널리 사용되고 있음

  • 메타기호 늘어남
    • "*": 0번 이상
    • "+": 1번 이상
    • "?": 0 or 1 → "[...]" 대신 사용하기도 함.
      → Use of parenthese for grouping

BNF vs EBNF


BNF: 재귀
EBNF: + (1번 이상), * (0번 이상)


EBNF: '.' → optional (여러 자리의 수)


Extended BNF

  • []: optional parts
  • (): alternative parts
  • {}: repetitions

✅EBNF <-> BNF

  • BNF to EBNF
    1) recursion
    A ::= aA | B ➡ A ::= {a}B
    2) for common string
    A ::= aB | a ➡ A ::= a[B]

  • EBNF to BNF
    1) options: []
    A ::= a[B]C ➡ A :: aNC, N ::= B | ɛ
    2) repetition: {}
    A ::= a {B1 B2 ... Bn} C ➡ A ::= aNC, N ::= B1 B2 ... Bn N | ɛ

0개의 댓글