Na potrzeby formalnego opisu gramatyk (zwłaszcza języków programowania) opracowano notację Backusa-Naura (BNF, Backus-Naur Form). Pozwala ona definiować w bardzo formalny (i rekurencyjny) sposób różne dziwne rzeczy. Podstawowe symbole używane w notacji to:
<
lewy ogranicznik>
prawy ogranicznik::=
oznaczający jest zdefioniowane jako|
lub?
nieobowiązkowe
Teoretycznie zapis ten może pomóc w sprawdzaniu czy napis jest liczbą…
Liczbę ze znakiem można zdefiniować w sposób następujący:
<signed_integer> ::= <sign>? <integer>
<sign> ::= "+" | "-"
<integer> ::= <digit> | <integer> <digit>
<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
Liczba zmiennoprzecinkowa może być zdefiniowana jako
<float_number> ::= <sign> <integer_part> "." <fractional_part> <exponent_part>
<sign> ::= "+" | "-" | " "
<integer_part> ::= <digit> | <digit> {<digit>}
<fractional_part> ::= <digit> | <digit> {<digit>}
<exponent_part> ::= "e" <sign> <integer_part> | ""
<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
Można w ten sposób opisać gramatykę języka C.