EBNF ou Extended Backus-Naur Form est ISO 14977:1996, et est disponible en format PDF à partir de ISO gratuitement *. Il n'est pas largement utilisé par les normes de langage informatique. Il y a aussi un paper qui le décrit, et ce document contient ce tableau résumant la notation EBNF.
Table 1: Extended BNF
Extended BNF Operator Meaning
-------------------------------------------------------------
unquoted words Non-terminal symbol
" ... " Terminal symbol
' ... ' Terminal symbol
(...) Brackets
[ ... ] Optional symbols
{ ... } Symbols repeated zero or more times
{ ... }- Symbols repeated one or more times†
= in Defining symbol
; post Rule terminator
| in Alternative
, in Concatenation
- in Except
* in Occurrences of
(* ... *) Comment
? ... ? Special sequence
L'opérateur *
est utilisé avec un précédent (unsigned) nombre entier; il ne semble pas autoriser de nombres de répétitions variables, tels que 1 à 15 caractères après un caractère initial, pour faire des identifiants jusqu'à 16 caractères. Ce lis
Dans la norme, parenthèse ouverte (
est appelé symbole de groupe de démarrage et parenthèse fermante )
est appelé symbole de groupe final; le crochet carré ouvert [
est le symbole d'option de début et le crochet fermé est symbole d'option de fin; accolade ouverte {
est commencer le symbole de répétition et fermer accolade }
est symbole de fin de fin. Les guillemets simples '
sont appelés le premier guillemet et les guillemets "
sont le deuxième guillemet.
* Oui, gratuit - même si vous pouvez également payer 74 CHF si vous le souhaitez. Regardez la note sous la boîte contenant les articles imputables.
La question vise à transformer cette « BNF » en EBNF:
<vardec> ::= var <vardeclist>;
<vardeclist> ::= <varandtype> {;<varandtype>}
<varandtype> ::= <ident> {,<ident>} : <typespec>
<ident> ::= <letter> {<idchar>}
<idchar> ::= <letter> | <digit> | _
La BNF est pas formellement défini, nous devons donc faire un peu (facile) devine à ce que cela signifie. La traduction est la routine (ce pourrait être mécanique si le BNF est formellement défini):
vardec = 'var', vardeclist, ';';
vardeclist = varandtype, { ';', varandtype };
varandtype = ident, { ',', ident }, ':', typespec;
ident = letter, { idchar };
idchar = letter | digit | '_';
Les supports angle doivent être retirés autour de non-terminaux; le symbole de la définition ::=
est remplacé par =
; les terminaux tels que ;
et _
sont inclus entre guillemets; la concaténation est explicitement marquée avec ,
; et chaque règle est terminée avec ;
. Le regroupement et les opérations alternatives dans l'original coïncident avec la notation standard. Notez que la concaténation explicite avec la virgule signifie que les non-terminaux multi-mots sont sans ambiguïté.
† étude Casual de la norme elle-même suggère que la notation {...}-
ne fait pas partie de la norme, juste du papier.Cependant, comme jmmut notes dans un comment, la norme ne définit le sens de {…}-
:
§5.8 terme Syntactic
...
Lorsqu'un terme syntaxique est un facteur syntaxique suivi par un symbole excepté suivi d'une syntaxe-exception représente n'importe quelle séquence de symboles qui satisfait à la fois les conditions:
a) c'est une séquence de symboles représentée par le facteur syntaxique,
b) ce n'est pas une séquence de symboles représentée par l'exception syntaxique .
...
NOTE - { "A" } -
représente une séquence d'un ou plusieurs A est parce qu'il est un terme syntaxique avec un vide-exception syntaxique.
double possible de [Conversion BNF à EBNF] (http://stackoverflow.com/questions/8101594/converting-bnf-to-ebnf) – CharlesB
Qu'est-ce que vous avez exactement des problèmes avec? –
La question "duplication possible" a une réponse qui contient deux liens vers le matériel SO. Il pose certainement une question à peu près équivalente; il n'a cependant pas une très bonne réponse, donc ce n'est pas un bon doublon. –