Cours 1: BNF

Objectif: lire la grammaire Ada. Identificateur. Littéral numérique.

Extrait du manuel de référence (RM95):


       identifier ::=
          identifier_letter {[underline] letter_or_digit}

       letter_or_digit ::= identifier_letter | digit

La notation BNF utilise des méta-caractères.
En voici la liste avec leur signification:

[ optionnel ]
{ zero_occurrence_au_moins }
choix_1 | choix_2 | choix_3

Remarques sur la règle de réécriture précédente:

Extrait du manuel de référence (RM95):


       Examples of identifiers:

       Count           X               Get_Symbol      Ethelyn         Marion

       Snobol_4        X1              Page_Count      Store_Next_Item

Contre-exemples:


       4X              _x              x_              lettre-ou-chiffre

       lettre__ou__chiffre

Extrait du manuel de référence (RM95):


       numeric_literal ::= decimal_literal | based_literal

       decimal_literal ::= numeral [.numeral] [exponent]

       numeral ::= digit {[underline] digit}

       exponent ::= E [+] numeral | E - numeral

Remarques sur les littéraux numériques en base 10 (décimaux):

Extrait du manuel de référence (RM95):


       Examples of decimal literals:

       12        0      1E6    123_456           --  integer literals

       12.0      0.0    0.456  3.14159_26        --  real literals

Contre-exemples:


       0.        .      .0     1,2        1E-1     E2 

Extrait du manuel de référence (RM95):


       based_literal ::=
          base # based_numeral [.based_numeral] # [exponent]

       base ::= numeral

       based_numeral ::=
          extended_digit {[underline] extended_digit}

       extended_digit ::= digit | A | B | C | D | E | F

Remarques sur les littéraux numériques basés:

Extrait du manuel de référence (RM95):


       Examples of based literals:

       2#1111_1111#   16#FF#       016#0ff#       --  integer literals of value 255

       16#E#E1        2#1110_0000#                --  integer literals of value 224

       16#F.FF#E+2    2#1.1111_1111_1110#E11      --  real literals of value 4095.0