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.
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 |
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.
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 storicaI connettivi originali di Backus erano diversi |
__ or |
≡ |
Naur li sostituisce con caratteri ASCI | | | ::= |
dipende dal fatto che nella definizione di BNF
la parte sinistra delle regole ha 1 solo elemento sostituibile.
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
seq ::= car car* sequenza di caratteri non vuota
abs_integer ::= "0" | nonzerodigit digit*
seq ::= car+ sequenza di caratteri non vuota
(["_"] digit)* es 120_000 "_" separa per visibilita'
in parole povere: e' una convenzione di scrittura (per scrivere context-free grammars).
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