^^BNF Backus–Naur Form. EBNF Extended BNF.

BNF e' un metalinguaggio creato per parlare sul linguaggio di programmazione ALGOL.

Poi il suo uso si e' generalizzato: 

BNF is a metasyntax notation for context-free grammars, cioe' un modo di formulare una grammatica formale di tipo context-free.

BNF e' una grammatica generativa.

ref: I significati del verbo essere.

es Grammatica per una sequenza.
Stringa di cararatteri, cioč sequenza di elementi

genera tutte le possibili sequenza contenenti i caratteri scelti.

Le grammatiche seguenti generano lo stesso linguaggio, ma sono leggermente diverse.

BNF Formal grammar
<car> ::=  a | b

<seq> ::=  <car>

<seq> ::=  <seq><car>

C → a | b

S → C

S → SC

 

<car> ::=  a | b

<seq> ::=  <car>

<seq> ::=  <seq><seq>

C → a | b

S → C

S → SS

 

<seq> ::=  a | b

<seq> ::=  <seq><seq>

S→ a | b

S → SS

es nr intero assoluto

BNF Formal grammar
<cifra> ::=  0|1|2|3|4|5|6|7|8|9

<nr> ::=  <cifra>

<nr> ::=  <nr><cifra>

C →  0|1|2|3|4|5|6|7|8|9

N → C

N → NC

the grammar generates all integers unsigned nr, allowing redundant leading 0s.

E' un caso particolare della grammatica per una sequenza.

BNF metalinguaggio

e' costituita da 3 elementi: le parole del metalinguaggio, e 2 connettivi

<xxx> parola del metalinguaggio: una parola del linguaggio comune racchiusa da parentesi acute, interpretata come nome di una classe
::= da interpretare come:  "e' definita come"
| usato per separare definizioni alternative, interpretato come "OR"

ogni altra cosa sono simboli del linguaggio in definizione.

Nota storica

I connettivi originali di Backus erano diversi   

__

or

 

  ≡

Naur li sostituisce con caratteri ASCI |   ::=

Teo: BNF equivale a una grammatica context-free

dipende dal fatto che nella definizione di BNF

la parte sinistra delle regole ha 1 solo elemento sostituibile.

Extended BNF (EBNF)

BNF grammar was quickly extended with conveniences that let us define rules succinctly.
In pratica ognuno se la fa come gli pare, dichiarandola, es

Python modified BNF grammar notation python.org

 

*   asterisk: "zero or more"

seq ::=  car car*   sequenza di caratteri non vuota

abs_integer ::=   "0"  |  nonzerodigit digit*

 

+   plus: "1 or more"

seq ::=  car+   sequenza di caratteri non vuota

 

( ... ) parentesi tonde: raggruppa

 

[ ... ] brackets: optional

(["_"] digit)*      es 120_000    "_" separa per visibilita'

 

{ ... } curly braces

 

Python modified BNF grammar notation Python BNF.

 

 

Links inet

  1. wp/Backus–Naur_form  interessante paragrafo storico
  2. wp/EBNF Extended_Backus–Naur_form
  3. matt.might/grammars-bnf-ebnf The language of languages
  4. ref: cs.ksu.edu/~schmidt

Approfond

BNF e' un metalinguaggio

in parole povere: e' una convenzione di scrittura (per scrivere context-free grammars).

BNF e' una grammatica generativa

rob: la definizione di "formal grammar" credo si possa fare in modi-forme diversi, e quindi l'essenza di "formal grammar" e' l'astratto delle sue esposizioni concrete. BNF e' una forma equivalente alla grammatica formale context free.

ref: cs.ksu.edu/~schmidt

 

Talk

Titolo

  1. Formal grammar. BNF Backus–Naur Form. EBNF Extended BNF.
    c: ori.
  2. BNF Backus–Naur Form. EBNF Extended BNF.
    c: 3-4-2022. Anche il titolo originale e' buono, solo che e' un po' troppo lungo. E' importante segnalare che e' una "Formal grammar", o meglio ancora "un modo di formulare una grammatica formale di tipo context-free.